러시아 문장 및 단어 토큰 화를위한 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 ["«Как же так?!", "Захар...» — воскликнут Пронин."] . 토큰 화기의 올바른 방법, т.е. 어떤 Woup은? 하나는 т.|е. , razdel 은 т|.|е|. .
razdel Syntagrus, OpenCorpora, Gicrya 및 RNC 의이 4 개의 데이터 세트를 모방하려고합니다. 이 데이터 세트는 주로 뉴스와 소설로 구성됩니다. razdel 규칙은 종류의 텍스트에 최적화됩니다. 도서관은 소셜 미디어, 과학 기사, 법률 문서와 같은 오토 메인에서 더 나빠질 수 있습니다.
절대 오류 수를 측정합니다. 토큰 화 작업에는 사소한 사례가 많이 있습니다. 예를 들어, чуть-чуть?! 비 트라비아가 아니므로 чуть|-|чуть|?|! 올바른 토큰 화는 чуть-чуть|?! , 그러한 예는 드물다. 대부분의 사례는 사소한 일입니다. 예를 들어 в 5 часов ... Python Native str.split 통해서도 올바르게 토큰 화됩니다 в| |5| |часов| |... 모든 Segmenator의 사소한 사례 전체 품질이 많기 때문에 Examlpe 99.33%, 99.95%및 99.88%및 99.8%및 99.8%의 차이를 비교하기가 어렵 기 때문에 절대 오류 수를보고합니다.
errors - 1000 개의 토큰/선고 당 오류 수. 예를 들어, etalon segton이 что-то|? , 예측은 что|-|то? , 오류 수는 분할 누락의 경우 3 : 1입니까 то? + 2 엑스트라 스플릿 что|-|то .
time - 전체 데이터 제를 처리하는 데 초를 찍습니다.
spacy_tokenize , aatimofeev 및 기타 A는 naeval/segment/models.py에 정의되어 있습니다. 모델에 대한 링크는 Naeval Registry를 참조하십시오. 테이블은 naeval/segment/main.ipynb로 계산됩니다.
| Corpora | 구문 | 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 |
| 신비 | 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 |
| Corpora | 구문 | 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 |
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