Sistema basado en la regla de razdel para oraciones rusas y tokenización de palabras.
> >> 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 apoya a Python 3.7+ y Pypy 3.
$ pip install razdelLos materiales están en ruso:
Desafortunadamente, no es una forma correcta de dividir el texto en oraciones y fichas. Por ejemplo, uno puede dividir «Как же так?! Захар...» — воскликнут Пронин. En tres oraciones ["«Как же так?!", "Захар...»", "— воскликнут Пронин."] razdel ["«Как же так?!", "Захар...» — воскликнут Пронин."] . ¿Cuál es la forma correcta de tokenizer, т.е. ,? Uno puede dividirse en т.|е. , razdel se divide en т|.|е|. .
razdel intenta imitar la segción de estos 4 conjuntos de datos: Syntagrus, OpenCorpora, Gicrya y RNC. Estos conjuntos de datos consisten principalmente en noticias y ficción. Las reglas razdel están optimizadas para TH, tipos de textos. La biblioteca puede funcionar peor en otomains como redes sociales, artículos científicos, documentos legales.
Medimos el número absoluto de errores. Hay muchos casos triviales en la tarea de tokenización. Por ejemplo, ¿texto чуть-чуть?! No es no travial, uno puede dividirlo en чуть|-|чуть|?|! ¿Mientras que la tokenización correcta es чуть-чуть|?! , Tales ejemplos son raros. La gran mayoría de los casos son triviales, por ejemplo, texto в 5 часов ... se tokenizan correctamente incluso a través de Python Native str.split In в| |5| |часов| |... Debido a la gran cantidad de casos triviales de calidad general de todos los segmenadores es alta, es difícil comparar la diferenciación entre el examen 99.33%, 99.95%y 99.88%, y 99.8%, y 99.8%, por lo que informamos el número absoluto de errores.
errors : número de errores por 1000 tokens/sentencias. Por ejemplo, ¿considerar la segción de etalon es что-то|? , La predicción es что|-|то? , El número de errores es 3: 1 para la división faltante то? + 2 para divisiones adicionales что|-|то .
time : segundos tomados para procesar toda la base de datos.
spacy_tokenize , aatimofeev y otros A definidos en naeval/segmento/modelos.py, para enlaces a modelos ver el registro Naeval. Las tablas se calculan en Naeval/segmento/main.ipynb.
| Corp para | Sintag | Gicrya | RNC | |||||
|---|---|---|---|---|---|---|---|---|
| Errores | Tiempo | Errores | Tiempo | Errores | Tiempo | Errores | Tiempo | |
| Re.findall ( w+| d+| p+) | 24 | 0.5 | 16 | 0.5 | 19 | 0.4 | 60 | 0.4 |
| Espacio | 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 |
| Mosestes | 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 |
| Corp para | Sintag | Gicrya | RNC | |||||
|---|---|---|---|---|---|---|---|---|
| Errores | Tiempo | Errores | Tiempo | Errores | Tiempo | Errores | Tiempo | |
| 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 |
| Mosestes | 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.sentenizar | 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 .Prueba
make test
make int # 2000 integration testsLiberar
# Update setup.py version
git commit -am ' Up version '
git tag v0.5.0
git push
git push --tags Errores mystem en syntag
# see naeval/data
cat syntag_tokens.txt | razdel-ctl sample 1000 | razdel-ctl gen | razdel-ctl diff --show moses_tokenize | lessPruebas de token no traviales
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.txtActualizar pruebas de integración
cd tests/data/
pv sents.txt | razdel-ctl up sentenize > t ; mv t sents.txt razdel y moses diff
cat data/ * _tokens.txt | razdel-ctl sample 1000 | razdel-ctl gen | razdel-ctl up tokenize | razdel-ctl diff moses_tokenize | less Rendimiento razdel
cat data/ * _tokens.txt | razdel-ctl sample 10000 | pv -l | razdel-ctl gen | razdel-ctl diff tokenize | wc -l