- PVSM.RU - https://www.pvsm.ru -

Как Живаго ставит диагноз всей эпохе

В романе Бориса Пастернака «Доктор Живаго» главный герой выведен врачом. Очевидно, что писатель выбрал такую профессию своему персонажу не просто так. В этом прослеживается несколько сюжетных задумок, и, поскольку Юрий Живаго пишет стихи, в этом должны быть и какая-то связь с медицинским следом в русской словесности. Самые известные писатели в русской литературе, связанные с медициной это Чехов и Булгаков. Оба они получили нужное образование и некоторое время врачевали. Я решил исследовать текст романа с помощью доступных инструментов Python и установить, действительно ли есть связь Юрия Живаго с Чеховым и как в романе Пастернак использует профессию своего героя с литературной точки зрения.

«Как хорошо на свете! — подумал он. — Но почему от этого всегда так больно?». 

Я скачал в интернете текст романа «Доктор Живаго» в виде фала .txt с сайта azbyka.ru [1] и начал с того, что стал искать в романе какое-то чеховское присутствие. От мысли искать подобное, связанное с Булгаковым я сразу отказался – по эпохе события в романе не совпадают с литературной карьерой автора «Собачьего сердца». Для поиска связи с Чеховым я решил применить алгоритм Word2Veс. Это объяснятся моим личным впечатлением от чтения романа - я не помню, чтобы Пастернак впрямую упоминал Чехова и не стал искать явные цитаты или упоминания имени драматурга с помощью, например, регулярных выражений. Мне показалось интереснее выявить именно скрытые семантические поля и найти в тексте романа чеховскую атмосферу. Word2Veс подходит для такого поиска. Алгоритм строит векторные представления слов на основе их контекста во всем романе. Word2Veс помещает слова в многомерное пространство, где расстояние, то есть косинусная близость отражает семантическую схожесть.

Я начал с того, что попытался найти известные чеховские формулы в романе и установить их семантических соседей.

markers = {
    "чеховск*": r"чеховскw*",
    "футляр": r"футлярw*",
    "три сестры": r"триs+сестрw*",
    "мороз": r"морозw*",
    "диагност": r"диагностw*",
    "мальчики": r"мальчикw*",
    "человек в футляре": r"человекs+вs+футлярw*"
}
for marker_name, pattern in markers.items():
    regex = re.compile(rf'.{{0,50}}{pattern}.{{0,50}}', re.IGNORECASE | re.DOTALL)
    matches = regex.findall(text_zhivago)

    print(f"Маркер: '{marker_name}' | Найдено: {len(matches)}")
    for i, ctx in enumerate(matches[:3]):
        clean_ctx = ctx.replace('n', ' ').strip()
        print(f"  {i+1}. ...{clean_ctx}...")

Что у меня получилось:

Лемма: 'чехов' (встречается 2 раз)

  неказистый: 0.3775

  ракушка: 0.3701

  замотанный: 0.3432

  преждевременный: 0.3429

  вериться: 0.3401

  правило: 0.3368

  позорный: 0.3367

 Лемма: 'чеховский' (встречается 1 раз)

  витать: 0.3547

  забывчивость: 0.3321

  разгадка: 0.3318

  разведенному: 0.3301

  расшатали: 0.3206

  соблазнительный: 0.3205

  докалывать: 0.3202

 Лемма: 'футляр' (встречается 2 раз)

  выпросить: 0.3622

  морщившееся: 0.3519

  шарообразный: 0.3470

  тварь: 0.3426

  обветренных: 0.3418

  пола: 0.3386

  тифозный: 0.3370

Лемма: 'диагност' (встречается 3 раз)

  марксизм: 0.4142

  унизиться: 0.3843

  уметь: 0.3766

  свершиться: 0.3670

  незадачливый: 0.3574

  таинственно: 0.3495

  разнимать: 0.3466

Для леммы «чеховский» модель нашла интересное семантическое соседство «расшатали». По этой находке видено, что у Пастернака в романе не просто исчезает чеховский уют, но он активно расшатывается историческими катаклизмами.

Интересное семантические соседство выявлено для леммы «диагност»: «марксизм», «таинственно», «свершиться». Соседство слов «диагност» и «марксизм» не случайно. Оно выводит на поверхность такую скрытую полемику романа, где Живаго как врач и диагност противопоставлен идеологу-«диагносту» Стрельникову-Антипову, который поставил идею выше жизни.

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

«Всякая стадность — прибежище неодарённости, всё равно, верность ли это Соловьёву, или Канту, или Марксу. Истину ищут только одиночки и порывают со всеми, кто любит её недостаточно». 

Дальше я решил углубиться в профессию Живаго и посмотреть, можно ли установить лексическую связь между специальностью героя и социальным контекстом сюжета. Ставит ли Юрий Андреевич какой-то диагноз всей эпохе?

Я решил построить визуальную семантическую сеть и проверить структурное единство медицинского и социального дискурсов в романе. Для графика я использовал медицинские и социальные термины.

MEDICAL_LEMMAS = {
    'болезнь', 'смерть', 'диагноз', 'формалин', 'карболка', 'стетоскоп',
    'анатомия', 'тело', 'кровь', 'лихорадка', 'врач', 'лечить', 'боль', 'труп'
}
SOCIAL_LEMMAS = {
    'революция', 'хаос', 'разрушение', 'страх', 'гибель', 'бунт', 'идеология',
    'футляр', 'отчаяние', 'судьба', 'общество', 'смерть', 'боль', 'кризис'
G = nx.Graph()
window_size = 1 
for lemmas in sentence_lemmas:
    relevant_words = [w for w in lemmas if w in MEDICAL_LEMMAS or w in SOCIAL_LEMMAS]
    for i in range(len(relevant_words)):
        for j in range(i + 1, len(relevant_words)):
            w1, w2 = relevant_words[i], relevant_words[j]
            if G.has_edge(w1, w2):
                G[w1][w2]['weight'] += 1
            else:
                G.add_edge(w1, w2, weight=1)
plt.figure(figsize=(12, 10))
pos = nx.spring_layout(G, k=0.5, iterations=50)
edges_to_draw = [(u, v) for (u, v, d) in G.edges(data=True) if d['weight'] > 1]
weights = [G[u][v]['weight'] for u, v in edges_to_draw]
Семантическая сеть: пересечение патологий в романе "Доктор Живаго"

Семантическая сеть: пересечение патологий в романе "Доктор Живаго"

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

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

model = SentenceTransformer('cointegrated/rubert-tiny2') 
med_sample_sents = [processed_sentences[i] for i in medical_sentences_indices[:20]]
social_sentences_indices = [i for i, lemmas in enumerate(sentence_lemmas) if lemmas & SOCIAL_LEMMAS]
social_sample_sents = [processed_sentences[i] for i in social_sentences_indices[:20]]
emb_med = model.encode(med_sample_sents)
emb_soc = model.encode(social_sample_sents)
similarity_matrix = cosine_similarity(emb_med, emb_soc)

Что у меня получилось:

Средняя косинусная сходство между 'медицинскими' и 'социальными' предложениями:

Средняя схожесть: 0.5711 (шкала от 0 до 1)

Максимальная схожесть: 1.0000

Семантическая близость контекстов

Семантическая близость контекстов

Средняя косинусная схожесть 0.5711 — это высокий показатель для семантического анализа художественного текста. Он означает, что предложения о медицинской патологии и предложения о социальной патологии в среднем имеют 57% семантического перекрытия.

Максимальная схожесть 1.0000 это очень много. Такая величина показывает, что в романе есть предложения, которые невозможно однозначно классифицировать как медицинские или социальные диагнозы. У Пастернака патология героев так взаимосвязана, что установить первичность социальных, психических или физиологических отклонений почти невозможно.

Надеяться и действовать — наша обязанность в несчастии. Бездеятельное отчаяние — забвение и нарушение долга

У версии о том, что Пастернак получил премию за роман не заслуженно, много сторонников. Но и без размышлений о печальной судьбе награды можно сказать, что роман у писателя получился выдающийся.

Автор: Eco_coder

Источник [2]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/python/460328

Ссылки в тексте:

[1] azbyka.ru: http://azbyka.ru

[2] Источник: https://habr.com/ru/articles/1095940/?utm_campaign=1095940&utm_source=habrahabr&utm_medium=rss