razdel -RULE -Basis System für russische Satz- und Wort -Tokenisierung.
> >> 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 unterstützt Python 3.7+ und Pypy 3.
$ pip install razdelMaterialien sind in Russisch:
Leider ist es keine einzige richtige Möglichkeit, Text in Sätze und Token aufzuteilen. Zum Beispiel kann man «Как же так?! Захар...» — воскликнут Пронин. In drei Sätze ["«Как же так?!", "Захар...»", "— воскликнут Пронин."] Während razdel es in zwei ["«Как же так?!", "Захар...» — воскликнут Пронин."] . Welche Woup ist der richtige Weg zum Tokenizer т.е. ? Man kann sich in т.|е. , razdel teilt sich in т|.|е|. .
razdel versucht, die Segion dieser 4 Datensätze nachzuahmen: Syntagrus, OpenCorpora, Gicrya und RNC. Diese Datensätze bestehen hauptsächlich aus Nachrichten und Fiktion. razdel -Regeln sind für die Arten von Texten optimiert. Die Bibliothek kann bei Otomains wie sozialen Medien, wissenschaftlichen Artikeln und rechtlichen Dokumenten schlechter abschneiden.
Wir messen die absolute Anzahl von Fehlern. Es gibt viele triviale Fälle in der Tokenisierungsaufgabe. Zum Beispiel чуть-чуть?! Ist nicht nicht travial, man kann es in чуть|-|чуть|?|! Während die richtige Tokenisierung чуть-чуть|?! Solche Beispiele sind selten. Die überwiegende Mehrheit der Fälle ist trivial, zum Beispiel Text в 5 часов ... wird auch über Python Native str.split в| |5| |часов| |... korrekt tokenisiert. в| |5| |часов| |... Aufgrund der großen Anzahl trivialer Fallqualität aller Segmenators ist es hoch, es schwierig zu vergleichen, zwischen den Prüfungen 99,33%, 99,95%und 99,88%und 99,8%und 99,8%zu vergleichen. Wir geben also die absolute Anzahl von Fehlern an.
errors - Anzahl der Fehler pro 1000 Token/Sätze. Betrachten Sie beispielsweise Etalon Segtion ist что-то|? , Vorhersage ist что|-|то? Die Anzahl der Fehler beträgt 3: 1 für fehlende Split то? + 2 für zusätzliche Spaltungen что|-|то .
time - Sekunden, die zur Verarbeitung des ganzen Datas genommen wurden.
spacy_tokenize , aatimofeev und andere A in Naeval/Segment/Models definiert. Tabellen werden in Naeval/Segment/main.ipynb berechnet.
| Korpora | Syntag | Gicrya | RNC | |||||
|---|---|---|---|---|---|---|---|---|
| Fehler | Zeit | Fehler | Zeit | Fehler | Zeit | Fehler | Zeit | |
| Re.findall ( w+| d+| p+) | 24 | 0,5 | 16 | 0,5 | 19 | 0,4 | 60 | 0,4 |
| Raum | 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 |
| Korpora | Syntag | Gicrya | RNC | |||||
|---|---|---|---|---|---|---|---|---|
| Fehler | Zeit | Fehler | Zeit | Fehler | Zeit | Fehler | Zeit | |
| 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.SENGENIZE | 52 | 6.1 | 7 | 3.9 | 72 | 4.5 | 59 | 7.5 |
Dev Env
python -m venv ~ /.venvs/natasha-razdel
source ~ /.venvs/natasha-razdel/bin/activate
pip install -r requirements/dev.txt
pip install -e .Prüfen
make test
make int # 2000 integration testsFreigeben
# Update setup.py version
git commit -am ' Up version '
git tag v0.5.0
git push
git push --tags mystem auf syntag
# see naeval/data
cat syntag_tokens.txt | razdel-ctl sample 1000 | razdel-ctl gen | razdel-ctl diff --show moses_tokenize | lessNicht-Travial-Token-Tests
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.txtAktualisieren Sie Integrationstests
cd tests/data/
pv sents.txt | razdel-ctl up sentenize > t ; mv t sents.txt razdel und moses diff
cat data/ * _tokens.txt | razdel-ctl sample 1000 | razdel-ctl gen | razdel-ctl up tokenize | razdel-ctl diff moses_tokenize | less razdel -Leistung
cat data/ * _tokens.txt | razdel-ctl sample 10000 | pv -l | razdel-ctl gen | razdel-ctl diff tokenize | wc -l