--- 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