Named Entity Recognition for Russian#

Note

This section, “Working in Languages Beyond English,” is co-authored with Quinn Dombrowski, the Academic Technology Specialist at Stanford University and a leading voice in multilingual digital humanities. I’m grateful to Quinn for helping expand this textbook to serve languages beyond English.

In this lesson, we’re going to learn about a text analysis method called Named Entity Recognition (NER) as applied to Russian. This method will help us computationally identify people, places, and things (of various kinds) in a text or collection of texts.


Dataset#

The example text for Russian is Яблони цветут from Новые люди by Зинаида Николаевна Гиппиус from Библиотека русской и советской классики. (Thanks to Katherine Bowers for the text referral.)

Here’s a preview of spaC’s NER tagging Яблони цветут.

If you compare the results to the English example, you’ll notice that the Russian NER is much less good at recognizing entities, and is especially bad ata distinguishing different kinds of entities, like ORG vs LOC. You need a lot of examples to train a model to distinguish different entity types; currently, English is the only model that does a decent job of it.

You can read more about the data sources used to train Russian on the spaCy model page.

Яблони цветут*

I
Зачем она так сделала, что я не умею жить без нее? Это она сделала, я не виноват…

Я написал это – и мне стало странно. Говорю точно о возлюбленной. Но возлюбленной у меня нет. Это моя мать сделала так, что я умираю без нее. Если человека держать в тепле всю жизнь, а потом неодетого выгнать на двадцатиградусный мороз, он непременно умрет. И я умру. Умру из-за нее.

Давно уж мне хочется рассказать кому-нибудь все, о чем я думаю, или хоть написать. Рассказать некому, никто не хочет, чтобы я рассказывал, так уж лучше я напишу. Все-таки легче.

Мне кажется, что эти последние дни – важные и значительные дни для меня. Я до чего-то дошел, кончил половину моей жизни, а дальше дорога прямая, унылая, быстрая и такая однообразная, что уже нельзя будет заметить, идешь ли вперед или назад, вверх или вниз. И не знаю, нужно ли покориться, как всегда, и идти по ней.

Мне теперь двадцать восемь лет, но никто этому не верит, таким старым я кажусь. Я сам знаю, что я старик. У меня было прежде красивое и нежное лицо, как у мамы, мы с ней часто вместе смотрелись в зеркало, и нам казалось, что мы удивительно похожи друг на друга.

Теперь она не узнала бы меня. Я согнулся, глаза потускли, борода выросла большая, лицо стало желтое, темное. Я думаю, что я скоро умру. У меня нет, кажется, никакой болезни, но я должен умереть, потому что живет тот, кто хочет, кто имеет волю жить, а у меня нет воли. В последние дни, когда я это сознал и увидел, что мне больше и ждать нечего – я даже думал о самоубийстве. Но я не могу. Я боюсь. Я знаю, что у меня пошлое и трусливое сердце. Я боюсь.

Все это она сделала. Правда, я думаю – что от нее же у меня то чувство, которое совсем не пошло, и одно давало мне счастие жизни – сентиментальность. Я не стыжусь этого слова, как все стыдятся. Да, все стыдятся, потому что у всех оно есть…

Я музыкант и если не хороший, то порядочный, как говорят. Думаю, хорошим я и не могу быть, потому что, когда играю длинные, трудные рапсодии и фуги, даже сонаты, я совершенно холоден, и мысли у меня самые обыденные, скучные. Чувство прекрасного редко бывало у меня; это – совсем не сентиментальное чувство, оно захватывает и зовет вперед, а мне это трудно; я люблю тихое умиление, воспоминания, когда так сладко болит сердце, и в душе глубокая тишина.

Бывало, играя блестящую прелюдию в концерте (теперь уж давно я не выходил на эстраду), я взглядываю на какого-нибудь пожилого господина в первом ряду и думаю: «Вот ты смотришь на меня, слушаешь внимательно и знаешь, что я играю, потом будешь делать толковые замечания о моей „технике“ и „экспрессии…“ А если бы я бросил теперь эту прелюдию и сыграл маленькую, простую малороссийскую песенку, которая напомнила бы тебе далекие годы, темный, теплый сад и, может быть, чьи-нибудь милые, забытые глаза – ты встал бы и ушел, чтобы скрыть невольные слезы, радостную грусть и счастье, которого не дает тебе блестящая прелюдия. И непременно ты хотел бы скрыть это счастие, потому что тебе стыдно и кажется, что ты один так чувствуешь и другие не поймут, а между тем все так же чувствуют – и каждый стыдится, думая, что он один. У каждого есть светлое облако в прошлом.

И у меня оно есть, как у всех».

II
Скучно рассказывать с самого начала, с тех пор, как я был ребенком. Да и в двадцать лет я жил так же, как в десять. Только в двадцать я был счастливее, потому что перерос маму и мог гулять с ней под руку. Отношения же наши не изменялись. Бывало, мальчиком я часто делал ей сцены, когда она уезжала в театр без меня, говорил, что она не имеет права веселиться, когда я должен учить уроки. Она серьезно умоляла простить ее, даже делалась печальна, если я дулся. Нам нельзя было ссориться. У нее не было никого, кроме меня. И у меня была она одна.

С отцом я даже не разговаривал никогда. Пожилой господин, вечно занятый какими-то постройками, живший в другой половине дома, он совсем не интересовал меня. А мама была такая молодая, тоненькая, как девочка, с большими черными глазами, свежая, блестящая; платье ее шумело при быстрых движениях, и веяло от нее какими-то странными духами, – я так и не узнал, как они называются. Запах их напоминал самую раннюю весну.

Конечно, мы жили в Петербурге LOC . Я говорил, что у всех есть что-то необычное, светлое в прошлом. Но я не знаю и сомневаюсь, что может быть у людей, которые родились в Петербурге LOC и не видали другого солнца. Хорошо, если я ошибаюсь и сужу по себе. Но я никогда не примирюсь с этим низким небом и темным воздухом, с этой квартирой, где я один. Впрочем, об этом впереди. И все равно, я один в целом свете, как же мне не быть одному в этой квартире?

Мы жили в большом городе на юге, в своем доме. Дом был новый, выстроенный отцом, неудобный и холодный. Во дворе был небольшой, но чистый сад, к которому со всех сторон примыкали чужие сады, а потому он казался мне бесконечным. Отец все хотел его вырубить и построить два флигеля и сарай, но так и не собрался. Не знаю, впрочем, может быть, теперь уж и нет нашего сада. Не знаю, да и знать не хочу.

Я никогда не был в гимназии. В самом деле, с кем бы мама оставалась? У нее было много знакомых, но никто никогда за ней не ухаживал серьезно, хотя и знали ее отношения к отцу. Я думаю, она сама не хотела.

У меня были лучшие гимназические учителя, и я учился недурно. Мама, конечно, училась со мною, но ей часто надоедало, и она говорила:

Володя PER , бросим книги, пойдем гулять, а?

И мы шли, – она нарядная, веселая, а я счастливый, что у меня такая хорошенькая мама, и я так на нее похож.

Она совсем не изменялась, не старела, и скоро нас стали принимать за брата и сестру, особенно когда у меня выросли усы и маленькая борода. Мне казалось, что и я не изменился внутренне. Только к двадцати годам я серьезно стал заниматься музыкой и мечтал о консерватории. Гимназический экзамен я сдал хорошо, и надо было на что-нибудь решаться.

– Ты поедешь в консерваторию, в Москву LOC , непременно, – говорила мама. – Надо скорее, тебе уже двадцать лет. Ты будешь знаменитым, вот увидишь.

– А когда же мы поедем?

– Осенью, я думаю. Хорошо?

Не было и речи о том, чтобы мне ехать без мамы. С кем бы я стал говорить? Кто бы ласкал меня и ходил со мною гулять? А кто бы ухаживал за мною, когда я заболею? Да разве возможно ей оставаться без меня, когда мы ни на один день не расставались, все делали и обсуждали сообща? Я и заниматься не стал бы без нее.

Так же, как бывало ребенком, – я садился по вечерам у огня в ее комнате, на полу, около ее ног, и рассказывал ей, как та и та барышня в меня влюблены, как я за ними ухаживаю, и какая мне больше нравится. Мне в это время казалось, что все барышни должны быть в меня влюблены, потому что я такой красивый и так хорошо играю на фортепиано.

– Знаешь, Володя PER , – сказала мне раз мама, – ведь ты совсем не похож на мужчину, ты совершенно женщина, оттого, должно быть, мы с тобой так и сошлись… Или это я сама так сделала, – прибавила она подумав. – Ты, например, в мужском обществе и не бываешь никогда; а среди женщин я тебя видела – там ты тоже как-то не ухаживаешь, а кокетничаешь. Не знаю… но мне кажется, будь ты мне чужой – ты мне не понравился бы.

Я страшно обиделся и надулся. Как! Сама же она говорила, что я похож на нее, а теперь я ей не нравлюсь! Если это и не хорошо, что я похож на женщину, то ведь она же сама прежде этого не боялась?

Да и что тут нехорошего? Пусть я похож на женщину! Я люблю прежде всего все красивое – но без суровости, без силы, а нежное и простое. Я не виноват, что я такой…

Мама долго просила у меня прощения, и мы помирились. Но я не забыл ее слов и часто потом говорил ей:

– Вот Сыромятников PER , или Маремьянов PER , правда, какие мужественные? Правда, они должны нравиться женщинам?

Мама улыбалась и зажимала мне рот своей большой, но красивой рукой с бесчисленными звенящими браслетами.

Я знал, что делался фатом, потому что я все-таки очень нравился тамошним барышням, знал – жизнь проходила пусто, и сердце делалось пошлым от этой вечной рисовки и бесцельного желания нравиться. Сам я ни разу не влюблялся. Нравились многие, но не сильно. В сущности, я был очень чистым в то время, как редкие, но мысленно я оказывался не лучше других. Говорят, что всегда чистые люди – не чисты в мыслях; но мне кажется, что это неправда. И у меня это было временно и, я думаю, от робости, от пошлой и праздной жизни, и оттого, что меня портили и баловали.

III
Удивительно, как мало меня интересовали книги. Я их читал, пока не сдал экзамена. А с тех пор я занимался только музыкой. Она одна меня волновала и заставляла вспоминать то, чего не было. Для музыки я мог забыть многое.

Наконец, мы поехали в Москву LOC . И я был рад. Я инстинктивно чувствовал, что надо все переменить.

С нами поехала наша старая экономка PER , без нее мы совсем пропали бы. Я в Москве LOC никогда не был, а мама хотя и жила там прежде, однако ничего не знала и не умела. Может быть, и сумела бы, но ей было скучно заботиться и суетиться, и я это отлично понимал.

Мы наняли хорошенькую квартирку на Малой Никитской LOC и зажили припеваючи, по-товарищески. Ездили в театр, кататься. Скоро явились знакомые, нашлись родственники. Но я стал заниматься ревностно и даже редко выходил, когда у мамы были гости.

В консерватории я ни с кем не сошелся, кроме своего профессора, еще молодого человека.

Я ему казался странным, хотя, как он говорил, очень талантливым. Он, однако, угадал меня только после того, как я его ввел к нам, и он увидал мою маму. Нас друг без друга понять было нельзя, а вместе, как говорили, мы составляли одно целое.

– Смотрите, молодой человек, – сказал мне раз профессор, – занимайтесь хорошенько. Из вас должно выйти что-нибудь, или вы совсем пропадете.

И я занимался. Даже лень свою забыл, не заботился о волосах и об одежде, редко выезжал и все играл свои гаммы. Я их не любил и терпел только, как трудную лестницу, по которой нужно взбираться наверх. Как я тосковал о синем небе, о земле, о цветах! Я ни о чем так не тосковал, я не думал, что будет тоска. Мама утешала меня, но… это было мое больное место. Я знал, что тут мы не понимаем друг друга, только тут. Она даже сада нашего не любила, – гулять ходила по улицам, говорила, что солнечный свет гораздо беспокойнее полутьмы гостиной, а ее духи лучше запаха настоящей весны.

Когда я об этом думал, приходило невольное чувство на минуту, что она не молода, что она не может быть вполне моим товарищем, что в глубине души – между нами преграда.

Но это были только минуты…

Я говорил, что не сошелся ни с кем. Близко не сходился, но знакомился и несколько раз попадал на кутежи, не ночевал дома…

Мама расспрашивала меня с любопытством и без всяких упреков, но я был как-то недоволен и рассказывал подробно с омерзением, хотя не без гордости.

– Это неважно, Володя PER , – говорили мама. – Это я все так и думала. Ты только меня не должен забывать. Понимаешь, чтобы я была у тебя первой, и всегда, как ты у меня. Понимаешь? Иначе жить нельзя. Понимаешь?

Я только улыбался и обнимал ее. Как же она может быть не первой? Кто же тогда?

IV
Прошло несколько лет. Я кончал консерваторию, выступал в концертах – и с успехом. Но я сам был не совсем доволен. Что мне в этих трескучих пьесах, где я так быстро перебираю пальцами, и все удивляются и хвалят меня? Когда же я смогу сыграть то, что слышу часто – но что ускользает от меня? Если сумею, если найду – то все сразу изменится, и я буду одно чувствовать с теми, кто слушает. Мы вместе будем плакать, потому что оно пройдет не мимо, а заденет, зацепит самое тайное, самое тайное, самое глубокое, одно для всех… Да, мы будем плакать; потом… потом все равно, ну – умрем. Все равно… Я знал, что, пока я сам не чувствую – ничего не будет; и верил без сомнений, что если придет ко мне – то и ко всем придет, кому я буду «говорить». Я всегда мысленно вместо «играть» употреблял выражение «говорить с людьми».

Может быть, все это было не умно. Но я никогда не считал себя умным человеком. У меня и самолюбия тут не было. Я знал, что я не развит и мало образован. Да и пусть. Я не к этому шел, у меня другое счастье, другая дорога меня поведет наверх.

Мама раза два меня оставляла одного на несколько недель, ей необходимо было уехать домой. И каждый раз я умирал, бросал заниматься, почти не ел. У меня являлся какой-то нервный ужас, мне казалось, что я один на свете, ее нет и не было. Главное – не было! А если не было, – значит, и не будет…

Зачем она так связала меня с собою, что жизнь без нее не могла длиться? Если я скажу, что любил ее – это будет не то слово: не люблю я воздух, пищу, – а жить без них не могу. Я знаю, что я слабый, слабый человек. У меня нет силы сделать против себя, не страдать, когда я страдаю…

Я был последний год в Москве LOC , когда заболел отец, и мама уехала перед Рождеством. А в конце января я заболел сам, бросил все и приехал домой. Что ж, лишний год – так лишний год, а заниматься без нее я все равно не могу. Я приехал, и мы целый вечер просидели вместе на диванчике в ее комнате и молчали… Но я знал, что она довольна. Она так же не могла жить без меня, как я без нее…

V
Я проводил дни дома и много играл. У меня была небольшая комната в одно окно, и окно это выходило на двор, к саду. Я поставил свой рояль к окну и смотрел на небо и на деревья, когда играл.

В середине февраля стало совсем уж тепло. Я ходил в сад и смотрел на голубое небо между голыми ветвями черешен и яблонь. Какое оно было веселое, золотое между черными сучьями! А на дальних горах чуть желтела, даже еще не зеленела, а желтела первая травка. Она всегда из земли выходит такая светлая и молодая, что кажется желтой. Люблю я эти крошечные травинки, первые; они – точно дети, любопытные и неловкие, подымают серый комок земли и глядят на солнце. Ах, мама… Зачем она не ходила со мной в сад и не любила того, что я любил? И опять холодная струя пробиралась в мое сердце, опять отчужденность…

Как это странно! И как больно…

Чем дальше шла весна, тем больше я сидел в саду, и тем радостнее мне становилось. Точно я сам рос вместе с желтыми цветами. Свои фуги я забросил; опять я слышал в душе что-то такое, что светлее всяких фуг, опять я искал – и не мог найти. Оно было тут, близко, в весеннем шуме, в весеннем запахе… И как оно далеко от меня теперь!..

Листьев PER не было видно, но на яблонях и черешнях розовели круглые, крепкие почки, совсем еще закрытые, точно спящие. Мне один раз пришло в голову: откуда они, эти почки, зачем они? Зачем это небо, эта весна? Отчего я ничего не знаю? Но я испугался. Не надо, не надо вопросов, не нужно думать, нужно покориться и отдаться всему, и тогда будет не страшно и просто…

Я сидел в конце узенькой, сырой дорожки, на низкой скамеечке у самого дальнего забора моего сада. Это был не забор, а живая изгородь, пока еще черная. Я никогда не горевал, что мой сад не тянулся далеко, а кончался здесь, у этой изгороди. Всюду, куда я ни смотрел – были деревья, трава и земля, а над ними небо. Какое мне дело до того, что это деревья чужих садов, когда они такие же, как и мои? Все мое, на что я смотрю и что меня радует. И те обрывистые горы с глубокими, сизыми тенями – далеко на небе – они тоже мои. Солнце шло к западу, и лучи его делались холоднее. Я знал, что мне пора идти домой, но не мог расстаться со своей скамейкой. Вдруг позади меня кто-то прошел, тихо так, что я едва услышал. Я обернулся: шаги слышались за изгородью, в чужом саду. Это были даже не шаги, а какой-то связный шорох, точно что-то проволоклось по земле – и затихло. Я мог бы встать и посмотреть, что это такое, – изгородь приходилась мне в одном месте чуть выше пояса, – но я подумал: «Ну, все равно, не стоит». Весенний воздух утомил меня, мне хотелось быть спокойным и дремать.

Но опять повторился шорох и умолк сразу. Я поднял глаза и встретился с чужими глазами, которые пристально и зло смотрели на меня. Я почувствовал, что они смотрели зло, потому что мне стало беспокойно. Потом сразу выражение глаз изменилось и стало равнодушным. За изгородью стояла незнакомая мне девушка. Несколько времени мы молчали и смотрели друг на друга. Я думал, что она уйдет. Но она заговорила.

– Здравствуйте, – сказала она неприветливо. – Я вас давно вижу. Зачем вы вечно здесь сидите?

– Тут хорошо, – отвечал я как-то робко, точно извиняясь. – А я вас никогда не видел.

– Я смотрела издали. Я живу вон там, – и она указала на чуть видный за деревьями дом, далеко от изгороди.

Когда она сделала движение рукой, я в первый раз заметил, что одежда ее была странная, непохожая на обыкновенные платья барышень. То она мне казалась маскарадной, то совсем простой и даже единственно возможной. Это было широкое платье из мягкой белой материи, но одинаково широкое вверху и в подоле (я видел теперь ее всю, потому что стоял у изгородим с другой стороны), с узким темно-красным поясом. Я понял, почему был такой странный шорох, когда она шла: платье кончалось длинным шлейфом, и даже не шлейфом, а просто падающим сзади куском материи, небрежным и красивым. Рукава были узкие и длинные, почти до пальцев.

Я, хорошо воспитанный молодой человек, умел держать себя с барышнями. Но тут ни на одну минуту я не подумал, что это барышня и с ней надо вести себя, как с другими. Я спросил ее:

– Отчего это на вас такое странное платье? Она не удивилась.

– Оно красивее. Меня никто не видит, и потому я забочусь, чтобы я сама себе нравилась.

– И мне нравится, – сказал я. – А как вас зовут?

– Марта.

– Марта? Разве вы не русская?

– Нет, русская. Моя фамилия Коренева PER , я живу здесь с матерью. Разве вы не слышали? Слепая Коренева PER ? Богачка?

Я вспомнил, что точно слышал что-то о слепой старухе Кореневой PER , очень богатой, и о ее молоденькой дочери, которая много учится и нигде не бывает.

– Да, я слышал, – медленно проговорил я. – Как странно, мы соседи, а я только теперь вас вижу…

– Я не люблю выходить, – поспешно сказала она. – Да, так вы удивились, что я Марта. Я – Марфа PER , но Марта PER красивее, и потому меня так называют.

– Да… Вы вообще красивы, – сказал я в раздумьи, почти про себя.

– Правда? – просто ответила она. – Вот я тоже нахожу, что я красива. А многие говорят, что нет. Я думаю, что они не понимают.

Меня не удивлял наш разговор. Я не мог убедить себя, что Марта PER – барышня, а я ей говорю комплименты. Она казалась мне красивой, как небо сквозь деревья, как нежный, душистый воздух, как розовые облака около уходящего солнца. Она так подходила ко всему, даже к этому предвечернему часу, что мне не хотелось ни разговаривать, ни удивляться, а просто радоваться всему вместе.

И она замолчала.

– Ну, теперь прощайте, – сказала она наконец. – Вы можете приходить сюда, – прибавила она чуть-чуть высокомерно, но снисходительно. – Вы не портите сада.

И опять я услышал связный шорох ее платья, она ушла. Я не удивился и ее последним словам: она думала почти о том же, о чем я. Удивляешься тому, что еще чуждо, что вне тебя, а не в тебе…

Я был странным весь вечер. Я пробовал играть, но звук рояля мне показался противным, резким и слишком определенным. Я пришел проститься к маме, но не сказал ей ни слова. И в первый раз в жизни мне показалось, что ее духи пахнут не настоящей весной…

VI
Два дня я не был в саду.

Я сам не знаю, чего я боялся. Должно быть, того, что так хорошо уж не будет, а воспоминание я испорчу. Мама несколько раз замечала, что я бледен и мало играю. Отец все еще лежал, и мама большую часть дня была занята.

– Что ты, Володя PER ? Хочешь, вечером пойдем гулять?

Я отвечал вяло и апатично. Гулять по улицам мне не хотелось.

Наконец, на третий день я решился вдруг, как решаются слабые люди, быстро взял шляпу и твердыми шагами отправился в сад.

Там многое изменилось. Дорожки стали суше, желтые анемоны ползли около цистерны; а на яблонях почки побелели и расширились. Даже на изгороди кое-где появились крошечные зеленые листики. Не успел я сесть на свою скамейку и опомниться, как сейчас же, сию минуту я услышал знакомый шорох, Марта PER подошла к изгороди и сказала:

– Здравствуйте.

Я встал и приблизился к ней. Она была в том же или в таком же платье, только пояс был не красный, а золотой.

– Отчего вы не приходили? – спросила она. – Ведь я вам сказала, что вы можете приходить. Впрочем, я знаю, почему вы не приходили.

– Почему?

– Все равно… Я знаю.

Может быть, солнце бросало на нее свои лучи особенно; может быть, это было мое воображение, но мне казалось, что сегодня одежда ее чуть-чуть отливала розовым, как цветы яблони.

Странное лицо было у Марты PER , я его не могу вспомнить; знаю только, что в ней во всей ничего не было темного или яркого. Волосы, завязанные сзади в простой узел, почти небрежный, серели и сливались с окружающим воздухом; лицо бледное, тонкое, продолговатое; глаза тоже бледные, но прозрачные, как чистая вода. Я не знаю, какого цвета были эти глаза. Я думаю, в полдень, когда небо очень синее, они темнели.

Так – я помню все черты, помню тоненькие, прямые полоски бровей, светло-розовые, сжатые губы, а все лицо ускользает от меня. И я почти рад этому. Чем неуловимее воспоминание, тем оно полнее.

– А я знаю, где сегодня спрячется солнце, – сказала Марта PER . – Вон там, за этим уступом. А вчера оно зашло левее, гораздо левее. Я каждый день знаю, куда садится солнце. Ведь это мои дни, мои! – произнесла она с торжеством. – Хотите знать, что будет в саду завтра? Хотите я вам скажу, в какую ночь распустятся яблони?

– Как вы знаете? – спросил я тихо.

– Я знаю и сад, и весну, и солнце, и цветы, потому что я их люблю…

И я поверил вдруг, что она точно все знает.

– Вы думаете, что чувствует вон та акация? – спросила она.

– Я думаю – радость…

– А какую?

– Как вы и я… Вот такую же… Радость от солнца.

– Да. Мы все вместе радуемся, все вместе…

– А я слышу иногда, – прибавила она, помолчав, – как вы играете. Отсюда хорошо, не резко. Я люблю…

Я вспомнил, как и мне в эти дни звук рояля казался резким.

– Только… – продолжала Марта PER , – вы не сердитесь, но часто вы играете такое составное, из многих разных нот, а всего-то нет. Знаете, надо удаляться от того, что люди придумали, а надо слушать здесь, – она провела рукой по воздуху, – и стараться согласно, чтоб все вместе шло к одному…

Она остановилась, видимо затрудняясь объяснить свою мысль, но, конечно, я ее понял.

– Я всегда так и думал, – сказал я. – Хорошо, что и вы тоже. Значит, это верно.

– А вы не умеете играть чего-нибудь простого, такого нескорого? Вот я один раз слышала песню. Ее и в концертах поют и играют, но не так. Знаете: «Ни слова, о друг мой, ни вздоха…» У меня нет голоса, я не могу петь, но я вам спою, чтобы вы знали мотив.

И она запела тихо, почти говоря. Я прислушался к мотиву и попросил повторить.

– И слова какие хорошие, – сказала она. – Только теперь для меня непонятные. Теперь мои дни, – повторила она опять. – А вот кончится весна…

Голос PER ее упал. Я вдруг вспомнил, что не видал ее улыбки.

– Вы никогда не смеетесь, Марта PER ? – спросил я.

– Солнце заходит, – серьезно ответила она. – Утром я смеюсь.

Теперь, когда я сижу в своей петербургской квартире с темными окнами без занавесок, с черно-серым потолком, немного нависшим в середине, где торчит большой угрюмый крюк, – теперь мне кажется, что ничего этого не было и не могло быть. Или все это я видел во сне? Но то, что случилось потом, ужасное, гадкое, невозможное, из-за чего я умираю, то ведь не сон. И между тем одно зависело от другого.

Было ли все случайно? Или, напротив, нет и не может быть ничего случайного? Не знаю. Мне трудно думать об этом. Пусть решают другие.

В тот же вечер, после второго свидания с Мартой PER , я потушил свечи в своей комнате, отворил окно и сел играть. Я старался вспомнить мотив, который она мне дала. Это был тихий простой мотив из несложных нот. Я не прибавил к нему ни одного лишнего аккорда, ни одной гаммы. Я повторял все одно и то же, и опять сначала, и каждый раз, мне казалось, выходило иначе, лучше, больше напоминало весенний шум и желтые лучи вечерней зари.

Я сам не знаю, что было со мною. Но было что-то хорошее. Я подошел к окну и поглядел вниз, не думая. Потом отворил дверь, спустился по темной лестнице на двор и пошел в сад.

Там было светлее, чем в комнатах; стоял какой-то неясный, мерцающий полумрак. Молодой месяц закатился, светили только звезды.

В конце дорожки тускло белело платье Марты PER . Я так и знал, что она тут и слушала. Она должна была слушать…

– Хорошо, – сказала она шепотом, когда я был близко. – Не говорите громко. Я вас ждала, мне надо сказать вас два слова. Завтра в сад не ходите. А послезавтра, да, послезавтра приходите с закатом, надолго. В тот вечер яблони станут распускаться. Мы можем увидать первый цветок. Первые цветы… Хотите? Придете?

– Да, приду, – сказал я тоже шепотом.

Она кивнула головой, отделилась от изгороди и ушла. Я остался один.

VII
Я встал поздно. Лениво прошел в столовую, лениво не допил своего кофе и, помня приказание, в сад не пошел, а вяло слонялся по комнатам. Приняться за что-нибудь не было силы.

Я хотел пойти к маме, сесть с нею рядом, помолчать; несмотря на туман, в котором я жил последние дни, я беспокоился, мне недоставало чего-то – я редко видел маму. Я ей не хотел ничего рассказывать – ведь она не любит сада, а это только о саде. Но мама была мне нужна, как я сам. Я теперь только понял, что она чувствовала не то, что я, и не так, как я. Но зачем она обманывала меня столько времени? Зачем все сделала, чтобы я не смог без нее жить?

Я сидел за обедом – вялый и бледный, ничего не ел. Вдруг я почувствовал чей-то взгляд на себе и обернулся. Мама смотрела на меня в упор потемневшими глазами, и столько в них было неожиданной злобы и ненависти, что я вздрогнул, и сердце у меня похолодело, хотя я еще ничего не успел подумать и сообразить.

– Да нет, я брежу, это мне показалось, этого не может быть, – мелькнуло у меня в голове в следующую минуту. Но точно большая тяжесть придавила меня, и я сразу уменьшился и съежился и стал чувствовать свое собственное тело, и мои члены стали мне мешать.

Прямо из-за стола я пошел в мамину уборную. Мамы там еще не было, но я стал ждать. Она придет.

Она, действительно, пришла, – не взглянув на меня, села в большое кресло и молчала. Я тоже молчал и страдал невыразимо, потому что эти страдания были какие-то неожиданные, бессмысленные и безнадежные.

– Я все знаю, Володя PER , – сказала она, наконец.

При первых звуках ее голоса мне стало легче. Но слов ее я не понял.

– Ты о чем? – спросил я с усилием.

– Говорю тебе – я все знаю и все поняла. Ты влюблен. Ага! это должно было прийти, говорят. Но я говорю – нет, не должно. Нет, не может! Я в это силы свои положила, и ты не уйдешь!

Я с отчаянием и тупостью смотрел на ее безумие. Я испугался ее злобы, но не жалел ее.

– Да о чем ты, скажи хоть слово! Я не могу понять. Она успокоилась немного и продолжала тише:

– Ты любишь Марфу Кореневу PER . Я знаю, что вы видитесь в саду. Ты ходишь, как безумный. Не желаешь ли жениться на ней? К сожалению, не могу от тебя скрыть, твоя возлюбленная со странностями. Распущена с детства и чудит. Или дурочка, или уж чересчур умна. Берегись! И напрасно ты молчал. Я ведь все знаю.

Мысли перепутались у меня в голове, язык не повиновался. Я люблю Марту PER ? Да быть же не может! Я хочу на ней жениться? Я – жениться? Нет, или кто-нибудь из нас сумасшедший, или все сумасшедшие. Я стал говорить, запинаясь, путаясь, сам себя не понимая. Говорил о саде, о весне, о яблонях, о Марте PER , и что Марта PER для меня – оживший сад, то же, что небо и ветер… Но сейчас же вспоминал, как-то безнадежно, что нельзя этого понять, если не чувствовать…

В душе у меня был только инстинктивный, режущий страх, что я один, что она уходит и ненавидит меня, а я не могу остаться один. Я готов был солгать в эту минуту, если б это чему-нибудь помогло, а я еще никогда не лгал. Я думаю, она увидала, что мне тяжело.

– Ну, хорошо, – перебила она, – ты и сам, кажется, не подозревал, что это так случится. Но помни, Володя PER . Наши отношения не таковы. Я не могла никогда и не могу быть пассивно-нежной матерью. Я тебе жизнь отдала до последней капли – и ты мне всю свою отдай, всю, я к этому шла и не разлучалась с тобой, и сделала тебя сама – для себя. Может быть, это дурно, мне все равно. Это справедливо. Я на самопожертвования не способна. Да и поздно теперь. Теперь – как бы ты ни любил жену, возлюбленную, как бы она тебя ни любила – ты без меня не проживешь!

Она сказала это злорадно и встала. Я подошел к ней, обнял и заглянул в глаза.

– Не мучай меня, – проговорил я. – Ну да, я твой, не могу без тебя. Я никаких жен не хочу. Я никого не люблю. Мне странно, зачем ты… Я сад люблю, я цветы люблю и музыку… Прости мне.

Она обняла меня крепко и сказала:

– Ты должен обещать, что не пойдешь в сад и не увидишь Марту PER . Ты еще не любишь ее, но я чувствую, не говори, я чувствую, что нельзя… Я знаю, ты можешь изменить своему обещанию, мой слабенький мальчик… Завтра только потерпи… Послезавтра утром мы уедем. Хорошо? Завтра! Ведь в этот вечер должны только распуститься яблони.

– Ты молчишь? Тебе не хочется? Она опять сдвинула брови.

Я обещал. Мне было тяжело, я плакал. Я так любил цветы… Но я знал, что смогу для нее. Я верил, хотя не понимал, что нельзя идти…

VIII
С утра начались приготовления к отъезду. Экономка не могла ехать с нами, потому что отец еще был болен. Мама энергично принялась за все сама. Никто не понимал, зачем мы едем и почему так скоро. Я сидел, как мертвый, с полузакрытыми глазами. Солнце подошло к окну, и лучи упали на меня. Я словно испугался, встал и спустил занавеску. Солнце было не мое.

Часы проходили, сердце во мне как-то тупо ныло, тупо и беспрерывно. Я страдал с недоумением, но покоряясь и не рассуждая, не имея силы ни выбирать, ни решать. Все равно, будь что будет.

Но в час заката я хотел пойти к маме, прижаться к ней, закрыть глаза и просидеть так долго без времени.

Я вышел в гостиную, взглянул в окошко. Солнце было уже круглое и большое и касалось одним краем серой горы.

Я пошел, почти побежал в мамину комнату. Там никого не было. Я миновал угловую, – никого. В коридоре я встретил горничную.

– Где барыня? – спросил я, спеша.

– Уехали-с, только сейчас, насчет коляски – завтра утром, а оттуда, велели сказать, что к Полоцким поедут, вернутся поздно; что коли угодно – так, чтобы и вы к Полоцким часов в 9 пожаловали, а коли не так здоровы, то чтобы лечь изволили пораньше…

Я не дослушал горничную. Это было жестоко. Это было не по силам мне. Я – один, теперь, в эту минуту, один со своим обещанием и таким большим желанием еще раз увидеть сад, весну, послушать, что будут говорить яблони… Как всему я покоряюсь без борьбы, всему, что сильнее меня – я покорился и тут неизбежному. Я еще раз посмотрел на солнце, слабо улыбнулся и, не оглядываясь, не останавливаясь, пошел в сад.

IX
Когда я захлопнул за собой калитку и сделал несколько шагов вглубь – я вдруг ожил. Ожил и все забыл. С каждой секундой мне делалось легче и радостнее. Ароматы смешанные, разнородные, разнотонные охватили меня. Я вернулся к друзьям, и мне было стыдно, что я у них давно не был. Незаметно я дошел до конца дорожки.

Марта была тут, уже не за изгородью, а на моей скамейке; она сидела со сложенными на коленях руками и смотрела на меня строго.

– Простите, Марта PER , – сказал я. – Солнце закатилось.

– Нет. Оно еще не за горизонтом. Оно только за горой. Ничего.

Я сел с ней рядом. Она показалась мне бледнее, чем была. Но платье, теперь я уже не мог сомневаться, было не белое, а чуть-чуть розовое.

– Мы будем ждать, – сказала Марта PER . – Они должны сегодня распуститься. Видите месяц на небе? Видите, – белый, как маленькое облачко? Когда он станет светлеть, а небо станет выше – тогда они распустятся.

– Отчего вы такая, Марта PER ? – спросил я. – Вы точно сами с ними.

– А вы разве не такой? И вы такой, и вы также любите, оттого я и рада, что вы со мной, и люблю вас.

– И я люблю вас, Марта PER , – сказал я. – Как сад, как все.

Она повторила: «как все»… и задумалась.

Короткие сумерки пролетели. Месяц сверкнул и бросил робкий, неумелый и неясный свет на дорожку. Сильнее запахло землей и анемонами. Крепкие ветки яблони кинули тень. И точно все, до тех пор безмолвное и неподвижное, зашепталось и зашевелилось. Чуть видный, почти невидный, пар, или дым, скользил по лунному свету. Тени набегали и сбегали с цветов. Небо PER вместе с месяцем становились все выше, все дальше и холоднее.

Мне было страшно и жутко. Я ждал чего-то, весь ушел в это ожидание. Марта не смотрела на меня. Ей было холодно. Она подвинулась ко мне, я бессознательно обнял ее, просто, чтоб быть ближе и вместе ждать.

– Надо спокойнее, спокойнее, – проговорила Марта PER , положив бледную руку на мою. – Мы не должны волноваться. Мы должны так тихо, совсем тихо ждать. Без тишины в душе нельзя быть близкими ей.

Я понял, что она хотела сказать – «природе».

– А мы будем близки, правда, мы будем? – продолжала она торопливо, заглядывая мне в глаза. – И я, и ты, мы оба – с ней вместе…

Никогда больше, никогда сильнее я не чувствовал, что я – «с ней вместе», и что в этом счастье, если это может длиться.

Какой-то новый, неясный запах дошел до нас. Мы оба сразу его услышали и оба вместе поняли через минуту, откуда он.

– Первый цветок распустился, – сказала Марта PER . – Оставь, не смотри на него. Погоди, сейчас другие…

Она говорила шепотом, но торжественно и серьезно, и крепче прижималась ко мне. Я хотел что-то сказать, но она шепнула: «ни слова»… – и посмотрела умоляюще. Я замолчал – и рад был молчать. Мне больше ничего не хотелось, кроме того, что было. Я думаю, это и есть счастье. Весь сад наполнялся новым, сильным ароматом. Месяц никнул и уходил с неба, но яблони не темнели. Они были белые не от лунного света.

Когда прошло время, и все кругом нас стало яснее и холоднее, небо позеленело, и утренние сумерки спустились, – я взглянул близко в лицо Марты PER , Марта PER сидела все в том же положении, прижавшись ко мне. Она подняла глаза и улыбнулась.

Пора PER , – сказала она. – Сейчас будет солнце. Яблони цветут.

Что-то ударило меня в сердце. Я вспомнил. Я побледнел, в груди стало тяжело и холодно. Марта тревожно взглянула.

– Что с тобой?

– Марта. Я стал несчастен… Пожалей меня… Я уезжаю…

– Уезжаешь? – проговорила она медленно, без удивленья. – Так рано? Подожди. Еще есть время. Подожди, пока они начнут осыпаться.

– Не могу, не могу… Я не сам… меня…

– Ах, другие, – сказала она спокойно. – Они всегда мешают, всегда, во всем. Ступай, не будь несчастен. Только я не хотела так рано…

Я с тоской взглянул в ее глаза. Они были широко раскрыты и покойны, только совсем, до краев, полны слезами. Казалось, если она чуть пошевельнет ресницами или переведет взгляд, слезы прольются.

Я встал. Она осталась на скамейке и не смотрела на меня.

– Прощай, Марта LOC , – сказал я.

– Прощай. Ты не забудь…

– Чего?

– Всего. Я не забуду. Мы оба теперь знаем, как нужно жить.

– Марта! Но ведь другие…

– Да, другие! А ты не можешь, ты не сумеешь… Все-таки не забудь.

Я взглянул на нее, на зеленое, совсем светлое, небо, яблони, точно осыпанные снегом, и сказал:

– Не забуду. Прощай.

Она кивнула мне головой. Я ушел.

X
Что случилось дальше – я расскажу коротко и скоро, мне слишком тяжело. Она, мама, сделала все нарочно, чтобы отомстить мне, я знаю. Правда, она сама в эту ночь похудела и осунулась, но я думаю, от сильной ненависти ко мне. Все тут сошлось. Да я и знал, что она не простит. Она не могла простить. Я и не говорил ей ничего. Я был, как мертвый. Если б она велела мне взять револьвер и застрелиться – я бы, молча, взял револьвер и застрелился. Она велела мне уехать одному, сказала, что никогда не увидит меня и не простит. Но я думаю, она чувствовала, что не выдержит и простит, когда увидит, что я не могу жить; поэтому, чтобы не изменить себе, она умерла нарочно. Да, да, я не сомневаюсь, что она это сделала нарочно. Доктора говорят, что у нее был дифтерит, но что ж из этого? Дифтерит мог быть, а все-таки она бы верно не умерла, если б сильно хотела не умереть. Я приехал из Москвы LOC на третий день после смерти. Она уже стала разлагаться. Такой уксусный и страшный запах шел от нее. Я посмотрел ей в лицо и ничего не сказал.

Какой-то господин подошел ко мне, долго жал руку, просил подкрепиться и сказал:

– Да, ваша матушка была удивительная женщина. Как вы должны быть потрясены! У вас были с нею удивительные отношения…

Я неестественно рассмеялся и сказал:

– Да, да, вы правы…

И сам пожал руку господину.

Потом ее похоронили, и я уехал. Зачем бы я там остался? О Марте PER я не спросил, в сад не заходил…

И прошло сколько-то лет. Я не помню теперь хорошо – сколько. Я не помню, как я жил. Я все стал забывать. Порой, впрочем, я вспоминаю ту ночь, когда распускались яблони. Сажусь за рояль и играю маленькую песенку: «ни слова, о друг мой»… Мне делается светлее.

Но это редко; я редко могу вспоминать… И с каждым часом прибавляется тяжесть жизни. Я живу, потому что не имею силы даже умереть. Живу в Петербурге LOC , один, в темной и пропахшей кухней квартире, даю свои ненужные уроки музыки и ненужно возвращаюсь домой. Сколько времени это еще будет продолжаться?

Посредине потолка, в большой комнате, есть крюк… Я уж говорил о нем. Так вот мне приходит мысль: что, если я принесу из передней веревку от чемодана и закину ее на крюк? Ведь никто даже и не узнает, особенно теперь, ночью… Старуха, моя кухарка, спит. И главное, ничего не сделается от того, что я закину веревку на крюк. Ее можно снять и снести обратно в переднюю. Даже если я петлю сделаю – и то ничего ровно не случится, ведь не повешусь же, ведь не должен же я, оттого что сделаю петлю, непременно повеситься? Это так ужасно, так некрасиво… Как я далеко от Марты PER !.. Но разве я в самом деле?.. Нет, нет, я только попробую, никто не узнает, а я попробую…

NER with spaCy#

If you’ve already used the pre-processing notebook for this language, you can skip the steps for installing spaCy and downloading the language model.

Install spaCy#

Russian models are only available starting in spaCy 3.0.

If you run into errors because spaCy 2.x is installed, you can run !pip uninstall spacy -y first, then run the cell below.

!pip install -U spacy

Import Libraries#

We’re going to import spacy and displacy, a special spaCy module for visualization.

import spacy
from spacy import displacy
from collections import Counter
import pandas as pd
pd.options.display.max_rows = 600
pd.options.display.max_colwidth = 400

We’re also going to import the Counter module for counting people, places, and things, and the pandas library for organizing and displaying data (we’re also changing the pandas default max row and column width display setting).

Download Language Model#

Next we need to download the Russian-language model (ru_core_news_md), which will be processing and making predictions about our texts. You can read more about the data sources used to train Russian on the spaCy model page.

!python -m spacy download ru_core_news_md
Collecting ru-core-news-md==3.7.0
  Downloading https://github.com/explosion/spacy-models/releases/download/ru_core_news_md-3.7.0/ru_core_news_md-3.7.0-py3-none-any.whl (41.9 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 41.9/41.9 MB 845.3 kB/s eta 0:00:0000:0100:02
?25hRequirement already satisfied: spacy<3.8.0,>=3.7.0 in /Users/melwalsh/anaconda3/lib/python3.11/site-packages (from ru-core-news-md==3.7.0) (3.7.4)
Collecting pymorphy3>=1.0.0 (from ru-core-news-md==3.7.0)
  Obtaining dependency information for pymorphy3>=1.0.0 from https://files.pythonhosted.org/packages/ee/53/862f7b7f3e488e5420bebd5cf59362cb175463ad3cfddd61ade15a738dc7/pymorphy3-2.0.1-py3-none-any.whl.metadata
  Downloading pymorphy3-2.0.1-py3-none-any.whl.metadata (1.8 kB)
Collecting dawg-python>=0.7.1 (from pymorphy3>=1.0.0->ru-core-news-md==3.7.0)
  Downloading DAWG_Python-0.7.2-py2.py3-none-any.whl (11 kB)
Collecting pymorphy3-dicts-ru (from pymorphy3>=1.0.0->ru-core-news-md==3.7.0)
  Obtaining dependency information for pymorphy3-dicts-ru from https://files.pythonhosted.org/packages/b0/67/469e9e52d046863f5959928794d3067d455a77f580bf4a662630a43eb426/pymorphy3_dicts_ru-2.4.417150.4580142-py2.py3-none-any.whl.metadata
  Downloading pymorphy3_dicts_ru-2.4.417150.4580142-py2.py3-none-any.whl.metadata (2.0 kB)
Requirement already satisfied: spacy-legacy<3.1.0,>=3.0.11 in /Users/melwalsh/anaconda3/lib/python3.11/site-packages (from spacy<3.8.0,>=3.7.0->ru-core-news-md==3.7.0) (3.0.12)
Requirement already satisfied: spacy-loggers<2.0.0,>=1.0.0 in /Users/melwalsh/anaconda3/lib/python3.11/site-packages (from spacy<3.8.0,>=3.7.0->ru-core-news-md==3.7.0) (1.0.5)
Requirement already satisfied: murmurhash<1.1.0,>=0.28.0 in /Users/melwalsh/anaconda3/lib/python3.11/site-packages (from spacy<3.8.0,>=3.7.0->ru-core-news-md==3.7.0) (1.0.10)
Requirement already satisfied: cymem<2.1.0,>=2.0.2 in /Users/melwalsh/anaconda3/lib/python3.11/site-packages (from spacy<3.8.0,>=3.7.0->ru-core-news-md==3.7.0) (2.0.8)
Requirement already satisfied: preshed<3.1.0,>=3.0.2 in /Users/melwalsh/anaconda3/lib/python3.11/site-packages (from spacy<3.8.0,>=3.7.0->ru-core-news-md==3.7.0) (3.0.9)
Requirement already satisfied: thinc<8.3.0,>=8.2.2 in /Users/melwalsh/anaconda3/lib/python3.11/site-packages (from spacy<3.8.0,>=3.7.0->ru-core-news-md==3.7.0) (8.2.3)
Requirement already satisfied: wasabi<1.2.0,>=0.9.1 in /Users/melwalsh/anaconda3/lib/python3.11/site-packages (from spacy<3.8.0,>=3.7.0->ru-core-news-md==3.7.0) (1.1.2)
Requirement already satisfied: srsly<3.0.0,>=2.4.3 in /Users/melwalsh/anaconda3/lib/python3.11/site-packages (from spacy<3.8.0,>=3.7.0->ru-core-news-md==3.7.0) (2.4.8)
Requirement already satisfied: catalogue<2.1.0,>=2.0.6 in /Users/melwalsh/anaconda3/lib/python3.11/site-packages (from spacy<3.8.0,>=3.7.0->ru-core-news-md==3.7.0) (2.0.10)
Requirement already satisfied: weasel<0.4.0,>=0.1.0 in /Users/melwalsh/anaconda3/lib/python3.11/site-packages (from spacy<3.8.0,>=3.7.0->ru-core-news-md==3.7.0) (0.3.4)
Requirement already satisfied: typer<0.10.0,>=0.3.0 in /Users/melwalsh/anaconda3/lib/python3.11/site-packages (from spacy<3.8.0,>=3.7.0->ru-core-news-md==3.7.0) (0.9.0)
Requirement already satisfied: smart-open<7.0.0,>=5.2.1 in /Users/melwalsh/anaconda3/lib/python3.11/site-packages (from spacy<3.8.0,>=3.7.0->ru-core-news-md==3.7.0) (5.2.1)
Requirement already satisfied: tqdm<5.0.0,>=4.38.0 in /Users/melwalsh/anaconda3/lib/python3.11/site-packages (from spacy<3.8.0,>=3.7.0->ru-core-news-md==3.7.0) (4.65.0)
Requirement already satisfied: requests<3.0.0,>=2.13.0 in /Users/melwalsh/anaconda3/lib/python3.11/site-packages (from spacy<3.8.0,>=3.7.0->ru-core-news-md==3.7.0) (2.31.0)
Requirement already satisfied: pydantic!=1.8,!=1.8.1,<3.0.0,>=1.7.4 in /Users/melwalsh/anaconda3/lib/python3.11/site-packages (from spacy<3.8.0,>=3.7.0->ru-core-news-md==3.7.0) (1.10.8)
Requirement already satisfied: jinja2 in /Users/melwalsh/anaconda3/lib/python3.11/site-packages (from spacy<3.8.0,>=3.7.0->ru-core-news-md==3.7.0) (3.1.2)
Requirement already satisfied: setuptools in /Users/melwalsh/anaconda3/lib/python3.11/site-packages (from spacy<3.8.0,>=3.7.0->ru-core-news-md==3.7.0) (68.0.0)
Requirement already satisfied: packaging>=20.0 in /Users/melwalsh/anaconda3/lib/python3.11/site-packages (from spacy<3.8.0,>=3.7.0->ru-core-news-md==3.7.0) (23.1)
Requirement already satisfied: langcodes<4.0.0,>=3.2.0 in /Users/melwalsh/anaconda3/lib/python3.11/site-packages (from spacy<3.8.0,>=3.7.0->ru-core-news-md==3.7.0) (3.3.0)
Requirement already satisfied: numpy>=1.19.0 in /Users/melwalsh/anaconda3/lib/python3.11/site-packages (from spacy<3.8.0,>=3.7.0->ru-core-news-md==3.7.0) (1.24.3)
Requirement already satisfied: typing-extensions>=4.2.0 in /Users/melwalsh/anaconda3/lib/python3.11/site-packages (from pydantic!=1.8,!=1.8.1,<3.0.0,>=1.7.4->spacy<3.8.0,>=3.7.0->ru-core-news-md==3.7.0) (4.7.1)
Requirement already satisfied: charset-normalizer<4,>=2 in /Users/melwalsh/anaconda3/lib/python3.11/site-packages (from requests<3.0.0,>=2.13.0->spacy<3.8.0,>=3.7.0->ru-core-news-md==3.7.0) (2.0.4)
Requirement already satisfied: idna<4,>=2.5 in /Users/melwalsh/anaconda3/lib/python3.11/site-packages (from requests<3.0.0,>=2.13.0->spacy<3.8.0,>=3.7.0->ru-core-news-md==3.7.0) (3.4)
Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/melwalsh/anaconda3/lib/python3.11/site-packages (from requests<3.0.0,>=2.13.0->spacy<3.8.0,>=3.7.0->ru-core-news-md==3.7.0) (1.26.16)
Requirement already satisfied: certifi>=2017.4.17 in /Users/melwalsh/anaconda3/lib/python3.11/site-packages (from requests<3.0.0,>=2.13.0->spacy<3.8.0,>=3.7.0->ru-core-news-md==3.7.0) (2023.11.17)
Requirement already satisfied: blis<0.8.0,>=0.7.8 in /Users/melwalsh/anaconda3/lib/python3.11/site-packages (from thinc<8.3.0,>=8.2.2->spacy<3.8.0,>=3.7.0->ru-core-news-md==3.7.0) (0.7.11)
Requirement already satisfied: confection<1.0.0,>=0.0.1 in /Users/melwalsh/anaconda3/lib/python3.11/site-packages (from thinc<8.3.0,>=8.2.2->spacy<3.8.0,>=3.7.0->ru-core-news-md==3.7.0) (0.1.4)
Requirement already satisfied: click<9.0.0,>=7.1.1 in /Users/melwalsh/anaconda3/lib/python3.11/site-packages (from typer<0.10.0,>=0.3.0->spacy<3.8.0,>=3.7.0->ru-core-news-md==3.7.0) (8.0.4)
Requirement already satisfied: cloudpathlib<0.17.0,>=0.7.0 in /Users/melwalsh/anaconda3/lib/python3.11/site-packages (from weasel<0.4.0,>=0.1.0->spacy<3.8.0,>=3.7.0->ru-core-news-md==3.7.0) (0.16.0)
Requirement already satisfied: MarkupSafe>=2.0 in /Users/melwalsh/anaconda3/lib/python3.11/site-packages (from jinja2->spacy<3.8.0,>=3.7.0->ru-core-news-md==3.7.0) (2.1.1)
Downloading pymorphy3-2.0.1-py3-none-any.whl (53 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 53.2/53.2 kB 1.4 MB/s eta 0:00:00
?25hDownloading pymorphy3_dicts_ru-2.4.417150.4580142-py2.py3-none-any.whl (8.4 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.4/8.4 MB 820.4 kB/s eta 0:00:0000:0100:01
?25hInstalling collected packages: pymorphy3-dicts-ru, dawg-python, pymorphy3, ru-core-news-md
Successfully installed dawg-python-0.7.2 pymorphy3-2.0.1 pymorphy3-dicts-ru-2.4.417150.4580142 ru-core-news-md-3.7.0
✔ Download and installation successful
You can now load the package via spacy.load('ru_core_news_md')

Load Language Model#

Once the model is downloaded, we need to load it. There are two ways to load a spaCy language model.

1. We can import the model as a module and then load it from the module.

import ru_core_news_md
nlp = ru_core_news_md.load()

2. We can load the model by name.

#nlp = spacy.load('ru_core_news_md')

If you just downloaded the model for the first time, it’s advisable to use Option 1. Then you can use the model immediately. Otherwise, you’ll likely need to restart your Jupyter kernel (which you can do by clicking Kernel -> Restart Kernel… in the Jupyter Lab menu).

Process Document#

We first need to process our document with the loaded NLP model. Most of the heavy NLP lifting is done in this line of code.

After processing, the document object will contain tons of juicy language data — named entities, sentence boundaries, parts of speech — and the rest of our work will be devoted to accessing this information.

In the cell below, we open and the example document. Then we runnlp() on the text and create our document.

filepath = '../texts/ru.txt'
text = open(filepath, encoding='utf-8').read()
document = nlp(text)

Get Named Entities#

All the named entities in our document can be found in the document.ents property. If we check out document.ents, we can see all the entities from the example document.

document.ents
(Петербурге,
 Петербурге,
 Володя,
 Москву,
 Володя,
 Сыромятников,
 Маремьянов,
 Москву,
 экономка,
 Москве,
 Малой Никитской,
 Володя,
 Москве,
 Листьев,
 Коренева,
 Коренева,
 Кореневой,
 Марфа,
 Марта,
 Марта,
 Володя,
 Марта,
 Марты,
 Марта,
 Марта,
 Голос,
 Марта,
 Мартой,
 Марты,
 Володя,
 Марфу Кореневу,
 Марту,
 Марте,
 Марта,
 Володя,
 Марту,
 Марта,
 Марта,
 Марта,
 Марта,
 Небо,
 Марта,
 Марта,
 Марты,
 Марта,
 Пора,
 Марта,
 Москвы,
 Марте,
 Петербурге,
 Марты)

Each of the named entities in document.ents contains more information about itself, which we can access by iterating through the document.ents with a simple for loop.

For each named_entity in document.ents, we will extract the named_entity and its corresponding named_entity.label_.

for named_entity in document.ents:
    print(named_entity, named_entity.label_)
Петербурге LOC
Петербурге LOC
Володя PER
Москву LOC
Володя PER
Сыромятников PER
Маремьянов PER
Москву LOC
экономка PER
Москве LOC
Малой Никитской LOC
Володя PER
Москве LOC
Листьев PER
Коренева PER
Коренева PER
Кореневой PER
Марфа PER
Марта PER
Марта PER
Володя PER
Марта PER
Марты PER
Марта PER
Марта PER
Голос PER
Марта PER
Мартой PER
Марты PER
Володя PER
Марфу Кореневу PER
Марту PER
Марте PER
Марта PER
Володя PER
Марту PER
Марта PER
Марта PER
Марта PER
Марта PER
Небо PER
Марта PER
Марта PER
Марты PER
Марта PER
Пора PER
Марта LOC
Москвы LOC
Марте PER
Петербурге LOC
Марты PER

To extract just the named entities that have been identified as PER (person), we can add a simple if statement into the mix:

for named_entity in document.ents:
    if named_entity.label_ == "PER":
        print(named_entity)
Володя
Володя
Сыромятников
Маремьянов
экономка
Володя
Листьев
Коренева
Коренева
Кореневой
Марфа
Марта
Марта
Володя
Марта
Марты
Марта
Марта
Голос
Марта
Мартой
Марты
Володя
Марфу Кореневу
Марту
Марте
Марта
Володя
Марту
Марта
Марта
Марта
Марта
Небо
Марта
Марта
Марты
Марта
Пора
Марте
Марты

NER with Long Texts or Many Texts#

import math
number_of_chunks = 80

chunk_size = math.ceil(len(text) / number_of_chunks)

text_chunks = []

for number in range(0, len(text), chunk_size):
    text_chunk = text[number:number+chunk_size]
    text_chunks.append(text_chunk)
chunked_documents = list(nlp.pipe(text_chunks))

Get People#

To extract and count the people, we will use an if statement that will pull out words only if their “ent” label matches “PER.”

people = []

for document in chunked_documents:
    for named_entity in document.ents:
        if named_entity.label_ == "PER":
            people.append(named_entity.text)

people_tally = Counter(people)

df = pd.DataFrame(people_tally.most_common(), columns=['character', 'count'])
df
character count
0 Марта 13
1 Володя 6
2 Марты 4
3 Коренева 2
4 Марту 2
5 Марте 2
6 Сыромятников 1
7 Маремьянов 1
8 экономка 1
9 Листьев 1
10 Кореневой 1
11 Марфа 1
12 Голос 1
13 Мартой 1
14 Марфу Кореневу 1
15 Полоцк 1
16 Небо 1
17 Пора 1

Get Places#

To extract and count places, we can follow the same model as above, except we will change our if statement to check for “ent” labels that match “LOC.”

places = []
for document in chunked_documents:
    for named_entity in document.ents:
        if named_entity.label_ == "LOC":
            places.append(named_entity.text)

places_tally = Counter(places)

df = pd.DataFrame(places_tally.most_common(), columns=['place', 'count'])
df
place count
0 Петербурге 3
1 Москву 2
2 Москве 2
3 Малой Никитской 1
4 Марта 1
5 Москвы 1

Get NER in Context#

Hide code cell source
from IPython.display import Markdown, display
import re

def get_ner_in_context(keyword, document, desired_ner_labels= False):
    
    if desired_ner_labels != False:
        desired_ner_labels = desired_ner_labels
    else:
        # all possible labels
        desired_ner_labels = list(nlp.get_pipe('ner').labels) 
        
    #Iterate through all the sentences in the document and pull out the text of each sentence
    for sentence in document.sents:
        #process each sentence
        sentence_doc = nlp(sentence.text)
        for named_entity in sentence_doc.ents:
            #Check to see if the keyword is in the sentence (and ignore capitalization by making both lowercase)
            if keyword.lower() in named_entity.text.lower()  and named_entity.label_ in desired_ner_labels:
                #Use the regex library to replace linebreaks and to make the keyword bolded, again ignoring capitalization
                #sentence_text = sentence.text
            
                sentence_text = re.sub('\n', ' ', sentence.text)
                sentence_text = re.sub(f"{named_entity.text}", f"**{named_entity.text}**", sentence_text, flags=re.IGNORECASE)

                print('---')
                display(Markdown(f"**{named_entity.label_}**"))
                display(Markdown(sentence_text))
for document in chunked_documents:
    get_ner_in_context('Марта', document)
---

PER

– Да, так вы удивились, что я Марта.

---

PER

Я не мог убедить себя, что Марта – барышня, а я ей говорю комплименты.

---

PER

Не успел я сесть на свою скамейку и опомниться, как сейчас же, сию минуту я услышал знакомый шорох, Марта подошла к изгороди и сказала: – Здравствуйте.

---

PER

– А я знаю, где сегодня спрячется солнце, – сказала Марта.

---

PER

Я вспомнил, как и мне в эти дни звук рояля казался резким. – Только… – продолжала Марта, – вы не сердитесь, но часто вы играете такое составное, из многих разных нот, а всего-то нет.

---

PER

Я вдруг вспомнил, что не видал ее улыбки. – Вы никогда не смеетесь, Марта? – спросил я. – Солнце заходит, – серьезно ответила она.

---

PER

не, о яблонях, о Марте, и что Марта для меня – оживший сад, то же, что небо и ветер…

---

PER

– Простите, Марта, – сказал я.

---

PER

Но платье, теперь я уже не мог сомневаться, было не белое, а чуть-чуть розовое. – Мы будем ждать, – сказала Марта.

---

PER

нет светлеть, а небо станет выше – тогда они распустятся. – Отчего вы такая, Марта? – спросил я.

---

PER

– И я люблю вас, Марта, – сказал я.

---

PER

– Надо спокойнее, спокойнее, – проговорила Марта, положив бледную руку на мою.

---

PER

– Первый цветок распустился, – сказала Марта.

---

PER

Когда прошло время, и все кругом нас стало яснее и холоднее, небо позеленело, и утренние сумерки спустились, – я взглянул близко в лицо Марты, Марта сидела все в том же положении, прижавшись ко мне.

---

LOC

Она осталась на скамейке и не смотрела на меня. – Прощай, Марта, – сказал я. – Прощай.