Как доктор Живаго выносит приговор целой эпохе
Семантическая сеть: пересечение патологий в романе «Доктор Живаго»
Главный герой романа Бориса Пастернака «Доктор Живаго» — врач, и вряд ли это случайность. За таким выбором угадывается сразу несколько сюжетных замыслов. К тому же Юрий Живаго пишет стихи, а значит, его профессия может быть связана с традицией, в которой медицина и русская словесность идут рядом. Самые известные литераторы с медицинским прошлым — Чехов и Булгаков: оба получили профильное образование и какое-то время практиковали. Я решил разобрать текст романа средствами Python и выяснить две вещи: есть ли между Юрием Живаго и Чеховым подлинная связь и как Пастернак использует профессию героя в литературных целях.
«Как хорошо на свете! — подумал он. — Но почему от этого всегда так больно?».
Текст «Доктора Живаго» я скачал в формате .txt с сайта azbyka.ru и первым делом занялся поиском чеховского присутствия. Булгакова я отбросил сразу: события романа по времени не совпадают с литературной карьерой автора «Собачьего сердца». Для поиска связи с Чеховым я выбрал алгоритм Word2Vec. Причина в моём читательском впечатлении: Пастернак, насколько я помню, не называет Чехова прямо, поэтому искать цитаты или имя драматурга, скажем, регулярными выражениями, я не стал. Куда любопытнее было обнаружить скрытые семантические поля и уловить в тексте чеховскую атмосферу, а для этого Word2Vec подходит хорошо. Алгоритм строит векторные представления слов по их контекстам во всём романе и помещает слова в многомерное пространство, где расстояние (косинусная близость) отражает смысловое сходство.
Сначала я попытался найти в романе известные чеховские формулы и определить их семантических соседей.
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 тоже говорит о многом: в романе встречаются фразы, которые нельзя однозначно отнести ни к медицинским, ни к социальным диагнозам. У Пастернака патологии героев настолько переплетены, что определить, что здесь первично — социальные, психические или физиологические отклонения, практически невозможно.
Надеяться и действовать — наша обязанность в несчастии. Бездеятельное отчаяние — забвение и нарушение долга
У версии, что Пастернак получил премию незаслуженно, немало сторонников. Но даже оставив в стороне грустную судьбу этой награды, можно уверенно сказать: роман у писателя получился выдающимся.
Как распознать психопата по тексту: тёмные черты личности отражаются в нашей речи
Как осмыслить резонанс, если мы привыкли воспринимать мир как неподвижный?
Профессор, калькулятор и 475 миллионов долларов убытка Intel
ИИ-сотрудник за один день разобрал 1072 открытые задачи теории групп, и одна из них, похоже, поддалась
Почему автобус вечно опаздывает, или Доказанная теорема вашего невезения
Заводам не требуются 3,5 миллиона работников?
Звёздные карусели в Hen 2–10
Спросите Итана: если разумная жизнь за пределами Земли существует, удастся ли нам выйти на связь?