Недалеко от Москвы, на берегу Оки есть небольшой город Таруса. В конце 19 века семья профессора Цветаева сняла здесь дачу и Марина Цветаева провела все детство в этих местах. Позднее уже в 70-х в Тарусе поселилась и поэтесса Белла Ахмадулина. Женщины, конечно, никогда не встречались при жизни. Но памятники обеим поэтесса стоят ровно напротив друг друга на набережной Оки в центре Тарусы. Мне стало интересно с помощью Python проанализировать цветаевские следы в творчестве Ахмадулиной и математически проявить диалог поэтических миров двух авторов.

В одном из стихотворений Ахмадулина прямо обращается к Цветаевой:

Я целовала крутолобье волн,

просила море: Притворись водою!

Страшусь тебя, словно изгнали вон

в зыбь вечности с невнятною звездою.

Та любит твердь за тернии пути,

пыланью брызг предпочитает пыльность

и скажет: Прочь! Мне надобно пройти.

И вот проходит — море расступилось.

Я начал с того, чтобы выявить, как в поэзии Ахмадулиной реализуются ключевые образы Цветаевой "лоб", "горло", "путь", "дом".

TARGET_LEMMAS = {'лоб', 'горло', 'гортань', 'путь', 'дом'}
def normalize_and_tokenize(text):
    text = re.sub(r'[^а-яё\s]', ' ', text.lower())
    return [token.text for token in razdel.tokenize(text)]
def count_lemmas(tokens):
    counts = {lemma: 0 for lemma in TARGET_LEMMAS}
    for token in tokens:
        if len(token) < 2:
            continue
        parsed = morph.parse(token)
        if parsed:
            lemma = parsed[0].normal_form
if lemma in TARGET_LEMMAS:
                counts[lemma] += 1

Этот код удаляет всё, кроме букв и пробелов, и разбивает текст на слова. Далее count_lemmas использует pymorphy3 для определения начальной формы каждого слова. Это позволяет учитывать все грамматические формы слов "лба", "лбу", "горлом", "путей".

Результаты: частотность мотивов

Мотив

Ахмадулина

Цветаева

 дом          

40

179

лоб

10

111

горло

4

17

гортань

4

4

путь

4

89

У Цветаевой все мотивы встречаются значительно чаще, это её авторская система. Но у Ахмадулиной все мотивы присутствуют, даже редкое слово "гортань". Это подтверждает мою гипотезу, что Ахмадулина входит в цветаевскую образную систему, а не просто ее цитирует.

Затем я решил проверить характерность этих мотивов для обеих поэтесс с помощью TF-IDF, чтобы проверить насколько "вес" слова пропорционален частоте его употребления в корпусе и обратно пропорционален частоте его употребления.

vectorizer = TfidfVectorizer(vocabulary=TARGET_LEMMAS, lowercase=True, token_pattern=r'(?u)\b[а-яё]+\b')

tfidf_matrix = vectorizer.fit_transform([text_bella, text_marina])

TF-IDF по целевым мотивам

мотив

Ахмадулина

Цветаева

дом

0.9748   

0.7573

путь

0.1625

0.5128

горло

0.1083

0.0868

лоб

0.1083

0.3944

гортань

0.0000

0.0222

"Дом" имеет высокий TF-IDF у обоих авторов, получается, что это ключевой мотив их диалога. У Ахмадулиной "дом" даже более характерен, чем у Цветаевой (0.97 > 0.75), но возможно, из-за меньшего размера корпуса.

Далее я решил вычислить семантическое сходство контекста с помощью SBERT. Эта модель позволяет представить текст в виде векторных представлений и построить эмбеддинги, компактные числовые векторы фиксированной длины, которые сохраняют смысл текста. Эти векторы можно сравнить, чем они ближе, тем более похожи тексты.

model = SentenceTransformer('sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2')
def extract_contexts_full(text, target_lemmas, window=5):
    tokens = normalize_and_tokenize(text)
    contexts = []
    for i, token in enumerate(tokens):
        parsed = morph.parse(token)
        if parsed and parsed[0].normal_form in target_lemmas:
            start = max(0, i - window)
            end = min(len(tokens), i + window + 1)
            context = ' '.join(tokens[start:end])
            contexts.append(context)
    return contexts

SBERT преобразует контекст предложения в 384-мерный вектор. Я беру плюс-минус 4 слова вокруг целевого. Косинусное сходство 0.9 означает почти идентичный смысл.

Результат:

«лоб»: сходство = 0.914

«горло»: сходство = 0.856

«путь»: сходство = 0.826

«дом»: сходство = 0.957

Косинусное сходство > 0.8 означает почти идентичные семантические контексты. "Дом" у обеих поэтесс связан с одиночеством и судьбой. "Лоб" и "горло" с творческим страданием и физиологией голоса.

Вот что пишет Ахмадулина о Цветаевой в 1968 году:

Тяжелой болью памяти к тебе,

когда, хлебая безвоздушность горя,

от задыхания твоих тире

до крови я откашливала горло.

Здесь Ахмадулина воспроизводит "телесный" образ поэта, где голос рождается в горле, а мысль во лбу.

Цифровой анализ количественно подтверждает мою гипотезу, что Ахмадулина ведёт диалог с Цветаевой через систему образов, а не через отдельные цитаты. Код позволяет увидеть, как один поэт входит в художественный мир другого, воссоздавая его образную систему. Он позволяет увидеть, как связаны поэтические миры двух женщин.