natasha


Namenatasha JSON
Version 1.6.0 PyPI version JSON
download
home_pagehttps://github.com/natasha/natasha
SummaryNamed-entity recognition for russian language
upload_time2023-07-24 10:09:05
maintainer
docs_urlNone
authorNatasha contributors
requires_python
licenseMIT
keywords natural language processing russian
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            
<img src="https://github.com/natasha/natasha-logos/blob/master/natasha.svg">

![CI](https://github.com/natasha/yargy/actions/workflows/test.yml/badge.svg)

Natasha solves basic NLP tasks for Russian language: tokenization, sentence segmentation, word embedding, morphology tagging, lemmatization, phrase normalization, syntax parsing, NER tagging, fact extraction. Quality on every task is similar or better then current SOTAs for Russian language on news articles, see <a href="https://github.com/natasha/natasha#evaluation">evaluation section</a>. Natasha is not a research project, underlying technologies are built for production. We pay attention to model size, RAM usage and performance. Models run on CPU, use Numpy for inference.

Natasha integrates libraries from <a href="https://github.com/natasha">Natasha project</a> under one convenient API:

* <a href="https://github.com/natasha/razdel">Razdel</a> — token, sentence segmentation for Russian
* <a href="https://github.com/natasha/navec">Navec</a> — compact Russian embeddings
* <a href="https://github.com/natasha/slovnet">Slovnet</a> — modern deep-learning techniques for Russian NLP, compact models for Russian morphology, syntax, NER.
* <a href="https://github.com/natasha/yargy">Yargy</a> — rule-based fact extraction similar to Tomita parser.
* <a href="https://github.com/natasha/ipymarkup">Ipymarkup</a> — NLP visualizations for NER and syntax markups.

> ⚠ API may change, for realworld tasks consider using low level libraries from Natasha project.
> Models optimized for news articles, quality on other domain may be lower.
> To use old `NamesExtractor`, `AddressExtactor` downgrade `pip install natasha<1 yargy<0.13`

## Install

Natasha supports Python 3.7+ and PyPy3:

```bash
$ pip install natasha
```

## Usage

Import, initialize modules, build `Doc` object.

```python
>>> from natasha import (
    Segmenter,
    MorphVocab,
    
    NewsEmbedding,
    NewsMorphTagger,
    NewsSyntaxParser,
    NewsNERTagger,
    
    PER,
    NamesExtractor,

    Doc
)


>>> segmenter = Segmenter()
>>> morph_vocab = MorphVocab()

>>> emb = NewsEmbedding()
>>> morph_tagger = NewsMorphTagger(emb)
>>> syntax_parser = NewsSyntaxParser(emb)
>>> ner_tagger = NewsNERTagger(emb)

>>> names_extractor = NamesExtractor(morph_vocab)

>>> text = 'Посол Израиля на Украине Йоэль Лион признался, что пришел в шок, узнав о решении властей Львовской области объявить 2019 год годом лидера запрещенной в России Организации украинских националистов (ОУН) Степана Бандеры. Свое заявление он разместил в Twitter. «Я не могу понять, как прославление тех, кто непосредственно принимал участие в ужасных антисемитских преступлениях, помогает бороться с антисемитизмом и ксенофобией. Украина не должна забывать о преступлениях, совершенных против украинских евреев, и никоим образом не отмечать их через почитание их исполнителей», — написал дипломат. 11 декабря Львовский областной совет принял решение провозгласить 2019 год в регионе годом Степана Бандеры в связи с празднованием 110-летия со дня рождения лидера ОУН (Бандера родился 1 января 1909 года). В июле аналогичное решение принял Житомирский областной совет. В начале месяца с предложением к президенту страны Петру Порошенко вернуть Бандере звание Героя Украины обратились депутаты Верховной Рады. Парламентарии уверены, что признание Бандеры национальным героем поможет в борьбе с подрывной деятельностью против Украины в информационном поле, а также остановит «распространение мифов, созданных российской пропагандой». Степан Бандера (1909-1959) был одним из лидеров Организации украинских националистов, выступающей за создание независимого государства на территориях с украиноязычным населением. В 2010 году в период президентства Виктора Ющенко Бандера был посмертно признан Героем Украины, однако впоследствии это решение было отменено судом. '
>>> doc = Doc(text)
```

### Segmentation

Split text into tokens and sentencies. Defines `tokens` and `sents` properties of `doc`. Uses <a href="https://github.com/natasha/razdel">Razdel</a> internally.

```python
>>> doc.segment(segmenter)
>>> print(doc.tokens[:5])
>>> print(doc.sents[:5])
[DocToken(stop=5, text='Посол'),
 DocToken(start=6, stop=13, text='Израиля'),
 DocToken(start=14, stop=16, text='на'),
 DocToken(start=17, stop=24, text='Украине'),
 DocToken(start=25, stop=30, text='Йоэль')]
[DocSent(stop=218, text='Посол Израиля на Украине Йоэль Лион признался, чт..., tokens=[...]),
 DocSent(start=219, stop=257, text='Свое заявление он разместил в Twitter.', tokens=[...]),
 DocSent(start=258, stop=424, text='«Я не могу понять, как прославление тех, кто непо..., tokens=[...]),
 DocSent(start=425, stop=592, text='Украина не должна забывать о преступлениях, совер..., tokens=[...]),
 DocSent(start=593, stop=798, text='11 декабря Львовский областной совет принял решен..., tokens=[...])]
```

### Morphology

For every token extract rich morphology tags. Depends on <a href="#Segmentation">segmentation</a> step. Defines `pos` and `feats` properties of `doc.tokens`. Uses <a href="https://github.com/natasha/slovnet#morphology">Slovnet morphology model</a> internally.

Call `morph.print()` to visualize morphology markup.

```python
>>> doc.tag_morph(morph_tagger)
>>> print(doc.tokens[:5])
>>> doc.sents[0].morph.print()
[DocToken(stop=5, text='Посол', pos='NOUN', feats=<Anim,Nom,Masc,Sing>),
 DocToken(start=6, stop=13, text='Израиля', pos='PROPN', feats=<Inan,Gen,Masc,Sing>),
 DocToken(start=14, stop=16, text='на', pos='ADP'),
 DocToken(start=17, stop=24, text='Украине', pos='PROPN', feats=<Inan,Loc,Fem,Sing>),
 DocToken(start=25, stop=30, text='Йоэль', pos='PROPN', feats=<Anim,Nom,Masc,Sing>)]
               Посол NOUN|Animacy=Anim|Case=Nom|Gender=Masc|Number=Sing
             Израиля PROPN|Animacy=Inan|Case=Gen|Gender=Masc|Number=Sing
                  на ADP
             Украине PROPN|Animacy=Inan|Case=Loc|Gender=Fem|Number=Sing
               Йоэль PROPN|Animacy=Anim|Case=Nom|Gender=Masc|Number=Sing
                Лион PROPN|Animacy=Anim|Case=Nom|Gender=Masc|Number=Sing
           признался VERB|Aspect=Perf|Gender=Masc|Mood=Ind|Number=Sing|Tense=Past|VerbForm=Fin|Voice=Mid
                   , PUNCT
                 что SCONJ
...
```

### Lemmatization

Lemmatize every token. Depends on <a href="#Morphology">morphology</a> step. Defines `lemma` property of `doc.tokens`. Uses <a href="https://pymorphy2.readthedocs.io/en/stable/">Pymorphy</a> internally.

```python
>>> for token in doc.tokens:
>>>     token.lemmatize(morph_vocab)
    
>>> print(doc.tokens[:5])
>>> {_.text: _.lemma for _ in doc.tokens}
[DocToken(stop=5, text='Посол', pos='NOUN', feats=<Anim,Nom,Masc,Sing>, lemma='посол'),
 DocToken(start=6, stop=13, text='Израиля', pos='PROPN', feats=<Inan,Gen,Masc,Sing>, lemma='израиль'),
 DocToken(start=14, stop=16, text='на', pos='ADP', lemma='на'),
 DocToken(start=17, stop=24, text='Украине', pos='PROPN', feats=<Inan,Loc,Fem,Sing>, lemma='украина'),
 DocToken(start=25, stop=30, text='Йоэль', pos='PROPN', feats=<Anim,Nom,Masc,Sing>, lemma='йоэль')]
{'Посол': 'посол',
 'Израиля': 'израиль',
 'на': 'на',
 'Украине': 'украина',
 'Йоэль': 'йоэль',
 'Лион': 'лион',
 'признался': 'признаться',
 ',': ',',
 'что': 'что',
 'пришел': 'прийти',
 'в': 'в',
 'шок': 'шок',
 'узнав': 'узнать',
 'о': 'о',
...
```

### Syntax

For every sentence run syntax analyzer. Depends on <a href="#Segmentation">segmentation</a> step. Defines `id`, `head_id`, `rel` properties of `doc.tokens`. Uses <a href="https://github.com/natasha/slovnet#syntax">Slovnet syntax model</a> internally. 

Use `syntax.print()` to visualize syntax markup. Uses <a href="https://github.com/natasha/ipymarkup">Ipymarkup</a> internally.

```python
>>> doc.parse_syntax(syntax_parser)
>>> print(doc.tokens[:5])
>>> doc.sents[0].syntax.print()
[DocToken(stop=5, text='Посол', id='1_1', head_id='1_7', rel='nsubj', pos='NOUN', feats=<Anim,Nom,Masc,Sing>),
 DocToken(start=6, stop=13, text='Израиля', id='1_2', head_id='1_1', rel='nmod', pos='PROPN', feats=<Inan,Gen,Masc,Sing>),
 DocToken(start=14, stop=16, text='на', id='1_3', head_id='1_4', rel='case', pos='ADP'),
 DocToken(start=17, stop=24, text='Украине', id='1_4', head_id='1_1', rel='nmod', pos='PROPN', feats=<Inan,Loc,Fem,Sing>),
 DocToken(start=25, stop=30, text='Йоэль', id='1_5', head_id='1_1', rel='appos', pos='PROPN', feats=<Anim,Nom,Masc,Sing>)]
        ┌──► Посол         nsubj
        │    Израиля       
        │ ┌► на            case
        │ └─ Украине       
        │ ┌─ Йоэль         
        │ └► Лион          flat:name
┌─────┌─└─── признался     
│     │ ┌──► ,             punct
│     │ │ ┌► что           mark
│     └►└─└─ пришел        ccomp
│     │   ┌► в             case
│     └──►└─ шок           obl
│         ┌► ,             punct
│ ┌────►┌─└─ узнав         advcl
│ │     │ ┌► о             case
│ │ ┌───└►└─ решении       obl
│ │ │ ┌─└──► властей       nmod
│ │ │ │   ┌► Львовской     amod
│ │ │ └──►└─ области       nmod
│ └─└►┌─┌─── объявить      nmod
│     │ │ ┌► 2019          amod
│     │ └►└─ год           obj
│     └──►┌─ годом         obl
│   ┌─────└► лидера        nmod
│   │ ┌►┌─── запрещенной   acl
│   │ │ │ ┌► в             case
│   │ │ └►└─ России        obl
│ ┌─└►└─┌─── Организации   nmod
│ │     │ ┌► украинских    amod
│ │   ┌─└►└─ националистов nmod
│ │   │   ┌► (             punct
│ │   └►┌─└─ ОУН           parataxis
│ │     └──► )             punct
│ └──────►┌─ Степана       appos
│         └► Бандеры       flat:name
└──────────► .             punct
...
```

### NER

Extract standart named entities: names, locations, organizations. Depends on <a href="#Segmentation">segmentation</a> step. Defines `spans` property of `doc`. Uses <a href="https://github.com/natasha/slovnet#ner">Slovnet NER model</a> internally. 

Call `ner.print()` to visualize NER markup. Uses <a href="https://github.com/natasha/ipymarkup">Ipymarkup</a> internally.

```python
>>> doc.tag_ner(ner_tagger)
>>> print(doc.spans[:5])
>>> doc.ner.print()
[DocSpan(start=6, stop=13, type='LOC', text='Израиля', tokens=[...]),
 DocSpan(start=17, stop=24, type='LOC', text='Украине', tokens=[...]),
 DocSpan(start=25, stop=35, type='PER', text='Йоэль Лион', tokens=[...]),
 DocSpan(start=89, stop=106, type='LOC', text='Львовской области', tokens=[...]),
 DocSpan(start=152, stop=158, type='LOC', text='России', tokens=[...])]
Посол Израиля на Украине Йоэль Лион признался, что пришел в шок, узнав
      LOC────    LOC──── PER───────                                   
 о решении властей Львовской области объявить 2019 год годом лидера 
                   LOC──────────────                                
запрещенной в России Организации украинских националистов (ОУН) 
              LOC─── ORG─────────────────────────────────────── 
Степана Бандеры. Свое заявление он разместил в Twitter. «Я не могу 
PER────────────                                ORG────             
понять, как прославление тех, кто непосредственно принимал участие в 
ужасных антисемитских преступлениях, помогает бороться с 
антисемитизмом и ксенофобией. Украина не должна забывать о 
                              LOC────                      
преступлениях, совершенных против украинских евреев, и никоим образом 
не отмечать их через почитание их исполнителей», — написал дипломат. 
11 декабря Львовский областной совет принял решение провозгласить 2019
           ORG──────────────────────                                  
 год в регионе годом Степана Бандеры в связи с празднованием 110-летия
                     PER────────────                                  
 со дня рождения лидера ОУН (Бандера родился 1 января 1909 года). В 
                        ORG                                         
июле аналогичное решение принял Житомирский областной совет. В начале 
                                ORG────────────────────────           
месяца с предложением к президенту страны Петру Порошенко вернуть 
                                          PER────────────         
Бандере звание Героя Украины обратились депутаты Верховной Рады. 
PER────              LOC────                     ORG───────────  
Парламентарии уверены, что признание Бандеры национальным героем 
                                     PER────                     
поможет в борьбе с подрывной деятельностью против Украины в 
                                                  LOC────   
информационном поле, а также остановит «распространение мифов, 
созданных российской пропагандой». Степан Бандера (1909-1959) был 
                                   PER───────────                 
одним из лидеров Организации украинских националистов, выступающей за 
                 ORG─────────────────────────────────                 
создание независимого государства на территориях с украиноязычным 
населением. В 2010 году в период президентства Виктора Ющенко Бандера 
                                               PER─────────── PER──── 
был посмертно признан Героем Украины, однако впоследствии это решение 
                             LOC────                                  
было отменено судом. 
```

### Named entity normalization

For every NER span apply normalization procedure. Depends on <a href="#NER">NER</a>, <a href="#Morphology">morphology</a> and <a href="#Syntax">syntax</a> steps. Defines `normal` property of `doc.spans`.

One can not just lemmatize every token inside entity span, otherwise "Организации украинских националистов" would become "Организация украинские националисты". Natasha uses syntax dependencies to produce correct "Организация украинских националистов".

```python
>>> for span in doc.spans:
>>>    span.normalize(morph_vocab)
>>> print(doc.spans[:5])
>>> {_.text: _.normal for _ in doc.spans if _.text != _.normal}
[DocSpan(start=6, stop=13, type='LOC', text='Израиля', tokens=[...], normal='Израиль'),
 DocSpan(start=17, stop=24, type='LOC', text='Украине', tokens=[...], normal='Украина'),
 DocSpan(start=25, stop=35, type='PER', text='Йоэль Лион', tokens=[...], normal='Йоэль Лион'),
 DocSpan(start=89, stop=106, type='LOC', text='Львовской области', tokens=[...], normal='Львовская область'),
 DocSpan(start=152, stop=158, type='LOC', text='России', tokens=[...], normal='Россия')]
{'Израиля': 'Израиль',
 'Украине': 'Украина',
 'Львовской области': 'Львовская область',
 'России': 'Россия',
 'Организации украинских националистов (ОУН)': 'Организация украинских националистов (ОУН)',
 'Степана Бандеры': 'Степан Бандера',
 'Петру Порошенко': 'Петр Порошенко',
 'Бандере': 'Бандера',
 'Украины': 'Украина',
 'Верховной Рады': 'Верховная Рада',
 'Бандеры': 'Бандера',
 'Организации украинских националистов': 'Организация украинских националистов',
 'Виктора Ющенко': 'Виктор Ющенко'}
```

### Named entity parsing

Parse `PER` named entities into firstname, surname and patronymic. Depends on <a href="#NER">NER</a> step. Defines `fact` property of `doc.spans`. Uses <a href="https://github.com/natasha/yargy">Yargy-parser</a> internally.

Natasha also has built in extractors for <a href="https://nbviewer.jupyter.org/github/natasha/natasha/blob/master/docs.ipynb#DatesExtractor">dates</a>, <a href="https://nbviewer.jupyter.org/github/natasha/natasha/blob/master/docs.ipynb#MoneyExtractor">money</a>, <a href="https://nbviewer.jupyter.org/github/natasha/natasha/blob/master/docs.ipynb#AddrExtractor">address</a>.

```python
>>> for span in doc.spans:
>>>    if span.type == PER:
>>>        span.extract_fact(names_extractor)

>>> print(doc.spans[:5])
>>> {_.normal: _.fact.as_dict for _ in doc.spans if _.type == PER}
[DocSpan(start=6, stop=13, type='LOC', text='Израиля', tokens=[...], normal='Израиль'),
 DocSpan(start=17, stop=24, type='LOC', text='Украине', tokens=[...], normal='Украина'),
 DocSpan(start=25, stop=35, type='PER', text='Йоэль Лион', tokens=[...], normal='Йоэль Лион', fact=DocFact(slots=[...])),
 DocSpan(start=89, stop=106, type='LOC', text='Львовской области', tokens=[...], normal='Львовская область'),
 DocSpan(start=152, stop=158, type='LOC', text='России', tokens=[...], normal='Россия')]
{'Йоэль Лион': {'first': 'Йоэль', 'last': 'Лион'},
 'Степан Бандера': {'first': 'Степан', 'last': 'Бандера'},
 'Петр Порошенко': {'first': 'Петр', 'last': 'Порошенко'},
 'Бандера': {'last': 'Бандера'},
 'Виктор Ющенко': {'first': 'Виктор', 'last': 'Ющенко'}}
```

## Documentation

* <a href="http://nbviewer.jupyter.org/github/natasha/natasha/blob/master/docs.ipynb">Examples with description + reference</a>
* <a href="https://habr.com/ru/post/516098/#natasha">Natasha section in longread on Natasha project</a> (in Russian) 
* <a href="https://youtu.be/-7XT_U6hVvk?t=951">Natasha section of Datafest 2020 talk</a> (in Russian)

## Evaluation

* Segmentation — <a href="https://github.com/natasha/razdel#quality-performance">Razdel evalualtion section</a>
* Embedding — <a href="https://github.com/natasha/navec#evaluation">Navec evalualtion section</a>
* Morphology — <a href="https://github.com/natasha/slovnet#morphology-1">Slovnet Morph evaluation section</a>
* Syntax — <a href="https://github.com/natasha/slovnet#syntax-1">Slovnet Syntax evaluation section</a>
* NER — <a href="https://github.com/natasha/slovnet#ner-1">Slovnet NER evaluation section</a>

## Support

- Chat — https://t.me/natural_language_processing
- Issues — https://github.com/natasha/natasha/issues
- Commercial support — https://lab.alexkuk.ru

## Development

Dev env

```bash
python -m venv ~/.venvs/natasha-natasha
source ~/.venvs/natasha-natasha/bin/activate

pip install -r requirements/dev.txt
pip install -e .

python -m ipykernel install --user --name natasha-natasha
```

Test

```bash
make test
```

Docs

```bash
make exec-docs
```

Release

```bash
# Update setup.py version

git commit -am 'Up version'
git tag v1.6.0

git push
git push --tags

# Github Action builds dist and publishes to PyPi
```

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/natasha/natasha",
    "name": "natasha",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "",
    "maintainer_email": "",
    "keywords": "natural language processing,russian",
    "author": "Natasha contributors",
    "author_email": "d.a.veselov@yandex.ru, alex@alexkuk.ru",
    "download_url": "https://files.pythonhosted.org/packages/eb/2a/c20ab35487e64cb25ec60e174aabc11bfc9d00d7f3955fd0dc7a5ffd8be7/natasha-1.6.0.tar.gz",
    "platform": null,
    "description": "\n<img src=\"https://github.com/natasha/natasha-logos/blob/master/natasha.svg\">\n\n![CI](https://github.com/natasha/yargy/actions/workflows/test.yml/badge.svg)\n\nNatasha solves basic NLP tasks for Russian language: tokenization, sentence segmentation, word embedding, morphology tagging, lemmatization, phrase normalization, syntax parsing, NER tagging, fact extraction. Quality on every task is similar or better then current SOTAs for Russian language on news articles, see <a href=\"https://github.com/natasha/natasha#evaluation\">evaluation section</a>. Natasha is not a research project, underlying technologies are built for production. We pay attention to model size, RAM usage and performance. Models run on CPU, use Numpy for inference.\n\nNatasha integrates libraries from <a href=\"https://github.com/natasha\">Natasha project</a> under one convenient API:\n\n* <a href=\"https://github.com/natasha/razdel\">Razdel</a> \u2014 token, sentence segmentation for Russian\n* <a href=\"https://github.com/natasha/navec\">Navec</a> \u2014 compact Russian embeddings\n* <a href=\"https://github.com/natasha/slovnet\">Slovnet</a> \u2014 modern deep-learning techniques for Russian NLP, compact models for Russian morphology, syntax, NER.\n* <a href=\"https://github.com/natasha/yargy\">Yargy</a> \u2014 rule-based fact extraction similar to Tomita parser.\n* <a href=\"https://github.com/natasha/ipymarkup\">Ipymarkup</a> \u2014 NLP visualizations for NER and syntax markups.\n\n> \u26a0 API may change, for realworld tasks consider using low level libraries from Natasha project.\n> Models optimized for news articles, quality on other domain may be lower.\n> To use old `NamesExtractor`, `AddressExtactor` downgrade `pip install natasha<1 yargy<0.13`\n\n## Install\n\nNatasha supports Python 3.7+ and PyPy3:\n\n```bash\n$ pip install natasha\n```\n\n## Usage\n\nImport, initialize modules, build `Doc` object.\n\n```python\n>>> from natasha import (\n    Segmenter,\n    MorphVocab,\n    \n    NewsEmbedding,\n    NewsMorphTagger,\n    NewsSyntaxParser,\n    NewsNERTagger,\n    \n    PER,\n    NamesExtractor,\n\n    Doc\n)\n\n\n>>> segmenter = Segmenter()\n>>> morph_vocab = MorphVocab()\n\n>>> emb = NewsEmbedding()\n>>> morph_tagger = NewsMorphTagger(emb)\n>>> syntax_parser = NewsSyntaxParser(emb)\n>>> ner_tagger = NewsNERTagger(emb)\n\n>>> names_extractor = NamesExtractor(morph_vocab)\n\n>>> text = '\u041f\u043e\u0441\u043e\u043b \u0418\u0437\u0440\u0430\u0438\u043b\u044f \u043d\u0430 \u0423\u043a\u0440\u0430\u0438\u043d\u0435 \u0419\u043e\u044d\u043b\u044c \u041b\u0438\u043e\u043d \u043f\u0440\u0438\u0437\u043d\u0430\u043b\u0441\u044f, \u0447\u0442\u043e \u043f\u0440\u0438\u0448\u0435\u043b \u0432 \u0448\u043e\u043a, \u0443\u0437\u043d\u0430\u0432 \u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u0432\u043b\u0430\u0441\u0442\u0435\u0439 \u041b\u044c\u0432\u043e\u0432\u0441\u043a\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c 2019 \u0433\u043e\u0434 \u0433\u043e\u0434\u043e\u043c \u043b\u0438\u0434\u0435\u0440\u0430 \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043d\u043e\u0439 \u0432 \u0420\u043e\u0441\u0441\u0438\u0438 \u041e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0443\u043a\u0440\u0430\u0438\u043d\u0441\u043a\u0438\u0445 \u043d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u0438\u0441\u0442\u043e\u0432 (\u041e\u0423\u041d) \u0421\u0442\u0435\u043f\u0430\u043d\u0430 \u0411\u0430\u043d\u0434\u0435\u0440\u044b. \u0421\u0432\u043e\u0435 \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u043d \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u043b \u0432 Twitter. \u00ab\u042f \u043d\u0435 \u043c\u043e\u0433\u0443 \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a \u043f\u0440\u043e\u0441\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0435\u0445, \u043a\u0442\u043e \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0432 \u0443\u0436\u0430\u0441\u043d\u044b\u0445 \u0430\u043d\u0442\u0438\u0441\u0435\u043c\u0438\u0442\u0441\u043a\u0438\u0445 \u043f\u0440\u0435\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f\u0445, \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0431\u043e\u0440\u043e\u0442\u044c\u0441\u044f \u0441 \u0430\u043d\u0442\u0438\u0441\u0435\u043c\u0438\u0442\u0438\u0437\u043c\u043e\u043c \u0438 \u043a\u0441\u0435\u043d\u043e\u0444\u043e\u0431\u0438\u0435\u0439. \u0423\u043a\u0440\u0430\u0438\u043d\u0430 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u0437\u0430\u0431\u044b\u0432\u0430\u0442\u044c \u043e \u043f\u0440\u0435\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f\u0445, \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0442\u0438\u0432 \u0443\u043a\u0440\u0430\u0438\u043d\u0441\u043a\u0438\u0445 \u0435\u0432\u0440\u0435\u0435\u0432, \u0438 \u043d\u0438\u043a\u043e\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043d\u0435 \u043e\u0442\u043c\u0435\u0447\u0430\u0442\u044c \u0438\u0445 \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u0447\u0438\u0442\u0430\u043d\u0438\u0435 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u0435\u0439\u00bb, \u2014 \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0434\u0438\u043f\u043b\u043e\u043c\u0430\u0442. 11 \u0434\u0435\u043a\u0430\u0431\u0440\u044f \u041b\u044c\u0432\u043e\u0432\u0441\u043a\u0438\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u043d\u043e\u0439 \u0441\u043e\u0432\u0435\u0442 \u043f\u0440\u0438\u043d\u044f\u043b \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0432\u043e\u0437\u0433\u043b\u0430\u0441\u0438\u0442\u044c 2019 \u0433\u043e\u0434 \u0432 \u0440\u0435\u0433\u0438\u043e\u043d\u0435 \u0433\u043e\u0434\u043e\u043c \u0421\u0442\u0435\u043f\u0430\u043d\u0430 \u0411\u0430\u043d\u0434\u0435\u0440\u044b \u0432 \u0441\u0432\u044f\u0437\u0438 \u0441 \u043f\u0440\u0430\u0437\u0434\u043d\u043e\u0432\u0430\u043d\u0438\u0435\u043c 110-\u043b\u0435\u0442\u0438\u044f \u0441\u043e \u0434\u043d\u044f \u0440\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043b\u0438\u0434\u0435\u0440\u0430 \u041e\u0423\u041d (\u0411\u0430\u043d\u0434\u0435\u0440\u0430 \u0440\u043e\u0434\u0438\u043b\u0441\u044f 1 \u044f\u043d\u0432\u0430\u0440\u044f 1909 \u0433\u043e\u0434\u0430). \u0412 \u0438\u044e\u043b\u0435 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043d\u044f\u043b \u0416\u0438\u0442\u043e\u043c\u0438\u0440\u0441\u043a\u0438\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u043d\u043e\u0439 \u0441\u043e\u0432\u0435\u0442. \u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u043c\u0435\u0441\u044f\u0446\u0430 \u0441 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u043a \u043f\u0440\u0435\u0437\u0438\u0434\u0435\u043d\u0442\u0443 \u0441\u0442\u0440\u0430\u043d\u044b \u041f\u0435\u0442\u0440\u0443 \u041f\u043e\u0440\u043e\u0448\u0435\u043d\u043a\u043e \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0411\u0430\u043d\u0434\u0435\u0440\u0435 \u0437\u0432\u0430\u043d\u0438\u0435 \u0413\u0435\u0440\u043e\u044f \u0423\u043a\u0440\u0430\u0438\u043d\u044b \u043e\u0431\u0440\u0430\u0442\u0438\u043b\u0438\u0441\u044c \u0434\u0435\u043f\u0443\u0442\u0430\u0442\u044b \u0412\u0435\u0440\u0445\u043e\u0432\u043d\u043e\u0439 \u0420\u0430\u0434\u044b. \u041f\u0430\u0440\u043b\u0430\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u043f\u0440\u0438\u0437\u043d\u0430\u043d\u0438\u0435 \u0411\u0430\u043d\u0434\u0435\u0440\u044b \u043d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u0433\u0435\u0440\u043e\u0435\u043c \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0432 \u0431\u043e\u0440\u044c\u0431\u0435 \u0441 \u043f\u043e\u0434\u0440\u044b\u0432\u043d\u043e\u0439 \u0434\u0435\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0440\u043e\u0442\u0438\u0432 \u0423\u043a\u0440\u0430\u0438\u043d\u044b \u0432 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u043c \u043f\u043e\u043b\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 \u00ab\u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043c\u0438\u0444\u043e\u0432, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u043e\u0439 \u043f\u0440\u043e\u043f\u0430\u0433\u0430\u043d\u0434\u043e\u0439\u00bb. \u0421\u0442\u0435\u043f\u0430\u043d \u0411\u0430\u043d\u0434\u0435\u0440\u0430 (1909-1959) \u0431\u044b\u043b \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043b\u0438\u0434\u0435\u0440\u043e\u0432 \u041e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0443\u043a\u0440\u0430\u0438\u043d\u0441\u043a\u0438\u0445 \u043d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u0438\u0441\u0442\u043e\u0432, \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0435\u0439 \u0437\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0433\u043e \u0433\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0430 \u043d\u0430 \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u044f\u0445 \u0441 \u0443\u043a\u0440\u0430\u0438\u043d\u043e\u044f\u0437\u044b\u0447\u043d\u044b\u043c \u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u0435\u043c. \u0412 2010 \u0433\u043e\u0434\u0443 \u0432 \u043f\u0435\u0440\u0438\u043e\u0434 \u043f\u0440\u0435\u0437\u0438\u0434\u0435\u043d\u0442\u0441\u0442\u0432\u0430 \u0412\u0438\u043a\u0442\u043e\u0440\u0430 \u042e\u0449\u0435\u043d\u043a\u043e \u0411\u0430\u043d\u0434\u0435\u0440\u0430 \u0431\u044b\u043b \u043f\u043e\u0441\u043c\u0435\u0440\u0442\u043d\u043e \u043f\u0440\u0438\u0437\u043d\u0430\u043d \u0413\u0435\u0440\u043e\u0435\u043c \u0423\u043a\u0440\u0430\u0438\u043d\u044b, \u043e\u0434\u043d\u0430\u043a\u043e \u0432\u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0438 \u044d\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u043e\u0442\u043c\u0435\u043d\u0435\u043d\u043e \u0441\u0443\u0434\u043e\u043c. '\n>>> doc = Doc(text)\n```\n\n### Segmentation\n\nSplit text into tokens and sentencies. Defines `tokens` and `sents` properties of `doc`. Uses <a href=\"https://github.com/natasha/razdel\">Razdel</a> internally.\n\n```python\n>>> doc.segment(segmenter)\n>>> print(doc.tokens[:5])\n>>> print(doc.sents[:5])\n[DocToken(stop=5, text='\u041f\u043e\u0441\u043e\u043b'),\n DocToken(start=6, stop=13, text='\u0418\u0437\u0440\u0430\u0438\u043b\u044f'),\n DocToken(start=14, stop=16, text='\u043d\u0430'),\n DocToken(start=17, stop=24, text='\u0423\u043a\u0440\u0430\u0438\u043d\u0435'),\n DocToken(start=25, stop=30, text='\u0419\u043e\u044d\u043b\u044c')]\n[DocSent(stop=218, text='\u041f\u043e\u0441\u043e\u043b \u0418\u0437\u0440\u0430\u0438\u043b\u044f \u043d\u0430 \u0423\u043a\u0440\u0430\u0438\u043d\u0435 \u0419\u043e\u044d\u043b\u044c \u041b\u0438\u043e\u043d \u043f\u0440\u0438\u0437\u043d\u0430\u043b\u0441\u044f, \u0447\u0442..., tokens=[...]),\n DocSent(start=219, stop=257, text='\u0421\u0432\u043e\u0435 \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u043d \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u043b \u0432 Twitter.', tokens=[...]),\n DocSent(start=258, stop=424, text='\u00ab\u042f \u043d\u0435 \u043c\u043e\u0433\u0443 \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a \u043f\u0440\u043e\u0441\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0435\u0445, \u043a\u0442\u043e \u043d\u0435\u043f\u043e..., tokens=[...]),\n DocSent(start=425, stop=592, text='\u0423\u043a\u0440\u0430\u0438\u043d\u0430 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u0437\u0430\u0431\u044b\u0432\u0430\u0442\u044c \u043e \u043f\u0440\u0435\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f\u0445, \u0441\u043e\u0432\u0435\u0440..., tokens=[...]),\n DocSent(start=593, stop=798, text='11 \u0434\u0435\u043a\u0430\u0431\u0440\u044f \u041b\u044c\u0432\u043e\u0432\u0441\u043a\u0438\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u043d\u043e\u0439 \u0441\u043e\u0432\u0435\u0442 \u043f\u0440\u0438\u043d\u044f\u043b \u0440\u0435\u0448\u0435\u043d..., tokens=[...])]\n```\n\n### Morphology\n\nFor every token extract rich morphology tags. Depends on <a href=\"#Segmentation\">segmentation</a> step. Defines `pos` and `feats` properties of `doc.tokens`. Uses <a href=\"https://github.com/natasha/slovnet#morphology\">Slovnet morphology model</a> internally.\n\nCall `morph.print()` to visualize morphology markup.\n\n```python\n>>> doc.tag_morph(morph_tagger)\n>>> print(doc.tokens[:5])\n>>> doc.sents[0].morph.print()\n[DocToken(stop=5, text='\u041f\u043e\u0441\u043e\u043b', pos='NOUN', feats=<Anim,Nom,Masc,Sing>),\n DocToken(start=6, stop=13, text='\u0418\u0437\u0440\u0430\u0438\u043b\u044f', pos='PROPN', feats=<Inan,Gen,Masc,Sing>),\n DocToken(start=14, stop=16, text='\u043d\u0430', pos='ADP'),\n DocToken(start=17, stop=24, text='\u0423\u043a\u0440\u0430\u0438\u043d\u0435', pos='PROPN', feats=<Inan,Loc,Fem,Sing>),\n DocToken(start=25, stop=30, text='\u0419\u043e\u044d\u043b\u044c', pos='PROPN', feats=<Anim,Nom,Masc,Sing>)]\n               \u041f\u043e\u0441\u043e\u043b NOUN|Animacy=Anim|Case=Nom|Gender=Masc|Number=Sing\n             \u0418\u0437\u0440\u0430\u0438\u043b\u044f PROPN|Animacy=Inan|Case=Gen|Gender=Masc|Number=Sing\n                  \u043d\u0430 ADP\n             \u0423\u043a\u0440\u0430\u0438\u043d\u0435 PROPN|Animacy=Inan|Case=Loc|Gender=Fem|Number=Sing\n               \u0419\u043e\u044d\u043b\u044c PROPN|Animacy=Anim|Case=Nom|Gender=Masc|Number=Sing\n                \u041b\u0438\u043e\u043d PROPN|Animacy=Anim|Case=Nom|Gender=Masc|Number=Sing\n           \u043f\u0440\u0438\u0437\u043d\u0430\u043b\u0441\u044f VERB|Aspect=Perf|Gender=Masc|Mood=Ind|Number=Sing|Tense=Past|VerbForm=Fin|Voice=Mid\n                   , PUNCT\n                 \u0447\u0442\u043e SCONJ\n...\n```\n\n### Lemmatization\n\nLemmatize every token. Depends on <a href=\"#Morphology\">morphology</a> step. Defines `lemma` property of `doc.tokens`. Uses <a href=\"https://pymorphy2.readthedocs.io/en/stable/\">Pymorphy</a> internally.\n\n```python\n>>> for token in doc.tokens:\n>>>     token.lemmatize(morph_vocab)\n    \n>>> print(doc.tokens[:5])\n>>> {_.text: _.lemma for _ in doc.tokens}\n[DocToken(stop=5, text='\u041f\u043e\u0441\u043e\u043b', pos='NOUN', feats=<Anim,Nom,Masc,Sing>, lemma='\u043f\u043e\u0441\u043e\u043b'),\n DocToken(start=6, stop=13, text='\u0418\u0437\u0440\u0430\u0438\u043b\u044f', pos='PROPN', feats=<Inan,Gen,Masc,Sing>, lemma='\u0438\u0437\u0440\u0430\u0438\u043b\u044c'),\n DocToken(start=14, stop=16, text='\u043d\u0430', pos='ADP', lemma='\u043d\u0430'),\n DocToken(start=17, stop=24, text='\u0423\u043a\u0440\u0430\u0438\u043d\u0435', pos='PROPN', feats=<Inan,Loc,Fem,Sing>, lemma='\u0443\u043a\u0440\u0430\u0438\u043d\u0430'),\n DocToken(start=25, stop=30, text='\u0419\u043e\u044d\u043b\u044c', pos='PROPN', feats=<Anim,Nom,Masc,Sing>, lemma='\u0439\u043e\u044d\u043b\u044c')]\n{'\u041f\u043e\u0441\u043e\u043b': '\u043f\u043e\u0441\u043e\u043b',\n '\u0418\u0437\u0440\u0430\u0438\u043b\u044f': '\u0438\u0437\u0440\u0430\u0438\u043b\u044c',\n '\u043d\u0430': '\u043d\u0430',\n '\u0423\u043a\u0440\u0430\u0438\u043d\u0435': '\u0443\u043a\u0440\u0430\u0438\u043d\u0430',\n '\u0419\u043e\u044d\u043b\u044c': '\u0439\u043e\u044d\u043b\u044c',\n '\u041b\u0438\u043e\u043d': '\u043b\u0438\u043e\u043d',\n '\u043f\u0440\u0438\u0437\u043d\u0430\u043b\u0441\u044f': '\u043f\u0440\u0438\u0437\u043d\u0430\u0442\u044c\u0441\u044f',\n ',': ',',\n '\u0447\u0442\u043e': '\u0447\u0442\u043e',\n '\u043f\u0440\u0438\u0448\u0435\u043b': '\u043f\u0440\u0438\u0439\u0442\u0438',\n '\u0432': '\u0432',\n '\u0448\u043e\u043a': '\u0448\u043e\u043a',\n '\u0443\u0437\u043d\u0430\u0432': '\u0443\u0437\u043d\u0430\u0442\u044c',\n '\u043e': '\u043e',\n...\n```\n\n### Syntax\n\nFor every sentence run syntax analyzer. Depends on <a href=\"#Segmentation\">segmentation</a> step. Defines `id`, `head_id`, `rel` properties of `doc.tokens`. Uses <a href=\"https://github.com/natasha/slovnet#syntax\">Slovnet syntax model</a> internally. \n\nUse `syntax.print()` to visualize syntax markup. Uses <a href=\"https://github.com/natasha/ipymarkup\">Ipymarkup</a> internally.\n\n```python\n>>> doc.parse_syntax(syntax_parser)\n>>> print(doc.tokens[:5])\n>>> doc.sents[0].syntax.print()\n[DocToken(stop=5, text='\u041f\u043e\u0441\u043e\u043b', id='1_1', head_id='1_7', rel='nsubj', pos='NOUN', feats=<Anim,Nom,Masc,Sing>),\n DocToken(start=6, stop=13, text='\u0418\u0437\u0440\u0430\u0438\u043b\u044f', id='1_2', head_id='1_1', rel='nmod', pos='PROPN', feats=<Inan,Gen,Masc,Sing>),\n DocToken(start=14, stop=16, text='\u043d\u0430', id='1_3', head_id='1_4', rel='case', pos='ADP'),\n DocToken(start=17, stop=24, text='\u0423\u043a\u0440\u0430\u0438\u043d\u0435', id='1_4', head_id='1_1', rel='nmod', pos='PROPN', feats=<Inan,Loc,Fem,Sing>),\n DocToken(start=25, stop=30, text='\u0419\u043e\u044d\u043b\u044c', id='1_5', head_id='1_1', rel='appos', pos='PROPN', feats=<Anim,Nom,Masc,Sing>)]\n        \u250c\u2500\u2500\u25ba \u041f\u043e\u0441\u043e\u043b         nsubj\n        \u2502    \u0418\u0437\u0440\u0430\u0438\u043b\u044f       \n        \u2502 \u250c\u25ba \u043d\u0430            case\n        \u2502 \u2514\u2500 \u0423\u043a\u0440\u0430\u0438\u043d\u0435       \n        \u2502 \u250c\u2500 \u0419\u043e\u044d\u043b\u044c         \n        \u2502 \u2514\u25ba \u041b\u0438\u043e\u043d          flat:name\n\u250c\u2500\u2500\u2500\u2500\u2500\u250c\u2500\u2514\u2500\u2500\u2500 \u043f\u0440\u0438\u0437\u043d\u0430\u043b\u0441\u044f     \n\u2502     \u2502 \u250c\u2500\u2500\u25ba ,             punct\n\u2502     \u2502 \u2502 \u250c\u25ba \u0447\u0442\u043e           mark\n\u2502     \u2514\u25ba\u2514\u2500\u2514\u2500 \u043f\u0440\u0438\u0448\u0435\u043b        ccomp\n\u2502     \u2502   \u250c\u25ba \u0432             case\n\u2502     \u2514\u2500\u2500\u25ba\u2514\u2500 \u0448\u043e\u043a           obl\n\u2502         \u250c\u25ba ,             punct\n\u2502 \u250c\u2500\u2500\u2500\u2500\u25ba\u250c\u2500\u2514\u2500 \u0443\u0437\u043d\u0430\u0432         advcl\n\u2502 \u2502     \u2502 \u250c\u25ba \u043e             case\n\u2502 \u2502 \u250c\u2500\u2500\u2500\u2514\u25ba\u2514\u2500 \u0440\u0435\u0448\u0435\u043d\u0438\u0438       obl\n\u2502 \u2502 \u2502 \u250c\u2500\u2514\u2500\u2500\u25ba \u0432\u043b\u0430\u0441\u0442\u0435\u0439       nmod\n\u2502 \u2502 \u2502 \u2502   \u250c\u25ba \u041b\u044c\u0432\u043e\u0432\u0441\u043a\u043e\u0439     amod\n\u2502 \u2502 \u2502 \u2514\u2500\u2500\u25ba\u2514\u2500 \u043e\u0431\u043b\u0430\u0441\u0442\u0438       nmod\n\u2502 \u2514\u2500\u2514\u25ba\u250c\u2500\u250c\u2500\u2500\u2500 \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c      nmod\n\u2502     \u2502 \u2502 \u250c\u25ba 2019          amod\n\u2502     \u2502 \u2514\u25ba\u2514\u2500 \u0433\u043e\u0434           obj\n\u2502     \u2514\u2500\u2500\u25ba\u250c\u2500 \u0433\u043e\u0434\u043e\u043c         obl\n\u2502   \u250c\u2500\u2500\u2500\u2500\u2500\u2514\u25ba \u043b\u0438\u0434\u0435\u0440\u0430        nmod\n\u2502   \u2502 \u250c\u25ba\u250c\u2500\u2500\u2500 \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043d\u043e\u0439   acl\n\u2502   \u2502 \u2502 \u2502 \u250c\u25ba \u0432             case\n\u2502   \u2502 \u2502 \u2514\u25ba\u2514\u2500 \u0420\u043e\u0441\u0441\u0438\u0438        obl\n\u2502 \u250c\u2500\u2514\u25ba\u2514\u2500\u250c\u2500\u2500\u2500 \u041e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438   nmod\n\u2502 \u2502     \u2502 \u250c\u25ba \u0443\u043a\u0440\u0430\u0438\u043d\u0441\u043a\u0438\u0445    amod\n\u2502 \u2502   \u250c\u2500\u2514\u25ba\u2514\u2500 \u043d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u0438\u0441\u0442\u043e\u0432 nmod\n\u2502 \u2502   \u2502   \u250c\u25ba (             punct\n\u2502 \u2502   \u2514\u25ba\u250c\u2500\u2514\u2500 \u041e\u0423\u041d           parataxis\n\u2502 \u2502     \u2514\u2500\u2500\u25ba )             punct\n\u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u25ba\u250c\u2500 \u0421\u0442\u0435\u043f\u0430\u043d\u0430       appos\n\u2502         \u2514\u25ba \u0411\u0430\u043d\u0434\u0435\u0440\u044b       flat:name\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25ba .             punct\n...\n```\n\n### NER\n\nExtract standart named entities: names, locations, organizations. Depends on <a href=\"#Segmentation\">segmentation</a> step. Defines `spans` property of `doc`. Uses <a href=\"https://github.com/natasha/slovnet#ner\">Slovnet NER model</a> internally. \n\nCall `ner.print()` to visualize NER markup. Uses <a href=\"https://github.com/natasha/ipymarkup\">Ipymarkup</a> internally.\n\n```python\n>>> doc.tag_ner(ner_tagger)\n>>> print(doc.spans[:5])\n>>> doc.ner.print()\n[DocSpan(start=6, stop=13, type='LOC', text='\u0418\u0437\u0440\u0430\u0438\u043b\u044f', tokens=[...]),\n DocSpan(start=17, stop=24, type='LOC', text='\u0423\u043a\u0440\u0430\u0438\u043d\u0435', tokens=[...]),\n DocSpan(start=25, stop=35, type='PER', text='\u0419\u043e\u044d\u043b\u044c \u041b\u0438\u043e\u043d', tokens=[...]),\n DocSpan(start=89, stop=106, type='LOC', text='\u041b\u044c\u0432\u043e\u0432\u0441\u043a\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438', tokens=[...]),\n DocSpan(start=152, stop=158, type='LOC', text='\u0420\u043e\u0441\u0441\u0438\u0438', tokens=[...])]\n\u041f\u043e\u0441\u043e\u043b \u0418\u0437\u0440\u0430\u0438\u043b\u044f \u043d\u0430 \u0423\u043a\u0440\u0430\u0438\u043d\u0435 \u0419\u043e\u044d\u043b\u044c \u041b\u0438\u043e\u043d \u043f\u0440\u0438\u0437\u043d\u0430\u043b\u0441\u044f, \u0447\u0442\u043e \u043f\u0440\u0438\u0448\u0435\u043b \u0432 \u0448\u043e\u043a, \u0443\u0437\u043d\u0430\u0432\n      LOC\u2500\u2500\u2500\u2500    LOC\u2500\u2500\u2500\u2500 PER\u2500\u2500\u2500\u2500\u2500\u2500\u2500                                   \n \u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u0432\u043b\u0430\u0441\u0442\u0435\u0439 \u041b\u044c\u0432\u043e\u0432\u0441\u043a\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c 2019 \u0433\u043e\u0434 \u0433\u043e\u0434\u043e\u043c \u043b\u0438\u0434\u0435\u0440\u0430 \n                   LOC\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500                                \n\u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043d\u043e\u0439 \u0432 \u0420\u043e\u0441\u0441\u0438\u0438 \u041e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0443\u043a\u0440\u0430\u0438\u043d\u0441\u043a\u0438\u0445 \u043d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u0438\u0441\u0442\u043e\u0432 (\u041e\u0423\u041d) \n              LOC\u2500\u2500\u2500 ORG\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 \n\u0421\u0442\u0435\u043f\u0430\u043d\u0430 \u0411\u0430\u043d\u0434\u0435\u0440\u044b. \u0421\u0432\u043e\u0435 \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u043d \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u043b \u0432 Twitter. \u00ab\u042f \u043d\u0435 \u043c\u043e\u0433\u0443 \nPER\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500                                ORG\u2500\u2500\u2500\u2500             \n\u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a \u043f\u0440\u043e\u0441\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0435\u0445, \u043a\u0442\u043e \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b \u0443\u0447\u0430\u0441\u0442\u0438\u0435 \u0432 \n\u0443\u0436\u0430\u0441\u043d\u044b\u0445 \u0430\u043d\u0442\u0438\u0441\u0435\u043c\u0438\u0442\u0441\u043a\u0438\u0445 \u043f\u0440\u0435\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f\u0445, \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0431\u043e\u0440\u043e\u0442\u044c\u0441\u044f \u0441 \n\u0430\u043d\u0442\u0438\u0441\u0435\u043c\u0438\u0442\u0438\u0437\u043c\u043e\u043c \u0438 \u043a\u0441\u0435\u043d\u043e\u0444\u043e\u0431\u0438\u0435\u0439. \u0423\u043a\u0440\u0430\u0438\u043d\u0430 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u0437\u0430\u0431\u044b\u0432\u0430\u0442\u044c \u043e \n                              LOC\u2500\u2500\u2500\u2500                      \n\u043f\u0440\u0435\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f\u0445, \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0442\u0438\u0432 \u0443\u043a\u0440\u0430\u0438\u043d\u0441\u043a\u0438\u0445 \u0435\u0432\u0440\u0435\u0435\u0432, \u0438 \u043d\u0438\u043a\u043e\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \n\u043d\u0435 \u043e\u0442\u043c\u0435\u0447\u0430\u0442\u044c \u0438\u0445 \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u0447\u0438\u0442\u0430\u043d\u0438\u0435 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u0435\u0439\u00bb, \u2014 \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0434\u0438\u043f\u043b\u043e\u043c\u0430\u0442. \n11 \u0434\u0435\u043a\u0430\u0431\u0440\u044f \u041b\u044c\u0432\u043e\u0432\u0441\u043a\u0438\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u043d\u043e\u0439 \u0441\u043e\u0432\u0435\u0442 \u043f\u0440\u0438\u043d\u044f\u043b \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0432\u043e\u0437\u0433\u043b\u0430\u0441\u0438\u0442\u044c 2019\n           ORG\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500                                  \n \u0433\u043e\u0434 \u0432 \u0440\u0435\u0433\u0438\u043e\u043d\u0435 \u0433\u043e\u0434\u043e\u043c \u0421\u0442\u0435\u043f\u0430\u043d\u0430 \u0411\u0430\u043d\u0434\u0435\u0440\u044b \u0432 \u0441\u0432\u044f\u0437\u0438 \u0441 \u043f\u0440\u0430\u0437\u0434\u043d\u043e\u0432\u0430\u043d\u0438\u0435\u043c 110-\u043b\u0435\u0442\u0438\u044f\n                     PER\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500                                  \n \u0441\u043e \u0434\u043d\u044f \u0440\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043b\u0438\u0434\u0435\u0440\u0430 \u041e\u0423\u041d (\u0411\u0430\u043d\u0434\u0435\u0440\u0430 \u0440\u043e\u0434\u0438\u043b\u0441\u044f 1 \u044f\u043d\u0432\u0430\u0440\u044f 1909 \u0433\u043e\u0434\u0430). \u0412 \n                        ORG                                         \n\u0438\u044e\u043b\u0435 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043d\u044f\u043b \u0416\u0438\u0442\u043e\u043c\u0438\u0440\u0441\u043a\u0438\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u043d\u043e\u0439 \u0441\u043e\u0432\u0435\u0442. \u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \n                                ORG\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500           \n\u043c\u0435\u0441\u044f\u0446\u0430 \u0441 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u043a \u043f\u0440\u0435\u0437\u0438\u0434\u0435\u043d\u0442\u0443 \u0441\u0442\u0440\u0430\u043d\u044b \u041f\u0435\u0442\u0440\u0443 \u041f\u043e\u0440\u043e\u0448\u0435\u043d\u043a\u043e \u0432\u0435\u0440\u043d\u0443\u0442\u044c \n                                          PER\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500         \n\u0411\u0430\u043d\u0434\u0435\u0440\u0435 \u0437\u0432\u0430\u043d\u0438\u0435 \u0413\u0435\u0440\u043e\u044f \u0423\u043a\u0440\u0430\u0438\u043d\u044b \u043e\u0431\u0440\u0430\u0442\u0438\u043b\u0438\u0441\u044c \u0434\u0435\u043f\u0443\u0442\u0430\u0442\u044b \u0412\u0435\u0440\u0445\u043e\u0432\u043d\u043e\u0439 \u0420\u0430\u0434\u044b. \nPER\u2500\u2500\u2500\u2500              LOC\u2500\u2500\u2500\u2500                     ORG\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500  \n\u041f\u0430\u0440\u043b\u0430\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u043f\u0440\u0438\u0437\u043d\u0430\u043d\u0438\u0435 \u0411\u0430\u043d\u0434\u0435\u0440\u044b \u043d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u0433\u0435\u0440\u043e\u0435\u043c \n                                     PER\u2500\u2500\u2500\u2500                     \n\u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0432 \u0431\u043e\u0440\u044c\u0431\u0435 \u0441 \u043f\u043e\u0434\u0440\u044b\u0432\u043d\u043e\u0439 \u0434\u0435\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0440\u043e\u0442\u0438\u0432 \u0423\u043a\u0440\u0430\u0438\u043d\u044b \u0432 \n                                                  LOC\u2500\u2500\u2500\u2500   \n\u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u043c \u043f\u043e\u043b\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 \u00ab\u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043c\u0438\u0444\u043e\u0432, \n\u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u043e\u0439 \u043f\u0440\u043e\u043f\u0430\u0433\u0430\u043d\u0434\u043e\u0439\u00bb. \u0421\u0442\u0435\u043f\u0430\u043d \u0411\u0430\u043d\u0434\u0435\u0440\u0430 (1909-1959) \u0431\u044b\u043b \n                                   PER\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500                 \n\u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043b\u0438\u0434\u0435\u0440\u043e\u0432 \u041e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0443\u043a\u0440\u0430\u0438\u043d\u0441\u043a\u0438\u0445 \u043d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u0438\u0441\u0442\u043e\u0432, \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0435\u0439 \u0437\u0430 \n                 ORG\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500                 \n\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0433\u043e \u0433\u043e\u0441\u0443\u0434\u0430\u0440\u0441\u0442\u0432\u0430 \u043d\u0430 \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u044f\u0445 \u0441 \u0443\u043a\u0440\u0430\u0438\u043d\u043e\u044f\u0437\u044b\u0447\u043d\u044b\u043c \n\u043d\u0430\u0441\u0435\u043b\u0435\u043d\u0438\u0435\u043c. \u0412 2010 \u0433\u043e\u0434\u0443 \u0432 \u043f\u0435\u0440\u0438\u043e\u0434 \u043f\u0440\u0435\u0437\u0438\u0434\u0435\u043d\u0442\u0441\u0442\u0432\u0430 \u0412\u0438\u043a\u0442\u043e\u0440\u0430 \u042e\u0449\u0435\u043d\u043a\u043e \u0411\u0430\u043d\u0434\u0435\u0440\u0430 \n                                               PER\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 PER\u2500\u2500\u2500\u2500 \n\u0431\u044b\u043b \u043f\u043e\u0441\u043c\u0435\u0440\u0442\u043d\u043e \u043f\u0440\u0438\u0437\u043d\u0430\u043d \u0413\u0435\u0440\u043e\u0435\u043c \u0423\u043a\u0440\u0430\u0438\u043d\u044b, \u043e\u0434\u043d\u0430\u043a\u043e \u0432\u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0438 \u044d\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \n                             LOC\u2500\u2500\u2500\u2500                                  \n\u0431\u044b\u043b\u043e \u043e\u0442\u043c\u0435\u043d\u0435\u043d\u043e \u0441\u0443\u0434\u043e\u043c. \n```\n\n### Named entity normalization\n\nFor every NER span apply normalization procedure. Depends on <a href=\"#NER\">NER</a>, <a href=\"#Morphology\">morphology</a> and <a href=\"#Syntax\">syntax</a> steps. Defines `normal` property of `doc.spans`.\n\nOne can not just lemmatize every token inside entity span, otherwise \"\u041e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0443\u043a\u0440\u0430\u0438\u043d\u0441\u043a\u0438\u0445 \u043d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u0438\u0441\u0442\u043e\u0432\" would become \"\u041e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0443\u043a\u0440\u0430\u0438\u043d\u0441\u043a\u0438\u0435 \u043d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u0438\u0441\u0442\u044b\". Natasha uses syntax dependencies to produce correct \"\u041e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0443\u043a\u0440\u0430\u0438\u043d\u0441\u043a\u0438\u0445 \u043d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u0438\u0441\u0442\u043e\u0432\".\n\n```python\n>>> for span in doc.spans:\n>>>    span.normalize(morph_vocab)\n>>> print(doc.spans[:5])\n>>> {_.text: _.normal for _ in doc.spans if _.text != _.normal}\n[DocSpan(start=6, stop=13, type='LOC', text='\u0418\u0437\u0440\u0430\u0438\u043b\u044f', tokens=[...], normal='\u0418\u0437\u0440\u0430\u0438\u043b\u044c'),\n DocSpan(start=17, stop=24, type='LOC', text='\u0423\u043a\u0440\u0430\u0438\u043d\u0435', tokens=[...], normal='\u0423\u043a\u0440\u0430\u0438\u043d\u0430'),\n DocSpan(start=25, stop=35, type='PER', text='\u0419\u043e\u044d\u043b\u044c \u041b\u0438\u043e\u043d', tokens=[...], normal='\u0419\u043e\u044d\u043b\u044c \u041b\u0438\u043e\u043d'),\n DocSpan(start=89, stop=106, type='LOC', text='\u041b\u044c\u0432\u043e\u0432\u0441\u043a\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438', tokens=[...], normal='\u041b\u044c\u0432\u043e\u0432\u0441\u043a\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c'),\n DocSpan(start=152, stop=158, type='LOC', text='\u0420\u043e\u0441\u0441\u0438\u0438', tokens=[...], normal='\u0420\u043e\u0441\u0441\u0438\u044f')]\n{'\u0418\u0437\u0440\u0430\u0438\u043b\u044f': '\u0418\u0437\u0440\u0430\u0438\u043b\u044c',\n '\u0423\u043a\u0440\u0430\u0438\u043d\u0435': '\u0423\u043a\u0440\u0430\u0438\u043d\u0430',\n '\u041b\u044c\u0432\u043e\u0432\u0441\u043a\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438': '\u041b\u044c\u0432\u043e\u0432\u0441\u043a\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c',\n '\u0420\u043e\u0441\u0441\u0438\u0438': '\u0420\u043e\u0441\u0441\u0438\u044f',\n '\u041e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0443\u043a\u0440\u0430\u0438\u043d\u0441\u043a\u0438\u0445 \u043d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u0438\u0441\u0442\u043e\u0432 (\u041e\u0423\u041d)': '\u041e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0443\u043a\u0440\u0430\u0438\u043d\u0441\u043a\u0438\u0445 \u043d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u0438\u0441\u0442\u043e\u0432 (\u041e\u0423\u041d)',\n '\u0421\u0442\u0435\u043f\u0430\u043d\u0430 \u0411\u0430\u043d\u0434\u0435\u0440\u044b': '\u0421\u0442\u0435\u043f\u0430\u043d \u0411\u0430\u043d\u0434\u0435\u0440\u0430',\n '\u041f\u0435\u0442\u0440\u0443 \u041f\u043e\u0440\u043e\u0448\u0435\u043d\u043a\u043e': '\u041f\u0435\u0442\u0440 \u041f\u043e\u0440\u043e\u0448\u0435\u043d\u043a\u043e',\n '\u0411\u0430\u043d\u0434\u0435\u0440\u0435': '\u0411\u0430\u043d\u0434\u0435\u0440\u0430',\n '\u0423\u043a\u0440\u0430\u0438\u043d\u044b': '\u0423\u043a\u0440\u0430\u0438\u043d\u0430',\n '\u0412\u0435\u0440\u0445\u043e\u0432\u043d\u043e\u0439 \u0420\u0430\u0434\u044b': '\u0412\u0435\u0440\u0445\u043e\u0432\u043d\u0430\u044f \u0420\u0430\u0434\u0430',\n '\u0411\u0430\u043d\u0434\u0435\u0440\u044b': '\u0411\u0430\u043d\u0434\u0435\u0440\u0430',\n '\u041e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0443\u043a\u0440\u0430\u0438\u043d\u0441\u043a\u0438\u0445 \u043d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u0438\u0441\u0442\u043e\u0432': '\u041e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0443\u043a\u0440\u0430\u0438\u043d\u0441\u043a\u0438\u0445 \u043d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u0438\u0441\u0442\u043e\u0432',\n '\u0412\u0438\u043a\u0442\u043e\u0440\u0430 \u042e\u0449\u0435\u043d\u043a\u043e': '\u0412\u0438\u043a\u0442\u043e\u0440 \u042e\u0449\u0435\u043d\u043a\u043e'}\n```\n\n### Named entity parsing\n\nParse `PER` named entities into firstname, surname and patronymic. Depends on <a href=\"#NER\">NER</a> step. Defines `fact` property of `doc.spans`. Uses <a href=\"https://github.com/natasha/yargy\">Yargy-parser</a> internally.\n\nNatasha also has built in extractors for <a href=\"https://nbviewer.jupyter.org/github/natasha/natasha/blob/master/docs.ipynb#DatesExtractor\">dates</a>, <a href=\"https://nbviewer.jupyter.org/github/natasha/natasha/blob/master/docs.ipynb#MoneyExtractor\">money</a>, <a href=\"https://nbviewer.jupyter.org/github/natasha/natasha/blob/master/docs.ipynb#AddrExtractor\">address</a>.\n\n```python\n>>> for span in doc.spans:\n>>>    if span.type == PER:\n>>>        span.extract_fact(names_extractor)\n\n>>> print(doc.spans[:5])\n>>> {_.normal: _.fact.as_dict for _ in doc.spans if _.type == PER}\n[DocSpan(start=6, stop=13, type='LOC', text='\u0418\u0437\u0440\u0430\u0438\u043b\u044f', tokens=[...], normal='\u0418\u0437\u0440\u0430\u0438\u043b\u044c'),\n DocSpan(start=17, stop=24, type='LOC', text='\u0423\u043a\u0440\u0430\u0438\u043d\u0435', tokens=[...], normal='\u0423\u043a\u0440\u0430\u0438\u043d\u0430'),\n DocSpan(start=25, stop=35, type='PER', text='\u0419\u043e\u044d\u043b\u044c \u041b\u0438\u043e\u043d', tokens=[...], normal='\u0419\u043e\u044d\u043b\u044c \u041b\u0438\u043e\u043d', fact=DocFact(slots=[...])),\n DocSpan(start=89, stop=106, type='LOC', text='\u041b\u044c\u0432\u043e\u0432\u0441\u043a\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438', tokens=[...], normal='\u041b\u044c\u0432\u043e\u0432\u0441\u043a\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c'),\n DocSpan(start=152, stop=158, type='LOC', text='\u0420\u043e\u0441\u0441\u0438\u0438', tokens=[...], normal='\u0420\u043e\u0441\u0441\u0438\u044f')]\n{'\u0419\u043e\u044d\u043b\u044c \u041b\u0438\u043e\u043d': {'first': '\u0419\u043e\u044d\u043b\u044c', 'last': '\u041b\u0438\u043e\u043d'},\n '\u0421\u0442\u0435\u043f\u0430\u043d \u0411\u0430\u043d\u0434\u0435\u0440\u0430': {'first': '\u0421\u0442\u0435\u043f\u0430\u043d', 'last': '\u0411\u0430\u043d\u0434\u0435\u0440\u0430'},\n '\u041f\u0435\u0442\u0440 \u041f\u043e\u0440\u043e\u0448\u0435\u043d\u043a\u043e': {'first': '\u041f\u0435\u0442\u0440', 'last': '\u041f\u043e\u0440\u043e\u0448\u0435\u043d\u043a\u043e'},\n '\u0411\u0430\u043d\u0434\u0435\u0440\u0430': {'last': '\u0411\u0430\u043d\u0434\u0435\u0440\u0430'},\n '\u0412\u0438\u043a\u0442\u043e\u0440 \u042e\u0449\u0435\u043d\u043a\u043e': {'first': '\u0412\u0438\u043a\u0442\u043e\u0440', 'last': '\u042e\u0449\u0435\u043d\u043a\u043e'}}\n```\n\n## Documentation\n\n* <a href=\"http://nbviewer.jupyter.org/github/natasha/natasha/blob/master/docs.ipynb\">Examples with description + reference</a>\n* <a href=\"https://habr.com/ru/post/516098/#natasha\">Natasha section in longread on Natasha project</a> (in Russian) \n* <a href=\"https://youtu.be/-7XT_U6hVvk?t=951\">Natasha section of Datafest 2020 talk</a> (in Russian)\n\n## Evaluation\n\n* Segmentation \u2014 <a href=\"https://github.com/natasha/razdel#quality-performance\">Razdel evalualtion section</a>\n* Embedding \u2014 <a href=\"https://github.com/natasha/navec#evaluation\">Navec evalualtion section</a>\n* Morphology \u2014 <a href=\"https://github.com/natasha/slovnet#morphology-1\">Slovnet Morph evaluation section</a>\n* Syntax \u2014 <a href=\"https://github.com/natasha/slovnet#syntax-1\">Slovnet Syntax evaluation section</a>\n* NER \u2014 <a href=\"https://github.com/natasha/slovnet#ner-1\">Slovnet NER evaluation section</a>\n\n## Support\n\n- Chat \u2014 https://t.me/natural_language_processing\n- Issues \u2014 https://github.com/natasha/natasha/issues\n- Commercial support \u2014 https://lab.alexkuk.ru\n\n## Development\n\nDev env\n\n```bash\npython -m venv ~/.venvs/natasha-natasha\nsource ~/.venvs/natasha-natasha/bin/activate\n\npip install -r requirements/dev.txt\npip install -e .\n\npython -m ipykernel install --user --name natasha-natasha\n```\n\nTest\n\n```bash\nmake test\n```\n\nDocs\n\n```bash\nmake exec-docs\n```\n\nRelease\n\n```bash\n# Update setup.py version\n\ngit commit -am 'Up version'\ngit tag v1.6.0\n\ngit push\ngit push --tags\n\n# Github Action builds dist and publishes to PyPi\n```\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Named-entity recognition for russian language",
    "version": "1.6.0",
    "project_urls": {
        "Homepage": "https://github.com/natasha/natasha"
    },
    "split_keywords": [
        "natural language processing",
        "russian"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "329cbb9d33c13564bcc939bb727087ef51b16ed3b49cc3b8fdec07c87b02f1de",
                "md5": "5a37ba3216ce4fd892462b019b5032d4",
                "sha256": "e12b130d05a0b4d2eb6442092ed5b5769a68a311c17f2095b1aa739fb8d6dc78"
            },
            "downloads": -1,
            "filename": "natasha-1.6.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "5a37ba3216ce4fd892462b019b5032d4",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 34403797,
            "upload_time": "2023-07-24T10:09:01",
            "upload_time_iso_8601": "2023-07-24T10:09:01.678286Z",
            "url": "https://files.pythonhosted.org/packages/32/9c/bb9d33c13564bcc939bb727087ef51b16ed3b49cc3b8fdec07c87b02f1de/natasha-1.6.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "eb2ac20ab35487e64cb25ec60e174aabc11bfc9d00d7f3955fd0dc7a5ffd8be7",
                "md5": "5a793404a6c2f587b13e8b074e522ff7",
                "sha256": "46082e6b382ad3a6bc07d8de4677c70f955347e5eb77ef0e0ac4147da18b12ad"
            },
            "downloads": -1,
            "filename": "natasha-1.6.0.tar.gz",
            "has_sig": false,
            "md5_digest": "5a793404a6c2f587b13e8b074e522ff7",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 34414908,
            "upload_time": "2023-07-24T10:09:05",
            "upload_time_iso_8601": "2023-07-24T10:09:05.166241Z",
            "url": "https://files.pythonhosted.org/packages/eb/2a/c20ab35487e64cb25ec60e174aabc11bfc9d00d7f3955fd0dc7a5ffd8be7/natasha-1.6.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-07-24 10:09:05",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "natasha",
    "github_project": "natasha",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "natasha"
}
        
Elapsed time: 0.09167s