{"id":13417551,"url":"https://github.com/natasha/natasha","last_synced_at":"2026-10-19T13:48:34.457Z","repository":{"id":38324899,"uuid":"64834778","full_name":"natasha/natasha","owner":"natasha","description":"Solves basic Russian NLP tasks, API for lower level Natasha projects","archived":false,"fork":false,"pushed_at":"2026-10-14T06:21:05.000Z","size":37450,"stargazers_count":1360,"open_issues_count":29,"forks_count":122,"subscribers_count":57,"default_branch":"master","last_synced_at":"2026-10-17T16:19:25.420Z","etag":null,"topics":["embeddings","morphology","ner","nlp","python","russian","sentence-segmentation","syntax","tokenizer","visualization"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/natasha.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS.md","dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"claude":null,"gemini":null,"cursor":null,"copilot":null,"dco":null,"cla":null,"disclosure":null}},"created_at":"2016-08-03T09:49:51.000Z","updated_at":"2026-10-17T16:09:18.000Z","dependencies_parsed_at":"2026-08-26T00:52:33.688Z","dependency_job_id":null,"html_url":"https://github.com/natasha/natasha","commit_stats":{"total_commits":363,"total_committers":18,"mean_commits":"20.166666666666668","dds":0.3911845730027548,"last_synced_commit":"82225892bfb818247b6edc52e72e92f1c41a8630"},"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/natasha/natasha","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/natasha%2Fnatasha","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/natasha%2Fnatasha/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/natasha%2Fnatasha/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/natasha%2Fnatasha/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/natasha","download_url":"https://codeload.github.com/natasha/natasha/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/natasha%2Fnatasha/sbom","scorecard":{"id":675081,"data":{"date":"2025-08-11","repo":{"name":"github.com/natasha/natasha","commit":"d5c9704821ff92bcef8d42f60b138a6ff190c461"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.9,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":5,"reason":"Found 8/15 approved changesets -- score normalized to 5","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/pypi.yml:1","Warn: no topLevel permission defined: .github/workflows/test.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 23 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pypi.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/natasha/natasha/pypi.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/pypi.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/natasha/natasha/pypi.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/pypi.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/natasha/natasha/pypi.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/natasha/natasha/test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/natasha/natasha/test.yml/master?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/pypi.yml:20","Warn: pipCommand not pinned by hash: .github/workflows/test.yml:23","Warn: pipCommand not pinned by hash: .github/workflows/test.yml:24","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned","Info:   0 out of   3 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}}]},"last_synced_at":"2025-08-21T21:13:04.409Z","repository_id":38324899,"created_at":"2025-08-21T21:13:04.409Z","updated_at":"2025-08-21T21:13:04.409Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":344872684,"owners_count":38335145,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-10-03T21:59:58.778Z","status":"online","status_checked_at":"2026-10-17T02:00:06.547Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["embeddings","morphology","ner","nlp","python","russian","sentence-segmentation","syntax","tokenizer","visualization"],"created_at":"2024-07-30T22:00:41.099Z","updated_at":"2026-10-19T13:48:32.831Z","avatar_url":"https://github.com/natasha.png","language":"Python","funding_links":[],"categories":["Python","Проекты","Искусственный интеллект и машинное обучение"],"sub_categories":["natasha"],"readme":"\n\u003cimg src=\"https://github.com/natasha/natasha-logos/blob/master/natasha.svg\"\u003e\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 than current SOTAs for Russian language on news articles, see \u003ca href=\"https://github.com/natasha/natasha#evaluation\"\u003eevaluation section\u003c/a\u003e. 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 \u003ca href=\"https://github.com/natasha\"\u003eNatasha project\u003c/a\u003e under one convenient API:\n\n* \u003ca href=\"https://github.com/natasha/razdel\"\u003eRazdel\u003c/a\u003e — token, sentence segmentation for Russian\n* \u003ca href=\"https://github.com/natasha/navec\"\u003eNavec\u003c/a\u003e — compact Russian embeddings\n* \u003ca href=\"https://github.com/natasha/slovnet\"\u003eSlovnet\u003c/a\u003e — modern deep-learning techniques for Russian NLP, compact models for Russian morphology, syntax, NER.\n* \u003ca href=\"https://github.com/natasha/yargy\"\u003eYargy\u003c/a\u003e — rule-based fact extraction similar to Tomita parser.\n* \u003ca href=\"https://github.com/natasha/ipymarkup\"\u003eIpymarkup\u003c/a\u003e — NLP visualizations for NER and syntax markups.\n\n\u003e ⚠ API may change, for realworld tasks consider using low level libraries from Natasha project.\n\u003e Models optimized for news articles, quality on other domain may be lower.\n\u003e To use old `NamesExtractor`, `AddressExtactor` downgrade `pip install natasha\u003c1 yargy\u003c0.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\u003e\u003e\u003e 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\u003e\u003e\u003e segmenter = Segmenter()\n\u003e\u003e\u003e morph_vocab = MorphVocab()\n\n\u003e\u003e\u003e emb = NewsEmbedding()\n\u003e\u003e\u003e morph_tagger = NewsMorphTagger(emb)\n\u003e\u003e\u003e syntax_parser = NewsSyntaxParser(emb)\n\u003e\u003e\u003e ner_tagger = NewsNERTagger(emb)\n\n\u003e\u003e\u003e names_extractor = NamesExtractor(morph_vocab)\n\n\u003e\u003e\u003e text = 'Посол Израиля на Украине Йоэль Лион признался, что пришел в шок, узнав о решении властей Львовской области объявить 2019 год годом лидера запрещенной в России Организации украинских националистов (ОУН) Степана Бандеры. Свое заявление он разместил в Twitter. «Я не могу понять, как прославление тех, кто непосредственно принимал участие в ужасных антисемитских преступлениях, помогает бороться с антисемитизмом и ксенофобией. Украина не должна забывать о преступлениях, совершенных против украинских евреев, и никоим образом не отмечать их через почитание их исполнителей», — написал дипломат. 11 декабря Львовский областной совет принял решение провозгласить 2019 год в регионе годом Степана Бандеры в связи с празднованием 110-летия со дня рождения лидера ОУН (Бандера родился 1 января 1909 года). В июле аналогичное решение принял Житомирский областной совет. В начале месяца с предложением к президенту страны Петру Порошенко вернуть Бандере звание Героя Украины обратились депутаты Верховной Рады. Парламентарии уверены, что признание Бандеры национальным героем поможет в борьбе с подрывной деятельностью против Украины в информационном поле, а также остановит «распространение мифов, созданных российской пропагандой». Степан Бандера (1909-1959) был одним из лидеров Организации украинских националистов, выступающей за создание независимого государства на территориях с украиноязычным населением. В 2010 году в период президентства Виктора Ющенко Бандера был посмертно признан Героем Украины, однако впоследствии это решение было отменено судом. '\n\u003e\u003e\u003e doc = Doc(text)\n```\n\n### Segmentation\n\nSplit text into tokens and sentencies. Defines `tokens` and `sents` properties of `doc`. Uses \u003ca href=\"https://github.com/natasha/razdel\"\u003eRazdel\u003c/a\u003e internally.\n\n```python\n\u003e\u003e\u003e doc.segment(segmenter)\n\u003e\u003e\u003e print(doc.tokens[:5])\n\u003e\u003e\u003e print(doc.sents[:5])\n[DocToken(stop=5, text='Посол'),\n DocToken(start=6, stop=13, text='Израиля'),\n DocToken(start=14, stop=16, text='на'),\n DocToken(start=17, stop=24, text='Украине'),\n DocToken(start=25, stop=30, text='Йоэль')]\n[DocSent(stop=218, text='Посол Израиля на Украине Йоэль Лион признался, чт..., tokens=[...]),\n DocSent(start=219, stop=257, text='Свое заявление он разместил в Twitter.', tokens=[...]),\n DocSent(start=258, stop=424, text='«Я не могу понять, как прославление тех, кто непо..., tokens=[...]),\n DocSent(start=425, stop=592, text='Украина не должна забывать о преступлениях, совер..., tokens=[...]),\n DocSent(start=593, stop=798, text='11 декабря Львовский областной совет принял решен..., tokens=[...])]\n```\n\n### Morphology\n\nFor every token extract rich morphology tags. Depends on \u003ca href=\"#Segmentation\"\u003esegmentation\u003c/a\u003e step. Defines `pos` and `feats` properties of `doc.tokens`. Uses \u003ca href=\"https://github.com/natasha/slovnet#morphology\"\u003eSlovnet morphology model\u003c/a\u003e internally.\n\nCall `morph.print()` to visualize morphology markup.\n\n```python\n\u003e\u003e\u003e doc.tag_morph(morph_tagger)\n\u003e\u003e\u003e print(doc.tokens[:5])\n\u003e\u003e\u003e doc.sents[0].morph.print()\n[DocToken(stop=5, text='Посол', pos='NOUN', feats=\u003cAnim,Nom,Masc,Sing\u003e),\n DocToken(start=6, stop=13, text='Израиля', pos='PROPN', feats=\u003cInan,Gen,Masc,Sing\u003e),\n DocToken(start=14, stop=16, text='на', pos='ADP'),\n DocToken(start=17, stop=24, text='Украине', pos='PROPN', feats=\u003cInan,Loc,Fem,Sing\u003e),\n DocToken(start=25, stop=30, text='Йоэль', pos='PROPN', feats=\u003cAnim,Nom,Masc,Sing\u003e)]\n               Посол NOUN|Animacy=Anim|Case=Nom|Gender=Masc|Number=Sing\n             Израиля PROPN|Animacy=Inan|Case=Gen|Gender=Masc|Number=Sing\n                  на ADP\n             Украине PROPN|Animacy=Inan|Case=Loc|Gender=Fem|Number=Sing\n               Йоэль PROPN|Animacy=Anim|Case=Nom|Gender=Masc|Number=Sing\n                Лион PROPN|Animacy=Anim|Case=Nom|Gender=Masc|Number=Sing\n           признался VERB|Aspect=Perf|Gender=Masc|Mood=Ind|Number=Sing|Tense=Past|VerbForm=Fin|Voice=Mid\n                   , PUNCT\n                 что SCONJ\n...\n```\n\n### Lemmatization\n\nLemmatize every token. Depends on \u003ca href=\"#Morphology\"\u003emorphology\u003c/a\u003e step. Defines `lemma` property of `doc.tokens`. Uses \u003ca href=\"https://pymorphy2.readthedocs.io/en/stable/\"\u003ePymorphy\u003c/a\u003e internally.\n\n```python\n\u003e\u003e\u003e for token in doc.tokens:\n\u003e\u003e\u003e     token.lemmatize(morph_vocab)\n    \n\u003e\u003e\u003e print(doc.tokens[:5])\n\u003e\u003e\u003e {_.text: _.lemma for _ in doc.tokens}\n[DocToken(stop=5, text='Посол', pos='NOUN', feats=\u003cAnim,Nom,Masc,Sing\u003e, lemma='посол'),\n DocToken(start=6, stop=13, text='Израиля', pos='PROPN', feats=\u003cInan,Gen,Masc,Sing\u003e, lemma='израиль'),\n DocToken(start=14, stop=16, text='на', pos='ADP', lemma='на'),\n DocToken(start=17, stop=24, text='Украине', pos='PROPN', feats=\u003cInan,Loc,Fem,Sing\u003e, lemma='украина'),\n DocToken(start=25, stop=30, text='Йоэль', pos='PROPN', feats=\u003cAnim,Nom,Masc,Sing\u003e, lemma='йоэль')]\n{'Посол': 'посол',\n 'Израиля': 'израиль',\n 'на': 'на',\n 'Украине': 'украина',\n 'Йоэль': 'йоэль',\n 'Лион': 'лион',\n 'признался': 'признаться',\n ',': ',',\n 'что': 'что',\n 'пришел': 'прийти',\n 'в': 'в',\n 'шок': 'шок',\n 'узнав': 'узнать',\n 'о': 'о',\n...\n```\n\n### Syntax\n\nFor every sentence run syntax analyzer. Depends on \u003ca href=\"#Segmentation\"\u003esegmentation\u003c/a\u003e step. Defines `id`, `head_id`, `rel` properties of `doc.tokens`. Uses \u003ca href=\"https://github.com/natasha/slovnet#syntax\"\u003eSlovnet syntax model\u003c/a\u003e internally. \n\nUse `syntax.print()` to visualize syntax markup. Uses \u003ca href=\"https://github.com/natasha/ipymarkup\"\u003eIpymarkup\u003c/a\u003e internally.\n\n```python\n\u003e\u003e\u003e doc.parse_syntax(syntax_parser)\n\u003e\u003e\u003e print(doc.tokens[:5])\n\u003e\u003e\u003e doc.sents[0].syntax.print()\n[DocToken(stop=5, text='Посол', id='1_1', head_id='1_7', rel='nsubj', pos='NOUN', feats=\u003cAnim,Nom,Masc,Sing\u003e),\n DocToken(start=6, stop=13, text='Израиля', id='1_2', head_id='1_1', rel='nmod', pos='PROPN', feats=\u003cInan,Gen,Masc,Sing\u003e),\n DocToken(start=14, stop=16, text='на', id='1_3', head_id='1_4', rel='case', pos='ADP'),\n DocToken(start=17, stop=24, text='Украине', id='1_4', head_id='1_1', rel='nmod', pos='PROPN', feats=\u003cInan,Loc,Fem,Sing\u003e),\n DocToken(start=25, stop=30, text='Йоэль', id='1_5', head_id='1_1', rel='appos', pos='PROPN', feats=\u003cAnim,Nom,Masc,Sing\u003e)]\n        ┌──► Посол         nsubj\n        │    Израиля       \n        │ ┌► на            case\n        │ └─ Украине       \n        │ ┌─ Йоэль         \n        │ └► Лион          flat:name\n┌─────┌─└─── признался     \n│     │ ┌──► ,             punct\n│     │ │ ┌► что           mark\n│     └►└─└─ пришел        ccomp\n│     │   ┌► в             case\n│     └──►└─ шок           obl\n│         ┌► ,             punct\n│ ┌────►┌─└─ узнав         advcl\n│ │     │ ┌► о             case\n│ │ ┌───└►└─ решении       obl\n│ │ │ ┌─└──► властей       nmod\n│ │ │ │   ┌► Львовской     amod\n│ │ │ └──►└─ области       nmod\n│ └─└►┌─┌─── объявить      nmod\n│     │ │ ┌► 2019          amod\n│     │ └►└─ год           obj\n│     └──►┌─ годом         obl\n│   ┌─────└► лидера        nmod\n│   │ ┌►┌─── запрещенной   acl\n│   │ │ │ ┌► в             case\n│   │ │ └►└─ России        obl\n│ ┌─└►└─┌─── Организации   nmod\n│ │     │ ┌► украинских    amod\n│ │   ┌─└►└─ националистов nmod\n│ │   │   ┌► (             punct\n│ │   └►┌─└─ ОУН           parataxis\n│ │     └──► )             punct\n│ └──────►┌─ Степана       appos\n│         └► Бандеры       flat:name\n└──────────► .             punct\n...\n```\n\n### NER\n\nExtract standart named entities: names, locations, organizations. Depends on \u003ca href=\"#Segmentation\"\u003esegmentation\u003c/a\u003e step. Defines `spans` property of `doc`. Uses \u003ca href=\"https://github.com/natasha/slovnet#ner\"\u003eSlovnet NER model\u003c/a\u003e internally. \n\nCall `ner.print()` to visualize NER markup. Uses \u003ca href=\"https://github.com/natasha/ipymarkup\"\u003eIpymarkup\u003c/a\u003e internally.\n\n```python\n\u003e\u003e\u003e doc.tag_ner(ner_tagger)\n\u003e\u003e\u003e print(doc.spans[:5])\n\u003e\u003e\u003e doc.ner.print()\n[DocSpan(start=6, stop=13, type='LOC', text='Израиля', tokens=[...]),\n DocSpan(start=17, stop=24, type='LOC', text='Украине', tokens=[...]),\n DocSpan(start=25, stop=35, type='PER', text='Йоэль Лион', tokens=[...]),\n DocSpan(start=89, stop=106, type='LOC', text='Львовской области', tokens=[...]),\n DocSpan(start=152, stop=158, type='LOC', text='России', tokens=[...])]\nПосол Израиля на Украине Йоэль Лион признался, что пришел в шок, узнав\n      LOC────    LOC──── PER───────                                   \n о решении властей Львовской области объявить 2019 год годом лидера \n                   LOC──────────────                                \nзапрещенной в России Организации украинских националистов (ОУН) \n              LOC─── ORG─────────────────────────────────────── \nСтепана Бандеры. Свое заявление он разместил в Twitter. «Я не могу \nPER────────────                                ORG────             \nпонять, как прославление тех, кто непосредственно принимал участие в \nужасных антисемитских преступлениях, помогает бороться с \nантисемитизмом и ксенофобией. Украина не должна забывать о \n                              LOC────                      \nпреступлениях, совершенных против украинских евреев, и никоим образом \nне отмечать их через почитание их исполнителей», — написал дипломат. \n11 декабря Львовский областной совет принял решение провозгласить 2019\n           ORG──────────────────────                                  \n год в регионе годом Степана Бандеры в связи с празднованием 110-летия\n                     PER────────────                                  \n со дня рождения лидера ОУН (Бандера родился 1 января 1909 года). В \n                        ORG                                         \nиюле аналогичное решение принял Житомирский областной совет. В начале \n                                ORG────────────────────────           \nмесяца с предложением к президенту страны Петру Порошенко вернуть \n                                          PER────────────         \nБандере звание Героя Украины обратились депутаты Верховной Рады. \nPER────              LOC────                     ORG───────────  \nПарламентарии уверены, что признание Бандеры национальным героем \n                                     PER────                     \nпоможет в борьбе с подрывной деятельностью против Украины в \n                                                  LOC────   \nинформационном поле, а также остановит «распространение мифов, \nсозданных российской пропагандой». Степан Бандера (1909-1959) был \n                                   PER───────────                 \nодним из лидеров Организации украинских националистов, выступающей за \n                 ORG─────────────────────────────────                 \nсоздание независимого государства на территориях с украиноязычным \nнаселением. В 2010 году в период президентства Виктора Ющенко Бандера \n                                               PER─────────── PER──── \nбыл посмертно признан Героем Украины, однако впоследствии это решение \n                             LOC────                                  \nбыло отменено судом. \n```\n\n### Named entity normalization\n\nFor every NER span apply normalization procedure. Depends on \u003ca href=\"#NER\"\u003eNER\u003c/a\u003e, \u003ca href=\"#Morphology\"\u003emorphology\u003c/a\u003e and \u003ca href=\"#Syntax\"\u003esyntax\u003c/a\u003e steps. Defines `normal` property of `doc.spans`.\n\nOne can not just lemmatize every token inside entity span, otherwise \"Организации украинских националистов\" would become \"Организация украинские националисты\". Natasha uses syntax dependencies to produce correct \"Организация украинских националистов\".\n\n```python\n\u003e\u003e\u003e for span in doc.spans:\n\u003e\u003e\u003e    span.normalize(morph_vocab)\n\u003e\u003e\u003e print(doc.spans[:5])\n\u003e\u003e\u003e {_.text: _.normal for _ in doc.spans if _.text != _.normal}\n[DocSpan(start=6, stop=13, type='LOC', text='Израиля', tokens=[...], normal='Израиль'),\n DocSpan(start=17, stop=24, type='LOC', text='Украине', tokens=[...], normal='Украина'),\n DocSpan(start=25, stop=35, type='PER', text='Йоэль Лион', tokens=[...], normal='Йоэль Лион'),\n DocSpan(start=89, stop=106, type='LOC', text='Львовской области', tokens=[...], normal='Львовская область'),\n DocSpan(start=152, stop=158, type='LOC', text='России', tokens=[...], normal='Россия')]\n{'Израиля': 'Израиль',\n 'Украине': 'Украина',\n 'Львовской области': 'Львовская область',\n 'России': 'Россия',\n 'Организации украинских националистов (ОУН)': 'Организация украинских националистов (ОУН)',\n 'Степана Бандеры': 'Степан Бандера',\n 'Петру Порошенко': 'Петр Порошенко',\n 'Бандере': 'Бандера',\n 'Украины': 'Украина',\n 'Верховной Рады': 'Верховная Рада',\n 'Бандеры': 'Бандера',\n 'Организации украинских националистов': 'Организация украинских националистов',\n 'Виктора Ющенко': 'Виктор Ющенко'}\n```\n\n### Named entity parsing\n\nParse `PER` named entities into firstname, surname and patronymic. Depends on \u003ca href=\"#NER\"\u003eNER\u003c/a\u003e step. Defines `fact` property of `doc.spans`. Uses \u003ca href=\"https://github.com/natasha/yargy\"\u003eYargy-parser\u003c/a\u003e internally.\n\nNatasha also has built in extractors for \u003ca href=\"https://nbviewer.jupyter.org/github/natasha/natasha/blob/master/docs.ipynb#DatesExtractor\"\u003edates\u003c/a\u003e, \u003ca href=\"https://nbviewer.jupyter.org/github/natasha/natasha/blob/master/docs.ipynb#MoneyExtractor\"\u003emoney\u003c/a\u003e, \u003ca href=\"https://nbviewer.jupyter.org/github/natasha/natasha/blob/master/docs.ipynb#AddrExtractor\"\u003eaddress\u003c/a\u003e.\n\n```python\n\u003e\u003e\u003e for span in doc.spans:\n\u003e\u003e\u003e    if span.type == PER:\n\u003e\u003e\u003e        span.extract_fact(names_extractor)\n\n\u003e\u003e\u003e print(doc.spans[:5])\n\u003e\u003e\u003e {_.normal: _.fact.as_dict for _ in doc.spans if _.type == PER}\n[DocSpan(start=6, stop=13, type='LOC', text='Израиля', tokens=[...], normal='Израиль'),\n DocSpan(start=17, stop=24, type='LOC', text='Украине', tokens=[...], normal='Украина'),\n DocSpan(start=25, stop=35, type='PER', text='Йоэль Лион', tokens=[...], normal='Йоэль Лион', fact=DocFact(slots=[...])),\n DocSpan(start=89, stop=106, type='LOC', text='Львовской области', tokens=[...], normal='Львовская область'),\n DocSpan(start=152, stop=158, type='LOC', text='России', tokens=[...], normal='Россия')]\n{'Йоэль Лион': {'first': 'Йоэль', 'last': 'Лион'},\n 'Степан Бандера': {'first': 'Степан', 'last': 'Бандера'},\n 'Петр Порошенко': {'first': 'Петр', 'last': 'Порошенко'},\n 'Бандера': {'last': 'Бандера'},\n 'Виктор Ющенко': {'first': 'Виктор', 'last': 'Ющенко'}}\n```\n\n## Documentation\n\n* \u003ca href=\"http://nbviewer.jupyter.org/github/natasha/natasha/blob/master/docs.ipynb\"\u003eExamples with description + reference\u003c/a\u003e\n* \u003ca href=\"https://habr.com/ru/post/516098/#natasha\"\u003eNatasha section in longread on Natasha project\u003c/a\u003e (in Russian) \n* \u003ca href=\"https://youtu.be/-7XT_U6hVvk?t=951\"\u003eNatasha section of Datafest 2020 talk\u003c/a\u003e (in Russian)\n\n## Evaluation\n\n* Segmentation — \u003ca href=\"https://github.com/natasha/razdel#quality-performance\"\u003eRazdel evalualtion section\u003c/a\u003e\n* Embedding — \u003ca href=\"https://github.com/natasha/navec#evaluation\"\u003eNavec evalualtion section\u003c/a\u003e\n* Morphology — \u003ca href=\"https://github.com/natasha/slovnet#morphology-1\"\u003eSlovnet Morph evaluation section\u003c/a\u003e\n* Syntax — \u003ca href=\"https://github.com/natasha/slovnet#syntax-1\"\u003eSlovnet Syntax evaluation section\u003c/a\u003e\n* NER — \u003ca href=\"https://github.com/natasha/slovnet#ner-1\"\u003eSlovnet NER evaluation section\u003c/a\u003e\n\n## Support\n\n- Chat — https://t.me/natural_language_processing\n- Issues — https://github.com/natasha/natasha/issues\n- Commercial support — 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","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnatasha%2Fnatasha","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnatasha%2Fnatasha","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnatasha%2Fnatasha/lists"}