Natasha يحل مهام NLP الأساسية للغة الروسية: الرمز المميز ، تجزئة الجملة ، تضمين الكلمات ، وضع العلامات على التشكل ، العلم ، تطبيع العبارة ، تحليل بناء الجملة ، علامات NER ، استخراج الحقيقة. الجودة في كل مهمة متشابهة أو أفضل من Sotas الحالية للغة الروسية في المقالات الإخبارية ، انظر قسم التقييم. ناتاشا ليست مشروعًا بحثيًا ، تم تصميم التقنيات الأساسية للإنتاج. نحن نولي اهتماما لحجم النموذج واستخدام ذاكرة الوصول العشوائي والأداء. النماذج تعمل على وحدة المعالجة المركزية ، استخدم numpy للاستدلال.
تدمج ناتاشا المكتبات من مشروع ناتاشا تحت واجهة برمجة تطبيقات واحدة مريحة:
قد تتغير API ، لأن المهام الحقيقية النظر في استخدام المكتبات ذات المستوى المنخفض من مشروع Natasha. النماذج المحسنة للمقالات الإخبارية ، قد تكون الجودة في مجال آخر أقل. لاستخدام
NamesExtractorالقديم ، قم بتثبيت PipAddressExtactorpip install natasha<1 yargy<0.13
ناتاشا تدعم بيثون 3.7+ و pypy3:
$ pip install natasha استيراد وتهيئة الوحدات النمطية وإنشاء كائن Doc .
> >> 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 ) تقسيم النص إلى الرموز المميزة والعالم. يحدد tokens وخصائص sents من doc . يستخدم Razdel داخليا.
> >> 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 = [...])] لكل مستخلص رمز العلامات المورفولوجيا الغنية. يعتمد على خطوة التجزئة. يحدد pos feats خصائص doc.tokens . يستخدم نموذج مورفولوجيا Slovnet داخليًا.
استدعاء morph.print() لتصور علامة التشكل.
> >> 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
... lemmatize كل رمز. يعتمد على خطوة التشكل. يحدد خاصية lemma من doc.tokens . يستخدم pymorphy داخليا.
> >> 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 = 'йоэль' )]
{ 'Посол' : 'посол' ,
'Израиля' : 'израиль' ,
'на' : 'на' ,
'Украине' : 'украина' ,
'Йоэль' : 'йоэль' ,
'Лион' : 'лион' ,
'признался' : 'признаться' ,
',' : ',' ,
'что' : 'что' ,
'пришел' : 'прийти' ,
'в' : 'в' ,
'шок' : 'шок' ,
'узнав' : 'узнать' ,
'о' : 'о' ,
... لكل جملة تشغيل بناء جملة محلل. يعتمد على خطوة التجزئة. يحدد id ، head_id ، خصائص rel من doc.tokens . يستخدم نموذج بناء الجملة Slovnet داخليًا.
استخدم syntax.print() لتصور ترميز بناء الجملة. يستخدم ipymarkup داخليا.
> >> 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
... استخراج Standart المسماة الكيانات: الأسماء ، المواقع ، المنظمات. يعتمد على خطوة التجزئة. يحدد spans doc . يستخدم نموذج NER Slovnet داخليًا.
استدعاء ner.print() لتصور ner tarkup. يستخدم ipymarkup داخليا.
> >> 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 ────
было отменено судом . لكل عمل ner تطبيق إجراء التطبيع. يعتمد على خطوات NER ، مورفولوجيا وبناء الجملة. يحدد الممتلكات normal من doc.spans .
لا يمكن للمرء أن يقتصر على كل رمز داخلي داخل الكيان ، وإلا فإن "органации украинвمس нционали خصم" "سيصبح" оаанизациция украинرى ". يستخدم Natasha تبعيات بناء الجملة لإنتاج "организацици украинских нционали خصم".
> >> 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 = 'Россия' )]
{ 'Израиля' : 'Израиль' ,
'Украине' : 'Украина' ,
'Львовской области' : 'Львовская область' ,
'России' : 'Россия' ,
'Организации украинских националистов (ОУН)' : 'Организация украинских националистов (ОУН)' ,
'Степана Бандеры' : 'Степан Бандера' ,
'Петру Порошенко' : 'Петр Порошенко' ,
'Бандере' : 'Бандера' ,
'Украины' : 'Украина' ,
'Верховной Рады' : 'Верховная Рада' ,
'Бандеры' : 'Бандера' ,
'Организации украинских националистов' : 'Организация украинских националистов' ,
'Виктора Ющенко' : 'Виктор Ющенко' } تحليل PER كيانات مسماة في FirstName ، اللقب والمعنى. يعتمد على خطوة ner. يحدد خاصية fact doc.spans . يستخدم yargy-parser داخليا.
ناتاشا أيضا بنيت مستخلصات في التواريخ ، والمال ، والعنوان.
> >> 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' : 'Ющенко' }}ديف بيئة
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امتحان
make testمستندات
make exec-docsيطلق
# 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