Sistem berbasis razdel -rule untuk kalimat Rusia dan tokenisasi kata.
> >> 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 mendukung Python 3.7+ dan Pypy 3.
$ pip install razdelBahan dalam bahasa Rusia:
Sayangnya, tidak ada cara yang benar untuk membagi teks menjadi kalimat dan token. Misalnya, seseorang dapat membagi «Как же так?! Захар...» — воскликнут Пронин. Menjadi tiga kalimat ["«Как же так?!", "Захар...»", "— воскликнут Пронин."] Sementara razdel membagi menjadi dua ["«Как же так?!", "Захар...» — воскликнут Пронин."] . Apa yang menjadi cara yang benar untuk tokenizer т.е. ? Seseorang dapat berpisah menjadi т.|е. , razdel membagi menjadi т|.|е|. .
razdel mencoba meniru segtion dari 4 kumpulan data ini: Syntagrus, OpenCorpora, Gicrya dan RNC. Kumpulan data ini terutama terdiri dari berita dan fiksi. Aturan razdel dioptimalkan untuk jenis teks. Perpustakaan dapat tampil lebih buruk pada otomain seperti media sosial, artikel ilmiah, dokumen hukum.
Kami mengukur jumlah kesalahan absolut. Ada banyak kasus sepele dalam tugas tokenisasi. Misalnya, SMS чуть-чуть?! Tidak non-travial, seseorang dapat membaginya menjadi чуть|-|чуть|?|! Sementara tokenisasi yang benar чуть-чуть|?! , Contoh -contoh seperti itu jarang terjadi. Sebagian besar kasus sepele, misalnya teks в 5 часов ... dengan benar secara tokenisasi bahkan melalui python asli str.split ke в| |5| |часов| |... Karena jumlah besar kasus sepele keseluruhan dari semua segmenator tinggi, sulit untuk membandingkan berbeda antara untuk ujian 99,33%, 99,95%dan 99,88%, dan 99,8%, dan 99,8%, jadi kami melaporkan jumlah kesalahan absolut.
errors - Jumlah kesalahan per 1000 token/hukuman. Misalnya, pertimbangkan Segtion Etalon adalah что-то|? , Prediksi adalah что|-|то? , Jumlah kesalahan adalah 3: 1 untuk perpecahan yang hilang то? + 2 untuk perpecahan tambahan что|-|то .
time - detik diambil untuk memproses seluruh data.
spacy_tokenize , aatimofeev dan lainnya yang didefinisikan dalam naeval/segmen/model.py, untuk tautan ke model lihat Naeval Registry. Tabel dihitung dalam naeval/segmen/main.ipynb.
| Korpora | Sintag | Gicrya | RNC | |||||
|---|---|---|---|---|---|---|---|---|
| Kesalahan | Waktu | Kesalahan | Waktu | Kesalahan | Waktu | Kesalahan | Waktu | |
| Re.findall ( w+| d+| p+) | 24 | 0,5 | 16 | 0,5 | 19 | 0.4 | 60 | 0.4 |
| Ruang angkasa | 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 |
| Mistem | 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 | Sintag | Gicrya | RNC | |||||
|---|---|---|---|---|---|---|---|---|
| Kesalahan | Waktu | Kesalahan | Waktu | Kesalahan | Waktu | Kesalahan | Waktu | |
| 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 .Tes
make test
make int # 2000 integration testsMelepaskan
# Update setup.py version
git commit -am ' Up version '
git tag v0.5.0
git push
git push --tags Kesalahan mystem di syntag
# see naeval/data
cat syntag_tokens.txt | razdel-ctl sample 1000 | razdel-ctl gen | razdel-ctl diff --show moses_tokenize | lessTes token non-travial
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.txtPerbarui tes integrasi
cd tests/data/
pv sents.txt | razdel-ctl up sentenize > t ; mv t sents.txt razdel dan moses Diff
cat data/ * _tokens.txt | razdel-ctl sample 1000 | razdel-ctl gen | razdel-ctl up tokenize | razdel-ctl diff moses_tokenize | less Kinerja razdel
cat data/ * _tokens.txt | razdel-ctl sample 10000 | pv -l | razdel-ctl gen | razdel-ctl diff tokenize | wc -l