--- license: mit language: - ru tags: - nlp - word2vec - dh - fiction --- # 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. The texts are marked up using the Russian version of the booknlp library, which highlighted the characters of the fictional works. Texts presented in old orthography have been converted to modern orthography with the help of a [package](https://pypi.org/project/prereform2modern/). 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. Unlike the usual practice of working with such models, the texts were not lemmatized and stop words were not excluded from them. Punctuation cut. Texts are included in this repository as a file `train_forms.txt`. # 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 732318 words = ['Character-textid-1233692858423997945-charid-74'] # what to look up in model for word in words: word_l = word.lower() # all words in model are in lower case # search for word in model if word_l in model.wv: print(cd[word]['name']) # 10 : for i in model.wv.most_similar(positive=[word_l], topn=10): # word, cosin distance try: print(cd[i[0].capitalize()]['name'], cd[i[0].capitalize()]['filename'], i[1]) except: print(i[0], i[1]) print('\n') else: # :( print(word + ' is not present in the model') ``` ``` Лаврецкий | Лаврецкого | Лаврецкому | Лаврецким | Лаврецких | Молодой Лаврецкий | молодой Лаврецкий | бедный Лаврецкий | XXXI Лаврецкий | XXXIII Однажды Лаврецкий Сергей Михайлыч | Сергея Михайлыча | Сергеем Михайлычем | Сергей же Михайлыч tolstoj_l_semejnoe_schaste_1859 0.6750872731208801 Иван Степанович | Ваня | Ивана Степановича | Стени | Ивану Степановичу | Вани | Ване | императора Ивана | Иваном Степановичем | Стени Иван Степанович polezhaev_p_lopukhinskoe_delo_1883 0.6608477830886841 Лиза | Лизы | Лизе | Лизу | Лизой | мою дочь Лизу | XXXIV Лиза | Лизе , которой только что пошел пятый год | Лиза , которая очень любила цветы | XLII Лиза turgenev_i_dvoryanskoe_gnezdo_1859 0.6512988805770874 character-textid-534782102185514500-charid-2141 0.6511214375495911 Левин | Николай | Николай Левин | Левина | Левину | брат Николай | Николая Левина | Николая | От брата Левин | Николай Левин , раздраженный возражением tolstoj_l_anna_karenina_1877 0.650296151638031 Соковлин | Соковлина | Соковлине | Но Соковлин | Молодой Соковлин | monsieur Соковлин | удивленный Соковлин | месье Соковлин | серьезно Соковлин | несколько Соковлина avdeev_m_podvodnyj_kamen_1860 0.6466697454452515 Вретищев | Вретищева | Вретищеву | доктор Вретищев | Вретищевым avseenko_v_izza_blag_zemnykh_1872 0.6466327905654907 Багрянский | Багрянского | Багрянскому | Багрянском | нетерпеливо Багрянский | Багрянской | В ужасе , Багрянский | молодого Багрянского | спросил Багрянский | Багрянских khvoshinskaya_n_bolshaya_medvediza_1870 0.6458360552787781 Вася | Бояринов | Бояринова | Васю | Васи | Васе | Бояринову | Бояриновым | Васи Бояринова | Спросил Вася iogel_m_mezhdu_vechnostyu_i_minutoj_1879 0.6448401808738708 Венецкий | Венецкого | Венецкому | Венецким | Венецком | Мосье Венецкий | опасно раненных оказался штабс-капитан Венецкий | Счастливые личным счастьем Венецкие stanyukovich_k_v_mutnoj_vode_1878 0.6413235664367676 ``` # 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'] for word in words: word_l = word.lower() # all words in model are in lower case # search for word in model if word_l in model.wv: print(cd[word]['name']) # 10 : for i in model.wv.most_similar(positive=[word_l], topn=10): # word, cosin distance try: print(cd[i[0].capitalize()]['name'], cd[i[0].capitalize()]['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.8655860424041748 Ростов | Николай | Ростова | Ростову | Ростовых | Николая | Ростовым | Николаю | Николаем | Ростовы tolstoj_l_vojna_i_mir_1868 0.8359265923500061 Пьер | Пьера | Анна Павловна | Анны Павловны | Пьером | Анне Павловне | мсье Пьер | Анну Павловну | Пьера Анна Павловна | сам Пьер tolstoj_l_vojna_i_mir_1868 0.768761157989502 Левин | Степан Аркадьич | Левина | Левину | Левиным | Левине | Левиных | Степан Аркадьич Левину | Степан Аркадьич , который любил физиологию | охотник Степан Аркадьич tolstoj_l_anna_karenina_1877 0.7645115256309509 Левин | Левина | Левину | Константин Левин | Костя | Константин Дмитрич | Константин | Левиным | Константина | Константину Левину tolstoj_l_anna_karenina_1877 0.7631195187568665 Алексей Александрович | Алексея Александровича | Алексею Александровичу | Каренина | Алексеем Александровичем | Каренин | Каренину | Алексей | Карениным | Алексее Александровиче tolstoj_l_anna_karenina_1877 0.6914079785346985 Вронский | Анна | Вронского | Вронским | Вронскому | Анны | Анне | Анну | Вронском | Аннушка tolstoj_l_anna_karenina_1877 0.6839613914489746 Пьеру | Пьеру духовною tolstoj_l_vojna_i_mir_1868 0.677771270275116 Глинский | Глинского | Глинскому | Глинским | г. Глинский | Глинском | Г. Глинский | бедный Глинский | самого Глинского | г. Глинскому bestuzhev_n_russkij_v_parizhe__goda_1860 0.6717219352722168 Вронский | Вронского | Вронскому | Алексей | Вронским | Алексей Вронский | Алексею | Алексея Вронского | Алексеем | Вронском tolstoj_l_anna_karenina_1877 0.6684336066246033 Базаров | Аркадий | Базарова | Аркадия | Аркадию | Базарову | Базаровым | Аркадием | Аркадию Базаров | господин Базаров князь | Князь merder_n_vsya_chuzhaya_1885 0.7821471095085144 Павел Петрович | Павла Петровича | Павлу Петровичу | Павлом Петровичем | Павел | Кирсанов | Кирсанова | господин Кирсанов | изумленный Павел Петрович | один Павел Петрович turgenev_i_otzy_i_deti_1862 0.7807522416114807 Николай Петрович | Николая Петровича | Николаю Петровичу | Николай | Николая | Николая - чудотворца | бедному Николаю Петровичу | Николаем Петровичем turgenev_i_otzy_i_deti_1862 0.7124422788619995 доктор | Доктор merder_n_vsya_chuzhaya_1885 0.7010178565979004 Лука Иванович | Лука Иваныч | Луки Ивановича | Луке Ивановичу | Луку Ивановича | Лукой Ивановичем | Лука | Луке Ивановиче | какой-то другой Лука Иванович | Луки Ивановича , сидевшего у письменного стола boborykin.dolgo_li 0.6949086785316467 Володя | Шрам | Володи | Володю | Шрама | Володей | Шраму | Володя Шрам | Шраме | барону Шраму kushevskij_i_nikolaj_negorev_ili_blagopoluchnyj_rossiyanin_1871 0.6844052076339722 Паклин | Паклина | господин Паклин | Господин Паклин | г-н Паклин | Паклиным | господина Паклина | Сила Паклин | Молодой Паклин | любезный господин Паклин turgenev_i_nov_1877 0.6791232228279114 Николай Иванович | Николая Ивановича | Астафьев | Николаю Ивановичу | Астафьева | Астафьевым | Николаем Ивановичем | Николая Ивановича Астафьева | ничтожного Астафьева | Николай Иванович , сбитый с толку этим неожиданным вопросом merder_n_vsya_chuzhaya_1885 0.6773545742034912 Нежданов | Сипягин | Сипягина | Нежданова | Нежданову | Неждановым | Сипягиным | Сипягиной | Сипягину | Сипягиных turgenev_i_nov_1877 0.6740620136260986 Николай Всеволодович | Николая Всеволодовича | Николаю Всеволодовичу | Николай же Всеволодович | Николая | самого Николая Всеволодовича dostoevskij_f_besy_1871 0.6717023253440857 Лаврецкий | Лаврецкого | Лаврецкому | Лаврецким | Лаврецких | Молодой Лаврецкий | молодой Лаврецкий | бедный Лаврецкий | XXXI Лаврецкий | XXXIII Однажды Лаврецкий Сергей Михайлыч | Сергея Михайлыча | Сергеем Михайлычем | Сергей же Михайлыч tolstoj_l_semejnoe_schaste_1859 0.6750872731208801 Иван Степанович | Ваня | Ивана Степановича | Стени | Ивану Степановичу | Вани | Ване | императора Ивана | Иваном Степановичем | Стени Иван Степанович polezhaev_p_lopukhinskoe_delo_1883 0.6608477830886841 Лиза | Лизы | Лизе | Лизу | Лизой | мою дочь Лизу | XXXIV Лиза | Лизе , которой только что пошел пятый год | Лиза , которая очень любила цветы | XLII Лиза turgenev_i_dvoryanskoe_gnezdo_1859 0.6512988805770874 character-textid-534782102185514500-charid-2141 0.6511214375495911 Левин | Николай | Николай Левин | Левина | Левину | брат Николай | Николая Левина | Николая | От брата Левин | Николай Левин , раздраженный возражением tolstoj_l_anna_karenina_1877 0.650296151638031 Соковлин | Соковлина | Соковлине | Но Соковлин | Молодой Соковлин | monsieur Соковлин | удивленный Соковлин | месье Соковлин | серьезно Соковлин | несколько Соковлина avdeev_m_podvodnyj_kamen_1860 0.6466697454452515 Вретищев | Вретищева | Вретищеву | доктор Вретищев | Вретищевым avseenko_v_izza_blag_zemnykh_1872 0.6466327905654907 Багрянский | Багрянского | Багрянскому | Багрянском | нетерпеливо Багрянский | Багрянской | В ужасе , Багрянский | молодого Багрянского | спросил Багрянский | Багрянских khvoshinskaya_n_bolshaya_medvediza_1870 0.6458360552787781 Вася | Бояринов | Бояринова | Васю | Васи | Васе | Бояринову | Бояриновым | Васи Бояринова | Спросил Вася iogel_m_mezhdu_vechnostyu_i_minutoj_1879 0.6448401808738708 Венецкий | Венецкого | Венецкому | Венецким | Венецком | Мосье Венецкий | опасно раненных оказался штабс-капитан Венецкий | Счастливые личным счастьем Венецкие stanyukovich_k_v_mutnoj_vode_1878 0.6413235664367676 Макар Девушкин | Макаром Девушкиным | Девушкин | Ваш Макар Девушкин | верный друг Макар Девушкин | пиита Девушкин | сам Девушкин | Ваш искренний друг Макар Девушкин | Покорнейший слуга ваш Макар Девушкин | Ваш истинный друг Макар Девушкин character-textid--2263910210560212786-charid-1338 0.7358484268188477 Господин Быков | господин Быков | господином Быковым | Быков | Пришел Быков | господина Быкова dostoevskij_f_bednye_lyudi_1846 0.7262941002845764 character-textid-1136845811644681716-charid-1206 0.6773316860198975 character-textid-1136845811644681716-charid-3844 0.6563677787780762 character-textid-1136845811644681716-charid-2053 0.652981698513031 character-textid--7985429081029307543-charid-1531 0.652394711971283 Хозаров | Сергей Петрович | Хозарова | Хозарову | Сергея Петровича | Серж | Сергей Петрович Хозаров | Хозарове | батюшка Сергей Петрович | monsieur Хозаров pisemskiy.sergey_petrovich_khozarov_i_mari_stupitsyna 0.6416277289390564 character-textid--4293449816511506795-charid-290 0.6381958723068237 княгиня | Княгиня leontev_k_v_svoem_krayu_1864 0.6374576091766357 character-textid--4271048439950032603-charid-2583 0.6364111304283142 Каратаев | Платон | Каратаева | Платон Каратаев | Платона | Каратаевым | Каратаеву | И Платон Каратаев | И Платон | Платону Каратаеву character-textid-4177657404362292091-charid-1523 0.6946800947189331 Ярошиньский | Ярошиньского | Ярошиньским | Ярошиньскому | пан Ярошиньский leskov_n_nekuda_1864 0.6883847713470459 преображенец | Преображенец kondratev_i_saltychikha_1888 0.6815229654312134 character-textid-817356164263296914-charid-544 0.6801170706748962 character-textid-3795814502554737590-charid-1649 0.6705427169799805 пришепетывал 0.6704264283180237 учитель | Учитель goncharov_i_obryv_1869 0.6669456958770752 character-textid--6401744739099736970-charid-2051 0.6653541326522827 Венявин | Венявина | Венявину | Венявин , выпивший две рюмки и совсем от этого захмелевший | Венявиным | Венявиных pisemskij_a_vzbalamuchennoe_more_1863 0.6645135283470154 Михалевич | Михалевича | Михалевичу | МихалевиЧ | Михалевичем | неугомонный Михалевич turgenev_i_dvoryanskoe_gnezdo_1859 0.6601350903511047 ``` # Related Publication Coming soon