Мне нравится еще, что Вы при мне
Спокойно обнимаете другую,
Не прочите мне в адовом огне
Гореть за то, что я не Вас целую.
В этом стихотворении, ставшем очень известным благодаря одному новогоднему кинофильму, Марина Цветаева трогательно признается в любви к мужу своей сестры. Из воспоминаний самой Анастасии Цветаевой, сестры поэтессы, известно, что ее муж Маврикий Минц и Марина Цветаева действительно дружили и испытывали нежные чувства друг к другу. Чтобы так умело выразить нежность и любовь через отрицание, нужны, вероятно, немалые душевные качества, доступные не всякому. Мне стало интересно исследовать творчество Цветаевой с помощью Python и вычислить те поэтические инструменты, которые она использует для выражения любви и описания таких чувств в поэзии.
Я скачал в интернете полное собрание сочинений Цветаевой (издательство "Эксмо", 2006 год) и превратил тексты из этой книги в один файл .txt объемом 707487 символов. Меня интересовал не просто подсчет слова "любовь" в стихотворениях, а именно выяснение того, какими эпитетами Цветаева описывает любовные чувства. Такое исследование больше расскажет о том, как поэтесса умела выразить словами то, что было доступно ей чувствовать и переживать.
Для начала я применил атрибут token.children из библиотеки SpaCy, чтобы найти эпитеты, которыми Цветаева окружала слово "любовь". Я удалил служебные части речи, поискал разные типы зависимостей, отделив существительные, прилагательные, причастия и краткие формы прилагательных. Контекстное окно я задал в плюс-минус 4 слова, чтобы более или менее точно отфильтровать признаковые слова, близкие к "любви".
def analyze_epithets(text): doc = nlp(text) results = {'adj_full': [], 'adj_short': [], 'noun': [], 'participle': [], 'other': []} complexes = [] for token in doc: if token.lemma_.lower() == 'любовь': children = list(token.children) window_start = max(0, token.i - 4) window_end = min(len(doc), token.i + 5) window_tokens = [doc[i] for i in range(window_start, window_end) if i != token.i] potential_epithets = []
Что у меня получилось:
Всего найдено эпитетных комплексов: 281
Существительные 179 (63.7%)
Полные прилагательные 81 (28.8%)
Причастия 10 (3.6%)
Краткие формы прилагательных 8 (2.8%)
Всего я нашел этим кодом, что слово "любовь" с разными признаковыми словами, эту любовь характеризующих, встречается в поэзии Цветаевой 281 раз. При этом любопытным открытием стало, что чаще всего поэтесса характеризует "любовь" каким-либо существительным (63,7%). Это не типично для русской поэзии, где чаще всего для этих целей используют прилагательные. Цветаева предпочитает метафорические определения через существительные. Получается, что у Цветаевой в эпитете любовь чаще описывается как отождествление двух понятий, даже скорее не описывается, а приравнивается к другим сущностям.
Любовь — это плоть и кровь.
Цвет, собственной кровью полит.
Вы думаете, любовь —
Беседовать через столик?
М. Цветаева “Поэма конца” 1924 г.
Далее я посчитал, какие леммы чаще всего используются для описания слова "любовь" у Цветаевой. Здесь тоже меня ждало интересное открытие. Наиболее частотной леммой стало слово "третий". Мотив треугольника появляется 7 раз. Любовь у Цветаевой не бывает парной. Всегда есть какой-то свидетель или препятствие – время, судьба, поэзия.
Узнаю тебя, гад,
Как тебя ни зови:
В море — ткань, в горе — взгляд, —
Вечный третий в любви!М.Цветаева "Наяда" 1928 г
Далее я решил провести семантический анализ и проверить позицию слова "любовь" в предложениях. Существует теория, что значимые слова тяготеют к сильным позициям — началу или концу предложения. Я проверил эту теорию на корпусе текстов Цветаевой.
def analyze_position(doc, target_word='любовь'): position_data = [] for sent in doc.sents: love_tokens = [t for t in sent if t.lemma_.lower() == target_word] if love_tokens: sent_len = len(sent) for token in love_tokens: token_idx = token.i - sent.start rel_pos = token_idx / sent_len if sent_len > 0 else 0 position_data.append({ 'sentence_len': sent_len, 'relative_position': rel_pos }) return pd.DataFrame(position_data)
Что у меня получилось:
Предложений со словом "любовь": 191
Средняя относительная позиция: 0.473 (0.0=начало, 1.0=конец)
Распределение позиций:
Начало предложения (0.0–0.2): 50 (26.2%)
Середина (0.2–0.8): 108 (56.5%)
Конец предложения (0.8–1.0): 33 (17.3%)
Доля сильных позиций (начало + конец): 43.5%
Этот анализ показывает, что поэтесса не стремится помещать слово "любовь" на сильную позицию в начало или конец предложения. Любовь у нее не декларация, а часть сложного высказывания, интегрированного в ткань стиха.

Здесь же я посчитал и длину предложений. Я измерял именно в токенах, чтобы учитывать знаки препинания и спецсимволы, порой они несут лексическое значение.
all_sent_lengths = [len(sent) for sent in doc.sents] avg_len_all = sum(all_sent_lengths) / len(all_sent_lengths) sentences_with_love = [len(sent) for sent in doc.sents if any(t.lemma_.lower() == 'любовь' for t in sent)] avg_len_love = sum(sentences_with_love) / len(sentences_with_love)

Получилось, что средняя длина всех предложений в корпусе Цветаевой 15,3 токена. При этом средняя длина предложений со словом "любовь" 21 токен, они длиннее средних. Поэтесса не хочет говорить о любви кратко, любовь у нее не укладывается в афоризмы, требует пояснений и пространства.
Лежат они, написанные наспех,
Тяжёлые от горечи и нег.
Между любовью и любовью распят
Мой миг, мой час, мой день, мой год, мой век.М. Цветаева 1915 г.
Кажется, что жизнь Цветаевой была полна испытаний и боли, при этом по результатам этого анализа видно, что само понятие "любовь" буквально пронизывает текст, а не украшает его. Нужны, вероятно, исключительные духовные способности, чтобы так выражать сложные чувства, не впадать в пошлость и следовать своей идее до конца.
