Впечатление от имен персонажей в «космических» произведениях фантаста Ивана Ефремова – одна из сильных эмоций от чтения его романов. Необычными именами героев Ефремов решал свои художественные задачи, показывая мир будущего свободным от догм, стереотипов, социального и расового расслоения. Но есть ли в новаторских номинациях какие-то скрытые языковые коды? Я решил провести эксперимент и проверить математических, можно ли секреты имен в книгах Ефремова раскрыть с помощью Python.
Я скачал в интернете три романа Ефремова – «Туманность Андромеды», «Час быка» и «Сердце Змеи», извлек и разобрал все личные имена, названия и топонимы.
Сразу решить задачу извлечения имен оказалось не так легко. Стандартные NER-модели (даже spaCy или Natasha) обучены на новостных корпусах и ломаются на именах Ефремова, путая их с началами предложений или нарицательными существительными. Я применил гибридное извлечение, сначала с помощью spaCy получая морфологический разбор, и далее с помощью регулярных выражений получая многословные конструкции с заглавной буквы. Далее я отсек союзы, предлоги и родовые существительные, которые случайно попали в выборку.
def extract_onyms(text, min_len=3): doc = nlp(text) onyms = set() for token in doc: if token.pos_ in {"PROPN", "NOUN"} and token.is_title and len(token.text) >= min_len: onyms.add(token.text) pattern = r'\b[А-ЯЁ][а-яё]{1,}(?:\s+(?:[А-ЯЁ][а-яё]{1,}|И|ИИ))[а-яё]{0,}\b' for m in re.finditer(pattern, text): cand = m.group().strip() if not cand.startswith(('И ', 'А ', 'Но ', 'О ', 'В ', 'К ', 'С ', 'У ', 'На ', 'По ', 'Для ', 'Как ', 'Так ', 'Что ', 'Если ')): onyms.add(cand) return list(onyms)
Из трех романов получилось извлечь более 2000 уникальных имен. Часть из них – технические термины, родовые понятия, артефакты и ошибки. Это неизбежно при первом проходе. Если бы я был академический ученый, следовало бы провести ручную валидацию и дообучить модель, но для моего эксперимента даже такая сырая выборка сгодится.
Интересно было провести сравнение имен жителей «темной» планеты Торманс, где царит тоталитарный строй и имен жителей Земли будущего. Я провел подсчет долей сонорных согласных и чередований гласных и согласных в именах персонажей. Так как выборка имен мала, а фонетический индекс благозвучия не подчиняется нормальному распределению, я решил применить непараметрические тесты Колмогорова — Смирнова и U-критерий Манна — Уитни.
Критерий Колмогорова-Смирнова должен показать различие форм двух эмпирических распределений (не только сдвиг, но и дисперсия и асимметрия) и ответить на вопрос различаются ли распределения фонетических характеристик имён двух планет в целом? U-критерий Манна — Уитни должен ответить, являются ли имена Торманса статистически значимо более дисфоничными, чем имена Земли?
if not df_earth.empty and not df_tormans.empty: scores_earth = df_earth['euphony_index'] scores_tormans = df_tormans['euphony_index'] u_stat, p_u = stats.mannwhitneyu(scores_tormans, scores_earth, alternative='less') ks_stat, p_ks = stats.ks_2samp(scores_tormans, scores_earth)
Что получилось:
Средний индекс благозвучия (Земля): 0.742
Средний индекс благозвучия (Торманс): 0.600
Mann-Whitney U: U=132.50, p=0.0004
Kolmogorov-Smirnov: D=0.681, p=0.0006
Имена персонажей «светлой» цивилизации Земли демонстрируют статистически более высокий уровень фонетического благозвучия. Разница в 0.142 пункта (по шкале 0–1) указывает на систематическое различие в фонетической организации имен двух планет.
По U-критерию Манна-Уитни видно, что нулевая гипотеза о равенстве распределений отвергается с высокой степенью достоверности. Значит, различие в индексах благозвучия между планетами статистически значимо и не является случайным.
Результаты эмпирически подтверждают гипотезу о том, что Ефремов использует звуковой состав имён как художественное средство характеристики цивилизаций.
Эксперимент фиксирует важное различие. Имена жителей «заблудшей» планеты содержат больше шумных согласных (ч, г, ш), чем имена землян. Это создаёт подсознательный контраст агрессии и благозвучия. Имена землян (Веда Конг, Чара Нанди, Эвда Наль) структурированы проще, содержат открытые гласные и плавные сонорные. Тормансианские имена (Чойо Чагас, Хонтээло Толло Фраэль) визуально и акустически «тяжелее», сложнее. Фонетический контраст у Ивана Ефремова здесь не только декоративный приём, а способ маркировать цивилизационную оппозицию.
Один из главных героев романов «Туманность Андромеды» и «Час быка» Дар Ветер напрямую объясняет читателю значение своего имени. В отличие от многих других героев, этническая принадлежность Дара Ветра определена.
– Ваше имя, если я не ошибаюсь, из корней русского языка?
– Совершенно верно. Даже не корни, а целые слова. Одно – подарок, второе – ветер, вихрь…
Я решил провести анализ, выявить скрытые группы персонажей, проверить, влияет ли число основ в имени на статус, и показать, как институты в романах связаны с локациями и героями. Я решил превратить линейное повествование в граф, где узлы это имена и названия, а ребра их совместное появление в одном контексте. Я применил «скользящее» окно в 60 токенов. Такое окно захватывает локальный смысловой контекст, но не «склеивает» несвязанные сюжетные линии.
deg = nx.degree_centrality(G)bet = nx.betweenness_centrality(G, weight='weight')for n in G.nodes(): G.nodes[n]['degree'] = deg[n] G.nodes[n]['betweenness'] = bet[n]top_hubs = sorted(deg.items(), key=lambda x: x[1], reverse=True)[:8]print("🔝 Топ-8 хабов сюжета (степень центральности):")for node, val in top_hubs: print(f" • {node}: {val:.3f} | тип: {G.nodes[node]['type']} | основ: {G.nodes[node]['bases']}")
Степень центральности показывает «сюжетную популярность» имени. Чем больше прямых связей, тем чаще он упоминается в окружении других персонажей, локаций или институтов. Посредническая центральность выявляет структурные хабы, то есть имена, которые связывают разные кластеры (например, Великое Кольцо соединяет землян, институты и космические миссии, а Торманс правительство, рядовых жителей и землян-гостей).
Здесь я применил алгоритм Лувена, метод обнаружения сообществ в больших сетях, основанный на жадной оптимизации модулярности. Он позволяет выявлять группы узлов с плотными внутренними связями и редкими связями с узлами из других групп. Алгоритм устойчив к шуму и не требует задания числа кластеров заранее.
Кластеризация сообществ автоматически выявляет скрытые группировки, например экипажи звездолётов, научные институты Земли, мифологические объекты. Это позволяет перейти от простого чтения к объективной картографии сюжета.
partition = community_louvain.best_partition(G, weight='weight')for n, comm in partition.items(): G.nodes[n]['community'] = comm
Что получилось.
Алгоритм честно ранжирует узлы по степени связанности. Вместо ожидаемых имён главных героев в топ попадают родовые существительные (Врач, Биолог), что математически подтверждает тезис о подчинении личности функции в утопии Ефремова. В антиутопических главах хабом становится Торманс и титулы, что отражает иерархию на той планете.
Кластеризация Лувена автоматически разделила граф на сообщества, совпадающие с планетарными и сюжетными линиями. Оппозиция Земля — Торманс проявляется не только в именах, но и в топологии связей. Земляне связаны через корабли, экспедиции и диалоги, а жители «темной» планеты в созвездии Рыси через приказы, контроль и пространственные ограничения.
В случае с Ефремовым код подтверждает интуитивное предположение, что имена у писателя работают как инженерная система. Люди, институты и локации связаны не случайно, а подчинены авторской модели цивилизации.
Такая цивилизация Ефремова нравится не всем его поклонникам. Одни приветствуют объявленную в романах свободу отношений полов, другим претит слишком прогрессивная позиция Ефремова в области воспитания детей. Однозначно можно говорить о другом — предсказания писателя об устройстве мира будущего в одном из самых некрасивых его сценариев похожи на правду. Может быть сила предвидения фантаста позволит сбыться и его прекрасным предсказаниям.
ссылка на оригинал статьи https://habr.com/ru/articles/1031408/