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材料はロシア語にあります:
残念ながら、テキストを文とトークンに分割する正しい方法は1つではありません。たとえば、 «Как же так?! Захар...» — воскликнут Пронин. 3つの文に["«Как же так?!", "Захар...»", "— воскликнут Пронин."] razdelはそれを2つに分割します["«Как же так?!", "Захар...» — воскликнут Пронин."] 。トークネイザーの正しい方法は何ですかт.е. 1つはт.|е. 、 razdel т|.|е|. 。
razdel 、これらの4つのデータセットのセグメントを模倣しようとします:Syntagrus、OpenCorpora、Gicrya、RNC。これらのデータセットは、主にニュースとフィクションで構成されています。 razdelルールは、テキストの種類に最適化されています。ライブラリは、ソーシャルメディア、科学記事、法的文書などの耳鼻咽喉科でパフォーマンスを悪化させる可能性があります。
エラーの絶対数を測定します。トークン化タスクには、些細なケースがたくさんあります。たとえば、テキストはчуть-чуть?!非トラビアルではありません、人はそれをчуть|-|чуть|?|!正しいトークン化はчуть-чуть|?! 、そのような例はまれです。大多数のケースは些細なものです。たとえば、 в 5 часов ... pythonネイティブのstr.split int в| |5| |часов| |...すべてのセグメネーターの全体的な些細なケースが多いため、Examlpe 99.33%、99.95%および99.88%、99.8%、99.8%の比較は困難です。そのため、絶対数のエラー数を報告します。
errors - 1000トークン/判決にあたりのエラー数。たとえば、Etalon Segtionはчто-то|? 、予測はчто|-|то? 、エラーの数は、分割が欠落している場合は3:1ですかто? + 2 for extra Splits что|-|то 。
time - データベース全体を処理するために秒。
spacy_tokenize 、 aatimofeevおよびその他は、モデルへのリンクについては、NAEVALレジストリを参照してください。テーブルは、Naeval/Segment/main.ipynbで計算されます。
| コーパス | シンタグ | ギクリア | 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 |
| 私の幹 | 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 |
| コーパス | シンタグ | ギクリア | 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 |
dev env
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 syntagのmystemエラー
# 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はdiff
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