نظام razdel -Rule القائم على الجملة الروسية ورمز الكلمات.
> >> from razdel import tokenize
> >> tokens = list ( tokenize ( 'Кружка-термос на 0.5л (50/64 см³, 516;...)' ))
> >> tokens
[ Substring ( 0 , 13 , 'Кружка-термос' ),
Substring ( 14 , 16 , 'на' ),
Substring ( 17 , 20 , '0.5' ),
Substring ( 20 , 21 , 'л' ),
Substring ( 22 , 23 , '(' )
...]
>> > [ _ . text for _ in tokens ]
[ 'Кружка-термос' , 'на' , '0.5' , 'л' , '(' , '50/64' , 'см³' , ',' , '516' , ';' , '...' , ')' ] > >> from razdel import sentenize
> >> text = '''
... - "Так в чем же дело?" - "Не ра-ду-ют".
... И т. д. и т. п. В общем, вся газета
... '''
> >> list ( sentenize ( text ))
[ Substring ( 1 , 23 , '- "Так в чем же дело?"' ),
Substring ( 24 , 40 , '- "Не ра-ду-ют".' ),
Substring ( 41 , 56 , 'И т. д. и т. п.' ),
Substring ( 57 , 76 , 'В общем, вся газета' )] razdel يدعم Python 3.7+ و Pypy 3.
$ pip install razdelالمواد باللغة الروسية:
لسوء الحظ ، لا توجد طريقة صحيحة واحدة لتقسيم النص إلى جمل ورموز. على سبيل المثال ، يمكن للمرء أن ينقسم «Как же так?! Захар...» — воскликнут Пронин. في ثلاث جمل [" razdel ["«Как же так?!", "Захар...» — воскликнут Пронин."] ["«Как же так?!", "Захар...»", "— воскликнут Пронин."] ["«Как же так?!", "Захар...» — воскликнут Пронин."] . ما هي الطريقة الصحيحة للرمز المميز т.е. ؟ يمكن للمرء أن ينقسم إلى т.|е. ، razdel ينقسم إلى т|.|е|. .
يحاول razdel محاكاة الفصل بين مجموعات البيانات الأربعة هذه: Syntagrus و OpenCorpora و Gicrya و RNC. تتكون مجموعات البيانات هذه بشكل رئيسي من الأخبار والخيال. يتم تحسين قواعد razdel لـ Th ، أنواع النصوص. قد تؤدي المكتبة أداءً أسوأ على otomains مثل وسائل التواصل الاجتماعي والمقالات العلمية والوثائق القانونية.
نقيس العدد المطلق من الأخطاء. هناك الكثير من الحالات التافهة في مهمة الرمز المميز. على سبيل المثال ، نص чуть-чуть?! ليس غير تجديمي ، يمكن للمرء تقسيمه إلى чуть|-|чуть|?|! في حين أن الرمز المميز الصحيح هو чуть-чуть|?! ، مثل هذه الأمثلة نادرة. الغالبية العظمى من الحالات تافهة ، على سبيل المثال النص в 5 часов ... يتم رمزها بشكل صحيح حتى عن طريق Python الأصلي str.split إلى в| |5| |часов| |... نظرًا للعدد الكبير من الحالات التافهة الجودة الإجمالية لجميع رجال الأعمال ، من الصعب مقارنة مع ذلك بين Comple 99.33 ٪ ، 99.95 ٪ و 99.88 ٪ ، و 99.8 ٪ ، و 99.8 ٪ ، لذلك نبلغ عن العدد المطلق للأخطاء.
errors - عدد الأخطاء لكل 1000 الرموز/الحكم. على سبيل المثال ، فكر في فصل Etalon هو что-то|? التنبؤ هو что|-|то? ، عدد الأخطاء هو 3: 1 للانقسام المفقود то? + 2 لتقسيم إضافي что|-|то .
time - الثواني التي اتخذت لمعالجة البيانات بأكملها.
spacy_tokenize ، aatimofeev وغيرها محددة في naeval/spression/models.py ، للاطلاع على روابط إلى النماذج ، انظر سجل naeval. يتم حساب الجداول في Naeval/Segment/Main.ipynb.
| كوربورا | syntag | gicrya | RNC | |||||
|---|---|---|---|---|---|---|---|---|
| الأخطاء | وقت | الأخطاء | وقت | الأخطاء | وقت | الأخطاء | وقت | |
| re.findall ( w+| d+| p+) | 24 | 0.5 | 16 | 0.5 | 19 | 0.4 | 60 | 0.4 |
| فضاء | 26 | 6.2 | 13 | 5.8 | 14 | 4.1 | 32 | 3.9 |
| nltk.word_tokenize | 60 | 3.4 | 256 | 3.3 | 75 | 2.7 | 199 | 2.9 |
| mystem | 23 | 5.0 | 15 | 4.7 | 19 | 3.7 | 14 | 3.9 |
| Mosestokenizer | 11 | 2.1 | 8 | 1.9 | 15 | 1.6 | 16 | 1.7 |
| segtok.word_tokenize | 16 | 2.3 | 8 | 2.3 | 14 | 1.8 | 9 | 1.8 |
| Aatimofeev/Space_Russian_Tokenizer | 17 | 48.7 | 4 | 51.1 | 5 | 39.5 | 20 | 52.2 |
| Koziev/Rutokenizer | 15 | 1.1 | 8 | 1.0 | 23 | 0.8 | 68 | 0.9 |
| Razdel.Tokenize | 9 | 2.9 | 9 | 2.8 | 3 | 2.0 | 16 | 2.2 |
| كوربورا | syntag | gicrya | RNC | |||||
|---|---|---|---|---|---|---|---|---|
| الأخطاء | وقت | الأخطاء | وقت | الأخطاء | وقت | الأخطاء | وقت | |
| RE.SPLIT ([.؟! ...]) | 114 | 0.9 | 53 | 0.6 | 63 | 0.7 | 130 | 1.0 |
| segtok.split_single | 106 | 17.8 | 36 | 13.4 | 1001 | 1.1 | 912 | 2.8 |
| Mosestokenizer | 238 | 8.9 | 182 | 5.7 | 80 | 6.4 | 287 | 7.4 |
| nltk.sent_tokenize | 92 | 10.1 | 36 | 5.3 | 44 | 5.6 | 183 | 8.9 |
| Deeppavlov/RusentTokenize | 57 | 10.9 | 10 | 7.9 | 56 | 6.8 | 119 | 7.0 |
| Razdel.Sentenize | 52 | 6.1 | 7 | 3.9 | 72 | 4.5 | 59 | 7.5 |
ديف بيئة
python -m venv ~ /.venvs/natasha-razdel
source ~ /.venvs/natasha-razdel/bin/activate
pip install -r requirements/dev.txt
pip install -e .امتحان
make test
make int # 2000 integration testsيطلق
# Update setup.py version
git commit -am ' Up version '
git tag v0.5.0
git push
git push --tags أخطاء mystem على syntag
# see naeval/data
cat syntag_tokens.txt | razdel-ctl sample 1000 | razdel-ctl gen | razdel-ctl diff --show moses_tokenize | lessاختبارات الرمز المميز غير التراخي
pv data/ * _tokens.txt | razdel-ctl gen --recall | razdel-ctl diff space_tokenize > tests.txt
pv data/ * _tokens.txt | razdel-ctl gen --precision | razdel-ctl diff re_tokenize >> tests.txtتحديث اختبارات التكامل
cd tests/data/
pv sents.txt | razdel-ctl up sentenize > t ; mv t sents.txt razdel moses فرق
cat data/ * _tokens.txt | razdel-ctl sample 1000 | razdel-ctl gen | razdel-ctl up tokenize | razdel-ctl diff moses_tokenize | less أداء razdel
cat data/ * _tokens.txt | razdel-ctl sample 10000 | pv -l | razdel-ctl gen | razdel-ctl diff tokenize | wc -l