Мне нравится еще, что Вы при мне
Спокойно обнимаете другую,
Не прочите мне в адовом огне
Гореть за то, что я не Вас целую.
В этом стихотворении, ставшем очень известным благодаря одному новогоднему кинофильму, Марина Цветаева трогательно признается в любви к мужу своей сестры. Из воспоминаний самой Анастасии Цветаевой, сестры поэтессы, известно, что ее муж Маврикий Минц и Марина Цветаева действительно дружили и испытывали нежные чувства друг к другу. Чтобы так умело выразить нежность и любовь через отрицание, нужны, вероятно, немалые душевные качества, доступные не всякому. Мне стало интересно исследовать творчество Цветаевой с помощью 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 г.
Кажется, что жизнь Цветаевой была полна испытаний и боли, при этом по результатам этого анализа видно, что само понятие "любовь" буквально пронизывает текст, а не украшает его. Нужны, вероятно, исключительные духовные способности, чтобы так выражать сложные чувства, не впадать в пошлость и следовать своей идее до конца.
Автор: Eco_coder
