ระบบที่ใช้ 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 พยายามเลียนแบบการแบ่งแยกของชุดข้อมูลทั้ง 4 ชุดนี้: Syntagrus, OpenCorpora, Gicrya และ RNC ชุดข้อมูลเหล่านี้ส่วนใหญ่ประกอบด้วยข่าวและนิยาย กฎ razdel ได้รับการปรับให้เหมาะสมสำหรับข้อความประเภทหนึ่ง ห้องสมุดอาจทำงานได้แย่ลงใน otomains เช่นโซเชียลมีเดียบทความทางวิทยาศาสตร์เอกสารทางกฎหมาย
เราวัดจำนวนข้อผิดพลาดสัมบูรณ์ มีกรณีเล็กน้อยในงานโทเค็น ตัวอย่างเช่นส่งข้อความ чуть-чуть?! ไม่ใช่ไม่ใช่การเดินทางเราอาจแบ่งออกเป็น чуть|-|чуть|?|! ในขณะที่ tokenization ที่ถูกต้องคือ чуть-чуть|?! ตัวอย่างดังกล่าวหายาก กรณีส่วนใหญ่เป็นเรื่องเล็กน้อยตัวอย่างเช่นข้อความ в 5 часов ... มีการทำ tokenized อย่างถูกต้องแม้ผ่าน Python Native str.split เข้า в| |5| |часов| |... เนื่องจากจำนวนกรณีโดยรวมของ segmenators จำนวนมากนั้นสูงจึงยากที่จะเปรียบเทียบความแตกต่างระหว่างสำหรับการสอบ 99.33%, 99.95%และ 99.88%และ 99.8%และ 99.8%ดังนั้นเราจึงรายงานข้อผิดพลาดทั้งหมด
errors - จำนวนข้อผิดพลาดต่อ 1,000 โทเค็น/โทษจำคุก ตัวอย่างเช่นพิจารณา etalon segtion เป็น что-то|? การทำนายคือ что|-|то? จำนวนข้อผิดพลาดคือ 3: 1 สำหรับการแยกที่หายไป то? + 2 สำหรับการแยกเพิ่มเติม что|-|то .
time - วินาทีในการประมวลผลข้อมูลทั้งหมด
spacy_tokenize , aatimofeev และอื่น ๆ ที่กำหนดไว้ใน naeval/segment/models.py สำหรับลิงก์ไปยังรุ่นดู Naeval Registry ตารางคำนวณใน Naeval/segment/main.ipynb
| บริษัท | การเรียกใช้ | 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 |
| บริษัท | การเรียกใช้ | 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 ข้อผิดพลาด mystem บน syntag
# 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