Где заканчивается слово и начинается образ? Использую Python для поиска стилистических особенностей, формирующих картину природы в творчестве К.Г. Паустовского.

Писателя Паустовского называют «мастером пейзажной прозы». Он действительно умел красиво и при этом сдержано описать богатство природы. Вот что сам Паустовский написал в своей статье «Наедине с осенью» про использование писателями эпитетов: «Обычно начинающие писатели грешат обилием образов и эпитетов. Это придает их прозе мертвую пышность, сусальную или трескучую красивость. Бывает, что к одному существительному прилагается несколько эпитетов. Эпитет должен запоминаться. А для этого он должен быть единственным. Из трех эпитетов, приложенных к существительному, один всегда будет наиболее точным, а остальные два безусловно будут ему уступать. Поэтому ясно, что этот единственный эпитет надо сохранить, а остальные безжалостно вычеркнуть. Образ, равно как и эпитет, должен быть точен, свеж и скуп».

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

Я решил установить, как часто Паустовский использует прилагательные, какие самые частотные эпитеты в его прозе и какие необычные, метафоричные сочетания он создаёт. Для исследования буду использовать корпус текстов писателя из 4 тома его собрания сочинений, где встречаются рассказы о природе.

Буду использовать pymystem3, морфологический анализатор и лемматизатор, razdel для токенизации, spaСy для определения зависимости между словами. Pandas потребуется для работы с данными. Мне потребуется так же ru_core_news_sm, предобученная модель spaCy для русского языка.

Текст часто требует очистки перед анализом, извлечения лемм и построения корпуса.

import re
from razdel import sentenize, tokenize
from pymystem3 import Mystem
m = Mystem()
clean_text = re.sub(r'-\s\n\s', '', full_text)  
clean_text = re.sub(r'[^а-яА-ЯёЁa-zA-Z\s\.]', ' ', clean_text)  
clean_text = re.sub(r'\s+', ' ', clean_text).strip()  

Так же для полноценного анализа мне потребуется разбить текст на леммы, то есть снизить слова к их корневым формам. Для лемматизаци удобно использовать закрытую разработку яндеса pymystem3. Эта библиотека работает быстро, но требует запускать консольное приложение.

for sent in doc.sents:
    sent_text = sent.text.strip()
    if len(sent_text) < 10:
        continue
    try:
        analysis = m.analyze(sent_text)
    except Exception as e:
        print(f"Ошибка Mystem: {e}")
        continue
    word_info = {}
    for word_data in analysis:
        if 'text' in word_data and 'analysis' in word_data and len(word_data['analysis']) > 0:
            txt = word_data['text'].lower()
            first = word_data['analysis'][0]
            lemma = first.get('lex', '').lower()
            pos = first.get('gr', '').split('=')[0].split(',')[0]
            word_info[txt] = {'lemma': lemma, 'pos': pos}

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

for token in sent:
        word_lower = token.text.lower()
        if word_lower in word_info:
            pos = word_info[word_lower]['pos']
            if pos == 'A':  # Прилагательное
                lemma = word_info[word_lower]['lemma']
                adjectives.append(lemma)
                for child in token.children:
                    if child.pos_ == 'NOUN' and child.dep_ in ('nsubj', 'obj', 'nmod', 'appos'):
                        adj_noun_pairs.append((lemma, child.lemma_.lower()))

Для поиска образности создам словарь ключевых слов.

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

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

Проведу поиск эпитетов и их зависимых существительных.

if child.lemma_.lower() in nature_words or lemma in ['тяжёлый', 'камфарный', 'медный', 'чёрный']:
                            metaphors.append(f"{token.text} {child.text}")
        all_tokens.append(token.text)

Этот код находит все прилагательные. Затем в коде срабатывет token.children — итератор, который возвращает все непосредственные дочерние элементы токена в синтаксическом дереве. Через синтаксические зависимости он находит, какое существительное описывает это прилагательное. Затем сохраняю эту пару и если сочетание образное — добавляет в список метафор.

И затем я захотел посчитать «плотность эпитетов» по отношению к общему числу слов в тексте.

total_words = len(all_tokens)
adj_count = len(adjectives)
adj_density = round(adj_count / total_words * 100, 2)

Вот что получилось в результате:

Всего слов: 261 737 
Прилагательных (эпитетов): 18 363 
Плотность эпитетов: 7.02%

И посчитаю самые частотные прилагательные, самые частые образные сочетания прилагательное + существительное и возможные метафоры.

adj_counter = Counter(adjectives)
print("ТОП-10 ЭПИТЕТОВ:")
for adj, cnt in adj_counter.most_common(10):
    print(f"{adj} — {cnt} раз")
print("\n НАИБОЛЕЕ ЧАСТЫЕ ОБРАЗНЫЕ СОЧЕТАНИЯ (эпитеты):")
pair_counter = Counter(adj_noun_pairs)
for (adj, noun), count in pair_counter.most_common(10):
    print(f"{adj} {noun} — {count} раз")
print("\n ВОЗМОЖНЫЕ МЕТАФОРЫ И ОБРАЗНЫЕ ВЫРАЖЕНИЯ:")
unique_metaphors = set(metaphors)
for expr in sorted(unique_metaphors, key=lambda x: metaphors.count(x), reverse=True)[:15]:
    print(f"→ «{expr}»")

Вот что получилось в результате:

ТОП-10 ЭПИТЕТОВ:
черный — 269 раз
маленький — 210 раз
старый — 187 раз
белый — 182 раз
молодой — 153 раз
красный — 140 раз
большой — 134 раз
высокий — 133 раз
серый — 122 раз
хороший — 116 раз

НАИБОЛЕЕ ЧАСТЫЕ ОБРАЗНЫЕ СОЧЕТАНИЯ (эпитеты):
должный человек — 6 раз
слышный крик — 5 раз
слышный гул — 4 раз
хороший мир — 3 раз
слышный шум — 2 раз
должный жизнь — 2 раз
столетний липа — 2 раз
солнечный день — 2 раз
мокрый дождь — 2 раз
свежий голова — 2 раз

ВОЗМОЖНЫЕ МЕТАФОРЫ И ОБРАЗНЫЕ ВЫРАЖЕНИЯ:
→ «низких морю»
→ «пьющих воду»
→ «Вешние воды»
→ «шипучей воды»
→ «мокрой дождя»
→ «оранжевое небо»
→ «Милый сердце»
→ «хорошего свете»
→ «гнила вода»
→ «Велик земли»
→ «должна вода»
→ «обильнее дожди»
→ «загадочнее земля»
→ «дремучие леса»
→ «Ярче солнце»

Что можно сказать по результатам этого исследования. У Паустовского плотность эпитетов в тексте 7.01%. Согласно известным исследованиям, да просто по читательскому впечатлению, в текстах Паустовского часто встречается богатая цветовая и описательная лексика. Мое цифровое исследование подтверждает это. Можно сказать, что Паустовский действительно пишет поэтической прозой, наполненной описаниями. В том-10 эпитетов преобладают цвета — чёрный, белый, красный, серый и размеры маленький, большой, высокий. Это говорит о визуальном восприятии писателем природы и человека. Среди образных сочетаний некоторые звучат странно («должные человек»), но этом может быть артефакт лемматизации или ошибка анализа. Но очевидно, что есть и красивые сочетания («мокрый дождь»).

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

На примере этого исследования видно, как Python помогает обнаружить и квантифицировать авторские особенности, больше узнать об эмоциональной насыщенности и поэтичности языка писателя. Подробные разборы других текстов можно посмотреть на видео https://dzen.ru/codslov

Комментарии (2)


  1. MadMarakuya
    20.11.2025 21:24

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

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


    1. Eco_coder Автор
      20.11.2025 21:24

      спасибо за идею нового исследования