Как Python подтвердил молитвенную суть пения иволги

В этой роще березовой,

Вдалеке от страданий и бед,

Где колеблется розовый

Немигающий утренний свет,

Где прозрачной лавиною

Льются листья с высоких ветвей, —

Спой мне, иволга, песню пустынную,

Песню жизни моей.

Стихотворение «В этой роще березовой» было создано Николаем Заболоцким в 1946 году. Широкую известность это произведение получило в 1968-м, когда на экраны вышел фильм Станислава Ростоцкого «Доживем до понедельника». В нем Вячеслав Тихонов проникновенно исполнил одноименную песню на музыку композитора Кирилла Молчанова.

Автор работал над этими строками в Переделкино, в окружении березовых аллей, остро переживая недавние ужасы войны и трагедию атомных бомбардировок, ознаменовавших конец мирового конфликта.

Читая это стихотворение, я почувствовал в его ритмике и интонациях нечто общее с молитвой или литургическим песнопением. Мне стало любопытно провести цифровой анализ текста с помощью Python, чтобы попытаться выявить его глубинный богословский подтекст.

В данном исследовании Python выступает инструментом, позволяющим обнаружить закономерности, которые ускользают от взгляда при обычном чтении. Моя цель — проверить гипотезу о том, что стихотворение выстроено как «литургический текст». Для этого я решил измерить уровень «духовной концентрации», вычислив частоту употребления слов из церковного лексикона, а также проанализировать эмоциональную тональность с помощью RuSentiLex и выделить ключевые образы.

В работе использовалась библиотека re для очистки текста от пунктуации, pymorphy3 для лемматизации и matplotlib для наглядной визуализации результатов.

Для оценки эмоционального окраса был выбран словарь RuSentiLex. Я загрузил его в формате txt, обработав структуру напрямую, чтобы корректно интерпретировать данные без использования pandas.

def load_rusentilex(filepath):
    sentiment_dict = {}
    with open(filepath, 'r', encoding='utf-8') as f:
        for line in f:
            line = line.strip()
            if not line or line.startswith(('!', '#')):
                continue

Такой подход позволил игнорировать служебные строки и комментарии, а интеграция с pymorphy3 обеспечила точное сопоставление лемм входного текста со словарем.

RuSentiLex включает в себя лексемы, имеющие оценочный компонент. Это означает, что слово либо прямо выражает отношение к объекту, либо передает эмоцию, даже если авторская оценка не выражена эксплицитно.

Я сознательно отказался от использования нейросетей, так как они зачастую не способны уловить сакральный контекст. Например, понятие «война» для алгоритма — сугубо негативное, тогда как в поэтике Заболоцкого это может быть жертвенным подвигом на пути к преображению.

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

Так стихотворение напечатано в книге
Так стихотворение напечатано в книге

В результате программного анализа выяснилось, что стихотворение состоит из 48 строк. Оптимальное деление — 6 строф по 8 строк (октав), что полностью соответствует классическим канонам стихосложения.

all_lines = text.split('\n')
print(f"Всего строк в файле: {len(all_lines)}\n")
def get_ending_punctuation(line):
    """Знак препинания в конце строки"""
    line = line.rstrip()
    if not line:
        return None
    match = re.search(r'[.?!,:;—–-]$', line)
    if match:
        return match.group(0)
    
    if line.endswith('...'):
        return '...'
    
    return None
lines_data = []
for i, line in enumerate(all_lines):
    stripped = line.strip()
    if not stripped:  # пропускаю пустые строки
        continue
    
    punct = get_ending_punctuation(stripped)
    lines_data.append({
        'index': i + 1,  # номер строки в файле 
        'text': stripped,
        'punctuation': punct,
        'is_sentence_end': punct in ['.', '!', '?', '...']
    })

Примечательно, что структура из шести частей отсылает к Шестопсалмию — важнейшему элементу утреннего богослужения, состоящему из шести псалмов. Таким образом, даже на формальном уровне цифровой анализ подтверждает сходство произведения с церковным текстом.

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

spiritual_lexicon = {
    'божественный', 'заутреня', 'душа', 'молитва', 'храм', 'ангел', 'небо',
    'воскресение', 'победа', 'роса', 'свет', 'утро', 'целомудренный', 'пустыня',
    'отшельник', 'странник', 'грех', 'благодать', 'жертва', 'смерть', 'вечность',
    'лавина', 'лист', 'ветвь', 'цветок', 'капля', 'солнце', 'река', 'камыш',
    'обрыв', 'руины', 'сердце', 'голос', 'песня', 'жизнь', 'страдание', 'беда',
    'торжественный', 'век', 'бой', 'земля', 'дом', 'крыло', 'атом', 'ум'
}

positive_words = {
    'свет', 'победа', 'торжественный', 'свежесть', 'целомудренный', 'неприметный',
    'прозрачный', 'розовый', 'лавина', 'песня', 'друг', 'утро', 'солнце', 'жизнь'
}
negative_words = {
    'страдание', 'беда', 'смерть', 'война', 'атом', 'мельница', 'взрыв', 'пулемёт',
    'ворон', 'убитый', 'опалённый', 'дрожа', 'безумный', 'смертельный', 'руины',
    'чернеет', 'облако', 'бой', 'солдат'
}

spiritual_ratios = []
sentiment_scores = []
found_images_per_stanza = []

for stanza in stanzas_texts:
    tokens = set(tokenize(stanza))

    spiritual_count = len(tokens & spiritual_lexicon)
    total = len(tokenize(stanza))
    ratio = spiritual_count / total if total > 0 else 0
    spiritual_ratios.append(ratio)

    found = tokens & key_images
    found_images_per_stanza.append(found)

    
    pos = len(tokens & positive_words)
    neg = len(tokens & negative_words)
    score = (pos - neg) / (pos + neg) if (pos + neg) > 0 else 0.0
    sentiment_scores.append(score)

Затем последовала оценка эмоционального настроя по RuSentiLex.

def rusentilex_score(text, lexicon):
    lemmas = lemmatize_text(text)
    total = 0
    score = 0
    for lem in lemmas:
        if lem in lexicon:
            score += lexicon[lem]
            total += 1
    return score / total if total > 0 else 0.0

И идентификация центральных образов.

key_images = {'иволга', 'роса', 'война', 'атомы', 'победа'} 

Выбранные слова — это вехи сюжета: Иволга предстает ангелом-вестником, Атомы символизируют хаос техногенного мира, а Победа становится эсхатологическим финалом.

Результаты программного анализа:

Строфа 1: духовная лексика = 3.23%, тональность = -0.50, образы = [‘иволга’]

Строфа 2: духовная лексика = 3.85%, тональность = +0.00, образы = []

Строфа 3: духовная лексика = 0.00%, тональность = -0.33, образы = [‘атомы’, ‘иволга’]

Строфа 4: духовная лексика = 6.90%, тональность = -1.00, образы = []

Строфа 5: духовная лексика = 9.09%, тональность = -1.00, образы = []

Строфа 6: духовная лексика = 3.45%, тональность = +0.60, образы = []

В первых двух строфах наблюдается низкая, но стабильно растущая доля сакральных смыслов. Отрицательная тональность в начале вызвана словами «беда» и «страдание», однако в контексте стихотворения это лишь обозначение мира, от которого герой устремляется в священное пространство.

В третьей строфе в поэтическую ткань врывается история («Содрогаются атомы…»). Духовная лексика исчезает, мир становится профанным, во власти технократического апокалипсиса. Тональность падает под давлением образов разрушения.

Четвертая и пятая строфы достигают пика духовной насыщенности при минимальной тональности. Это описание руин и смерти («смертельное облако»), олицетворяющих высшую точку испытания.

Шестая строфа — это акт воскресения («Встанет утро победы торжественной…»). Концентрация духовных слов здесь снижается, так как преображенный мир уже не нуждается в сложных определениях. Тональность резко становится положительной благодаря понятиям «победа», «торжественный» и «божественная капля».

Расхождение между тональностью и духовной насыщенностью объясняется ограниченностью RuSentiLex, который не учитывает эсхатологический контекст. Для алгоритма «смерть» и «бой» — это всегда негатив, тогда как для Заболоцкого это этапы на пути к преображению. В этом проявляется парадокс теодицеи: путь к добру лежит через преодоление тьмы.

График «духовного напряжения» стихотворения:

Профиль духовного напряжения стиховтоерния
Профиль духовного напряжения стиховтоерния

Композиция произведения зеркально отражает структуру утрени: от тихого моления через историческую тьму и жертвенную скорбь к финальному торжеству духа. Таким образом, Заболоцкий создал глубоко богословский текст в поэтическом обличье, что и подтвердил наш цифровой анализ.

 

Источник

Читайте также