|
--- |
|
license: mit |
|
language: |
|
- ru |
|
tags: |
|
- nlp |
|
- word2vec |
|
- dh |
|
--- |
|
|
|
# Overview |
|
|
|
The model is built on texts of 19th century Russian prose (realism) in order to explore characters. Inspired by [work](https://ceur-ws.org/Vol-1751/AICS_2016_paper_48.pdf) on English literature. |
|
|
|
# Preparing data |
|
|
|
The texts for the training corpus are taken from two datasets published in the [Open Data Repository on Russian Literature and Folklore](https://dataverse.pushdom.ru/): |
|
|
|
Собчук, Олег; Лекаревич, Евгения, 2020, "[Корпус нарративной прозы XIX в.](https://dataverse.pushdom.ru/dataset.xhtml?persistentId=doi:10.31860/openlit-2020.10-C004)", https://doi.org/10.31860/openlit-2020.10-C004, Репозиторий открытых данных по русской литературе и фольклору, V2, UNF:6:b+jGaj4yVntc2WtSvZqumw== [fileUNF] |
|
|
|
Казакова, Елена, 2023, "[Забытые романы русских писателей из фондов Пушкинского Дома (1857–1917)](https://dataverse.pushdom.ru/dataset.xhtml?persistentId=doi:10.31860/openlit-2023.12-C007)", https://doi.org/10.31860/openlit-2023.12-C007, Репозиторий открытых данных по русской литературе и фольклору, V2, UNF:6:DCGrSrMDXXtoRfHBDWfS4A== [fileUNF] |
|
|
|
Only texts published after 1845 (the era of realism) remain in the corpus. Texts presented in old orthography have been converted to modern orthography with the help of a [package](https://pypi.org/project/prereform2modern/). |
|
|
|
The texts are marked up using the Russian version of the [booknlp](https://github.com/booknlp/booknlp) library, which highlighted the characters of the fictional works. |
|
|
|
Each character in the text was replaced by its id of kind: |
|
|
|
`Character-textid-{textid}-charid-{entity_id}` |
|
|
|
`textid` is an id of text made of hashsum of filename. Thus, textid is repeated as many times as there are characters in the corresponding text. The string is entirely unique. |
|
|
|
The correspondences between character and id are fixed in a special file `allcharsmapped_corr.csv` included in the repository. |
|
|
|
The texts were lemmatized by booknlp [stop words](https://github.com/nevmenandr/DigitalHumanitiesMinorFeatures/blob/master/stop_ru.txt) and punctuation were excluded from them. |
|
|
|
```python |
|
import os |
|
from string import punctuation |
|
|
|
# stoplist load |
|
|
|
stoplist = {} |
|
with open (stopwords) as f: |
|
for line in f: |
|
stoplist[line.strip()] = 1 # Perl habit. Better use set() in Python |
|
|
|
# punctuation collect |
|
|
|
punct = punctuation + '«»—–…“”\t' |
|
|
|
fw = open('booknlp/train_lemmas.txt', 'w') |
|
for fl in os.listdir(lemmas_txt): |
|
if not fl.endswith('.txt'): |
|
continue |
|
with open(os.path.join(lemmas_txt, fl)) as f: |
|
for line in f: |
|
words = [] |
|
for word in line.split(): |
|
word = word.strip(punct) |
|
if word in stoplist: |
|
continue |
|
if word: |
|
words.append(word) |
|
fw.write(' '.join(words) + '\n') |
|
fw.close() |
|
|
|
``` |
|
|
|
`train_lemmas.txt` included in the repository. |
|
|
|
# Usage |
|
|
|
```python |
|
import csv |
|
|
|
# load names of the characters dict |
|
|
|
cd = {} |
|
with open('allcharsmapped_corr.csv', 'r') as csvfile: |
|
reader = csv.reader(csvfile, delimiter=',') |
|
for row in reader: |
|
cd[row[0].strip(' "')] = {'name': row[1], 'filename': row[2], 'freq': row[3]} |
|
``` |
|
|
|
## Searching for the exact id |
|
|
|
The name of the character from *Home of the Gentry* by Ivan Turgenev |
|
|
|
```python |
|
for nm in cd: |
|
if 'Лаврецкий' in cd[nm]['name']: |
|
print(nm, cd[nm]['name']) |
|
``` |
|
|
|
`Character-textid-1233692858423997945-charid-74 Лаврецкий | Лаврецкого | Лаврецкому | Лаврецким | Лаврецких | Молодой Лаврецкий | молодой Лаврецкий | бедный Лаврецкий | XXXI Лаврецкий | XXXIII Однажды Лаврецкий` |
|
|
|
```python |
|
from gensim.models import Word2Vec |
|
model = Word2Vec.load("w2vforms.model") |
|
print(len(model.wv)) # vocabulary size 547986 |
|
|
|
words = ['Character-textid-1233692858423997945-charid-74'] # what to look up in model |
|
|
|
for word in words: |
|
# search for word in model |
|
if word in modell.wv: |
|
print(cd[word]['name']) |
|
# 10 quasi-sinonyms: |
|
for i in modell.wv.most_similar(positive=[word], topn=10): |
|
# word, cosin distance |
|
try: |
|
print(cd[i[0]]['name'], cd[i[0]]['filename'], i[1]) |
|
except: |
|
print(i[0], i[1]) |
|
|
|
print('\n') |
|
else: |
|
# :( |
|
print(word + ' is not present in the model') |
|
|
|
``` |
|
|
|
``` |
|
Лаврецкий | Лаврецкого | Лаврецкому | Лаврецким | Лаврецких | Молодой Лаврецкий | молодой Лаврецкий | бедный Лаврецкий | XXXI Лаврецкий | XXXIII Однажды Лаврецкий |
|
Лиза | Лизы | Лизе | Лизу | Лизой | мою дочь Лизу | XXXIV Лиза | Лизе , которой только что пошел пятый год | Лиза , которая очень любила цветы | XLII Лиза turgenev_i_dvoryanskoe_gnezdo_1859 0.7776555418968201 |
|
Наталья | Наталья Алексеевна | Наталье | Натальи | Натальей | Наталье Алексеевне | Наталью | Наталью Алексеевну | Натальей Алексеевной | дочь Наталья turgenev_i_rudin_1856 0.7085265517234802 |
|
Юлия Николаевна | Юлии Николаевне | Сухаревой | Юлии Николаевны | Юлией Николаевной | старухи Сухаревой | Юлии Николаевны Сухаревой | его Юлии Николаевне Сухаревой | Юлии Николаевне Сухаревой | легкомысленной и пустой старухи Сухаревой sheller-mikhajlov_a_bespechalnoe_zhite_1878 0.6840318441390991 |
|
Зинаида | Зинаиды | Зинаиду | Зинаидой | Зинаиде | Зина | Зинаида Александровна | мою прежнюю Зинаиду turgenev.pervaya_lyubov 0.68117755651474 |
|
Вася | Бояринов | Бояринова | Васю | Васи | Васе | Бояринову | Бояриновым | Васи Бояринова | Спросил Вася iogel_m_mezhdu_vechnostyu_i_minutoj_1879 0.6781316995620728 |
|
Варвара Павловна | Варвару Павловну | Изумленная Варвара Павловна | Варю | Варя turgenev_i_dvoryanskoe_gnezdo_1859 0.6774640679359436 |
|
Ластов | Лев Ильич | Ластова | г-н Ластов | Ластову | г. Ластов | Лев Ильич Ластов | Ластовым | г-на Ластова | Льву Ильичу avenarius.povetriye 0.6750389337539673 |
|
Иван Иваныч | Чуфрин | Иван Иваныч Чуфрин | Чуфрина | Чуфриных | господин Чуфрин | Иван Иваныч , уязвлённый этим предложением | Ваня | VII Иван Иваныч | VIII Иван Иваныч yasinskiy.bunt_ivana_ivanycha 0.6723058819770813 |
|
Character-textid-3765969217135438403-charid-397 0.6678720116615295 |
|
Ольга | Ольги | Ольге | Ольга Сергеевна | Ольгу | Ольгу Сергеевну | Бедная Ольга | ненаглядную Ольгу | милая Ольга | кроткая Ольга goncharov_i_oblomov_1859 0.6646437644958496 |
|
``` |
|
|
|
# Examples |
|
|
|
## Quasi-sinonyms of the main characters of Russian literature of 19th century: |
|
|
|
```python |
|
from gensim.models import Word2Vec |
|
model = Word2Vec.load("w2vforms.model") |
|
|
|
words = ['Character-textid--3155236403543629788-charid-1138', 'Character-textid-4423538860970409858-charid-48', 'Character-textid-1233692858423997945-charid-74', 'Character-textid--2263910210560212786-charid-33', 'Character-textid--3155236403543629788-charid-1360'] # what to look up in model |
|
|
|
for word in words: |
|
# search for word in model |
|
if word in modell.wv: |
|
print(cd[word]['name']) |
|
# 10 quasi-sinonyms: |
|
for i in modell.wv.most_similar(positive=[word], topn=10): |
|
# word, cosin distance |
|
try: |
|
print(cd[i[0]]['name'], cd[i[0]]['filename'], i[1]) |
|
except: |
|
print(i[0], i[1]) |
|
|
|
print('\n') |
|
else: |
|
# :( |
|
print(word + ' is not present in the model') |
|
|
|
``` |
|
|
|
``` |
|
Пьер | Пьера | Пьером | Безухов | Безухова | граф Безухов | Пьер Безухов | графиня Безухова | XVIII Пьер | В самом серьезном расположении духа Пьер |
|
князь Андрей | Князь Андрей | князя Андрея | князю Андрею | Андрей | князем Андреем | Князю Андрею | князе Андрее | Андрея | Князя Андрея tolstoj_l_vojna_i_mir_1868 0.8172960877418518 |
|
Ростов | Николай | Ростова | Ростову | Ростовых | Николая | Ростовым | Николаю | Николаем | Ростовы tolstoj_l_vojna_i_mir_1868 0.7474682927131653 |
|
Вронский | Анна | Вронского | Вронским | Вронскому | Анны | Анне | Анну | Вронском | Аннушка tolstoj_l_anna_karenina_1877 0.710778534412384 |
|
Пьер | Пьера | Анна Павловна | Анны Павловны | Пьером | Анне Павловне | мсье Пьер | Анну Павловну | Пьера Анна Павловна | сам Пьер tolstoj_l_vojna_i_mir_1868 0.70228111743927 |
|
Алексей Александрович | Алексея Александровича | Алексею Александровичу | Каренина | Алексеем Александровичем | Каренин | Каренину | Алексей | Карениным | Алексее Александровиче tolstoj_l_anna_karenina_1877 0.6871339678764343 |
|
Наташа | Соня | Наташи | Наташу | Наташе | Наташей | Соню | И Наташа | заплаканную Соню | Наташа , оживленная и тревожная tolstoj_l_vojna_i_mir_1868 0.6745515465736389 |
|
Левин | Левина | Левину | Константин Левин | Костя | Константин Дмитрич | Константин | Левиным | Константина | Константину Левину tolstoj_l_anna_karenina_1877 0.6673250198364258 |
|
Ева | Евы | Ева Аркадьевна | Еву | Еве | Евой | Еву Аркадьевну | Евы Аркадьевны | Еве Аркадьевне | Евы , прислонившуюся к стене shapir_o_odna_iz_mnogikh_1879 0.6619721055030823 |
|
Литвинов | Ирина | Литвинова | Литвинову | Ирины | Литвиновым | Ирине | Ирину | Ириной | Литвинове turgenev_i_dym_1867 0.6617117524147034 |
|
Пьеру | Пьеру духовною tolstoj_l_vojna_i_mir_1868 0.6605013012886047 |
|
|
|
|
|
Базаров | Аркадий | Базарова | Аркадия | Аркадию | Базарову | Базаровым | Аркадием | Аркадию Базаров | господин Базаров |
|
Павел Петрович | Павла Петровича | Павлу Петровичу | Павлом Петровичем | Павел | Кирсанов | Кирсанова | господин Кирсанов | изумленный Павел Петрович | один Павел Петрович turgenev_i_otzy_i_deti_1862 0.6954634785652161 |
|
Анна Сергеевна | Одинцова | Анны Сергеевны | Анну Сергеевну | Анне Сергеевне | Одинцову | Анна Сергеевна Одинцова | Одинцов | покойный Одинцов | расстановкой Одинцова turgenev_i_otzy_i_deti_1862 0.6822544932365417 |
|
Миропа Дмитриевна | Аггей Никитич | Миропе Дмитриевне | Миропу Дмитриевну | Аггея Никитича | Аггея Никитича Миропа Дмитриевна | Жила Миропа Дмитриевна | Рыжовых громадного капитана Аггея Никитича pisemskij_a_masony_1880 0.6790938973426819 |
|
Николай Петрович | Николая Петровича | Николаю Петровичу | Николай | Николая | Николая - чудотворца | бедному Николаю Петровичу | Николаем Петровичем turgenev_i_otzy_i_deti_1862 0.6720525622367859 |
|
Борис Андреич | Бориса Андреича | Борису Андреичу | Борисе Андреиче | Борис Андреич , который , как видно , ожидал этого приглашения с некоторым нетерпением | неугомонный Борис Андреич turgenev.dva_priyatelya 0.6555477380752563 |
|
Дмитрий | Дмитрия | Дмитрию | Дмитрием | чудесным Митей | Один Дмитрий | мать Дмитрия | моего Дмитрия | Дмитрий , старавшийся понимать любовь | Дмитрием , который , расхаживая взад и вперед , поправлял шеей галстук tolstoy.yunost 0.6510268449783325 |
|
Нежданов | Сипягин | Сипягина | Нежданова | Нежданову | Неждановым | Сипягиным | Сипягиной | Сипягину | Сипягиных turgenev_i_nov_1877 0.648989200592041 |
|
Катя | Аркадий | Катю | Катей | Аркадия | Кате | Аркадию | Аркадием | Кати | Катей Аркадий turgenev_i_otzy_i_deti_1862 0.6461668610572815 |
|
Петр Васильич | Петра Васильича | Петру Васильичу | Петром Васильичем | бедного Петра Васильича | бедный Петр Васильич | изумленный Петр Васильич turgenev.dva_priyatelya 0.6374654173851013 |
|
Одинцовой | матерью Одинцовой turgenev_i_otzy_i_deti_1862 0.6304344534873962 |
|
|
|
|
|
Лаврецкий | Лаврецкого | Лаврецкому | Лаврецким | Лаврецких | Молодой Лаврецкий | молодой Лаврецкий | бедный Лаврецкий | XXXI Лаврецкий | XXXIII Однажды Лаврецкий |
|
Лиза | Лизы | Лизе | Лизу | Лизой | мою дочь Лизу | XXXIV Лиза | Лизе , которой только что пошел пятый год | Лиза , которая очень любила цветы | XLII Лиза turgenev_i_dvoryanskoe_gnezdo_1859 0.7776555418968201 |
|
Наталья | Наталья Алексеевна | Наталье | Натальи | Натальей | Наталье Алексеевне | Наталью | Наталью Алексеевну | Натальей Алексеевной | дочь Наталья turgenev_i_rudin_1856 0.7085265517234802 |
|
Юлия Николаевна | Юлии Николаевне | Сухаревой | Юлии Николаевны | Юлией Николаевной | старухи Сухаревой | Юлии Николаевны Сухаревой | его Юлии Николаевне Сухаревой | Юлии Николаевне Сухаревой | легкомысленной и пустой старухи Сухаревой sheller-mikhajlov_a_bespechalnoe_zhite_1878 0.6840318441390991 |
|
Зинаида | Зинаиды | Зинаиду | Зинаидой | Зинаиде | Зина | Зинаида Александровна | мою прежнюю Зинаиду turgenev.pervaya_lyubov 0.68117755651474 |
|
Вася | Бояринов | Бояринова | Васю | Васи | Васе | Бояринову | Бояриновым | Васи Бояринова | Спросил Вася iogel_m_mezhdu_vechnostyu_i_minutoj_1879 0.6781316995620728 |
|
Варвара Павловна | Варвару Павловну | Изумленная Варвара Павловна | Варю | Варя turgenev_i_dvoryanskoe_gnezdo_1859 0.6774640679359436 |
|
Ластов | Лев Ильич | Ластова | г-н Ластов | Ластову | г. Ластов | Лев Ильич Ластов | Ластовым | г-на Ластова | Льву Ильичу avenarius.povetriye 0.6750389337539673 |
|
Иван Иваныч | Чуфрин | Иван Иваныч Чуфрин | Чуфрина | Чуфриных | господин Чуфрин | Иван Иваныч , уязвлённый этим предложением | Ваня | VII Иван Иваныч | VIII Иван Иваныч yasinskiy.bunt_ivana_ivanycha 0.6723058819770813 |
|
Character-textid-3765969217135438403-charid-397 0.6678720116615295 |
|
Ольга | Ольги | Ольге | Ольга Сергеевна | Ольгу | Ольгу Сергеевну | Бедная Ольга | ненаглядную Ольгу | милая Ольга | кроткая Ольга goncharov_i_oblomov_1859 0.6646437644958496 |
|
|
|
|
|
Макар Девушкин | Макаром Девушкиным | Девушкин | Ваш Макар Девушкин | верный друг Макар Девушкин | пиита Девушкин | сам Девушкин | Ваш искренний друг Макар Девушкин | Покорнейший слуга ваш Макар Девушкин | Ваш истинный друг Макар Девушкин |
|
Character-textid--2263910210560212786-charid-1338 0.7874115705490112 |
|
Господин Быков | господин Быков | господином Быковым | Быков | Пришел Быков | господина Быкова dostoevskij_f_bednye_lyudi_1846 0.7110390663146973 |
|
Character-textid--2263910210560212786-charid-2418 0.7024538516998291 |
|
Character-textid--140710273989214700-charid-8462 0.6931672692298889 |
|
Character-textid-3551276547489550704-charid-3779 0.6896138191223145 |
|
Федора | Федоре | Федору | Федора одна | одна Федора dostoevskij_f_bednye_lyudi_1846 0.6834926009178162 |
|
Character-textid--2858303605558076810-charid-1144 0.6813129782676697 |
|
Character-textid--8912134939089356531-charid-208 0.6811396479606628 |
|
никто | Никто sukhonin_p_rod_knyazej_zazepinykh_ili_borba_nachal_1880 0.6787088513374329 |
|
Варенька | Вареньке | бедной вашей Вареньке | бедную Вареньку dostoevskij_f_bednye_lyudi_1846 0.6780672073364258 |
|
|
|
|
|
Каратаев | Платон | Каратаева | Платон Каратаев | Платона | Каратаевым | Каратаеву | И Платон Каратаев | И Платон | Платону Каратаеву |
|
Character-textid-7533511401374206894-charid-2111 0.6344175338745117 |
|
Державин | Державина | Державиным | Державину | сварливый и завистливый старик Державин | старика Державина | Старик Державин | спящего Державина | старик Державин | какого-то Державина mordovezv_d_dvenadzatyj_god_1879 0.6337519884109497 |
|
Character-textid-3795814502554737590-charid-6350 0.6170870661735535 |
|
Вольтер | Вольтера | Вольтере | Вольтером | вашего Вольтера mordovezv_d_dvenadzatyj_god_1879 0.6156854033470154 |
|
d'affaire 0.6151682138442993 |
|
Character-textid--8552851688621086804-charid-243 0.5999993085861206 |
|
Игорь 0.5925806164741516 |
|
затвержить 0.5910983681678772 |
|
Character-textid-2956570717353379843-charid-4950 0.5907760858535767 |
|
Мерзляков | Мерзлякову | Мерзляковым | Мерзляковы | Алексей Федорович | Алексей Федорович Мерзляков | профессор Мерзляков | почтеннейший Алексей Федорович | Мерзлякова | Мерзлякову ни с того ни с сего mordovezv_d_dvenadzatyj_god_1879 0.5906319618225098 |
|
``` |
|
|
|
# Related Publication |
|
|
|
Coming soon |