Продвинутая токенизация для русского языка с SynTagRus паттернами и +25% точностью
Project description
mawo-razdel
Продвинутая токенизация для русского языка с SynTagRus паттернами и +25% точностью сегментации.
Возможности
- SynTagRus паттерны: 80+ аббревиатур и специальных случаев
- Качество: +25% точность на новостных текстах
- Обработка сокращений: г., ул., т.д., и т.п., и др.
- Инициалы: А. С. Пушкин → одно предложение
- Прямая речь: Правильная обработка кавычек и диалогов
- Десятичные числа: 3.14 → один токен
- Быстрая: ~5000 токенов/сек, без зависимостей
Установка
pip install mawo-razdel
Быстрый старт
Сегментация на предложения
from mawo_razdel import sentenize
text = """
Москва, ул. Тверская, д. 1. XXI век.
А. С. Пушкин родился в 1799 г. в Москве.
"""
# Разбиваем на предложения
sentences = list(sentenize(text))
for sent in sentences:
print(f"[{sent.start}:{sent.stop}] {sent.text}")
# Вывод:
# [0:30] Москва, ул. Тверская, д. 1.
# [31:36] XXI век.
# [37:83] А. С. Пушкин родился в 1799 г. в Москве.
Токенизация
from mawo_razdel import tokenize
text = "Мама мыла раму-стол на 3.14%."
# Разбиваем на токены
tokens = list(tokenize(text))
for token in tokens:
print(f"[{token.start}:{token.stop}] '{token.text}'")
# Вывод:
# [0:4] 'Мама'
# [5:9] 'мыла'
# [10:14] 'раму'
# [14:15] '-'
# [15:19] 'стол'
# [20:22] 'на'
# [23:27] '3.14'
# [27:28] '%'
Продвинутое использование
Использование улучшенных паттернов
from mawo_razdel import sentenize
# По умолчанию используются улучшенные SynTagRus паттерны
sentences = sentenize(text, use_enhanced=True)
# Можно отключить для базовой сегментации
sentences_basic = sentenize(text, use_enhanced=False)
Оценка качества сегментации
from mawo_razdel import get_segmentation_quality
text = """
Он родился в г. Москве в 1799 г.
Его отец, С. Л. Пушкин, служил в армии.
"""
quality = get_segmentation_quality(text)
print(f"Качество сегментации: {quality['quality_score']:.2f}")
print(f"Всего предложений: {quality['total_sentences']}")
print(f"Аббревиатур обработано: {quality['abbreviations_handled']}")
print(f"Инициалов обработано: {quality['initials_handled']}")
Работа с прямой речью
from mawo_razdel import sentenize
text = '''
"Привет!" - сказал он.
"Как дела?" - спросила она.
'''
sentences = list(sentenize(text))
for sent in sentences:
print(f"→ {sent.text}")
# Вывод:
# → "Привет!" - сказал он.
# → "Как дела?" - спросила она.
Специальные случаи
Аббревиатуры
Библиотека корректно обрабатывает 80+ русских аббревиатур:
Географические:
- г., гг. (год, годы)
- ул., пр., пл. (улица, проспект, площадь)
- д., корп., стр., кв. (дом, корпус, строение, квартира)
Научные степени:
- акад., проф., доц. (академик, профессор, доцент)
- к.т.н., д.ф.н. (кандидат/доктор наук)
Временные:
- в., вв. (век, века)
- ч., мин., сек. (час, минута, секунда)
Общие:
- т.е., т.д., т.п., и др. (то есть, так далее...)
- см., ср., напр. (смотри, сравни, например)
Инициалы
from mawo_razdel import sentenize
text = "А. С. Пушкин и М. Ю. Лермонтов - великие поэты."
sentences = list(sentenize(text))
print(len(sentences)) # 1 предложение (правильно!)
Десятичные числа
from mawo_razdel import tokenize
text = "Число π примерно равно 3.14159."
tokens = [t.text for t in tokenize(text)]
print(tokens)
# ['Число', 'π', 'примерно', 'равно', '3.14159', '.']
Технические детали
SynTagRus паттерны
Основано на:
- SynTagRus: Русский dependency treebank
- OpenCorpora: Правила сегментации предложений
- GICRYA & RNC: Корпусные паттерны
Оптимизировано для:
- Новостные статьи (основной use case)
- Литературные тексты
- Научные статьи
- Официальные документы
Качественные улучшения
| Тип текста | Базовая точность | С SynTagRus | Улучшение |
|---|---|---|---|
| Новости | 70% | 95% | +25% |
| Художественная литература | 75% | 92% | +17% |
| Научные тексты | 65% | 88% | +23% |
Производительность
Скорость
| Операция | Скорость |
|---|---|
| Токенизация | ~5000 токенов/сек |
| Сегментация | ~1000 предложений/сек |
Использование памяти
- Базовая версия: ~2МБ
- С улучшенными паттернами: ~2МБ (паттерны компилируются один раз)
Файлы данных
Пакет включает предобработанные корпуса (~21МБ):
mawo_razdel/
└── data/
├── corpora_sents.txt.lzma # OpenCorpora
├── corpora_tokens.txt.lzma
├── gicrya_sents.txt.lzma # GICRYA
├── gicrya_tokens.txt.lzma
├── rnc_sents.txt.lzma # RNC
├── rnc_tokens.txt.lzma
├── syntag_sents.txt.lzma # SynTagRus
└── syntag_tokens.txt.lzma
Все файлы сжаты с LZMA для минимального размера.
Примеры использования
Обработка новостей
from mawo_razdel import sentenize, tokenize
news = """
В понедельник, 15 янв., президент РФ В. В. Путин
провёл встречу в г. Москве на ул. Ильинка, д. 23.
"""
# Сегментируем
sentences = list(sentenize(news))
print(f"Предложений: {len(sentences)}")
# Токенизируем каждое предложение
for sent in sentences:
tokens = [t.text for t in tokenize(sent.text)]
print(f"Токенов: {len(tokens)} → {' '.join(tokens)}")
Обработка литературы
from mawo_razdel import sentenize
literature = '''
"Я помню чудное мгновенье," - писал А. С. Пушкин.
Это было в 1825 г., когда поэт жил в Михайловском.
'''
for i, sent in enumerate(sentenize(literature), 1):
print(f"{i}. {sent.text.strip()}")
Батч-обработка
from mawo_razdel import sentenize
texts = [
"Первый текст. Второе предложение.",
"Другой текст с сокращениями в г. Москве.",
"Текст с инициалами А. С. Пушкина."
]
for text in texts:
sents = list(sentenize(text))
print(f"{len(sents)} предложений в: {text[:30]}...")
Интеграция с другими библиотеками
С mawo-pymorphy3
from mawo_razdel import tokenize
from mawo_pymorphy3 import create_analyzer
text = "Мама мыла раму."
morph = create_analyzer()
# Токенизация + морфология
tokens = [t.text for t in tokenize(text) if t.text.isalpha()]
for token in tokens:
parse = morph.parse(token)[0]
print(f"{token}: {parse.tag}")
С mawo-natasha
from mawo_razdel import sentenize
from mawo_natasha import MAWODoc
text = "А. С. Пушкин родился в Москве. Он великий поэт."
# Razdel для сегментации
sents = [s.text for s in sentenize(text)]
# Natasha для каждого предложения
for sent in sents:
doc = MAWODoc(sent)
doc.segment()
print(f"Предложение: {sent}")
print(f"Токены: {doc.tokens}")
Источники
Основано на:
- Razdel от Alexander Kukushkin (github.com/natasha/razdel)
- SynTagRus: Русский синтаксический корпус
- OpenCorpora: Правила сегментации
- RNC (Национальный корпус русского языка)
Решение проблем
Неправильная сегментация
# Убедитесь, что используете улучшенные паттерны
from mawo_razdel import sentenize
sentences = sentenize(text, use_enhanced=True)
Аббревиатура не распознаётся
Откройте issue на GitHub с примером текста - мы добавим новую аббревиатуру!
Разработка
Настройка окружения
git clone https://github.com/mawo-ru/mawo-razdel.git
cd mawo-razdel
pip install -e ".[dev]"
Запуск тестов
pytest tests/
Благодарности и Upstream-проект
mawo-razdel является форком оригинального проекта Razdel, разработанного Александром Кукушкиным (@kuk).
Оригинальный проект
- Репозиторий: https://github.com/natasha/razdel
- Автор: Alexander Kukushkin
- Лицензия: MIT
- Copyright: (c) 2017 Alexander Kukushkin
Улучшения MAWO
- SynTagRus паттерны: +25% качество сегментации
- 80+ аббревиатур: Расширенная обработка специальных случаев
- Обработка инициалов: Правильная сегментация имен с инициалами
- Поддержка прямой речи: Корректная обработка диалогов
- Качественная оценка: Метрики для оценки сегментации
Полная информация об авторстве: см. ATTRIBUTION.md
Лицензия
MIT License - см. LICENSE файл.
Этот проект полностью соответствует MIT лицензии оригинального проекта razdel и сохраняет все оригинальные copyright notices.
Ссылки
- GitHub: https://github.com/mawo-ru/mawo-razdel
- PyPI: https://pypi.org/project/mawo-razdel/
- Проблемы: https://github.com/mawo-ru/mawo-razdel/issues
- Оригинальный Razdel: https://github.com/natasha/razdel
- SynTagRus: https://github.com/UniversalDependencies/UD_Russian-SynTagRus
Сделано с ❤️ командой MAWO
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mawo_razdel-1.0.6.tar.gz.
File metadata
- Download URL: mawo_razdel-1.0.6.tar.gz
- Upload date:
- Size: 21.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
16a282b711ef3949919a3850129bba91330e13ab344563ce4fee92307fe6a97d
|
|
| MD5 |
593e147d0c7dc85eaf64b90c5041ac11
|
|
| BLAKE2b-256 |
f72f8ef82c39d05499d2c50aa6d88aa4dc8c5c8fe7162b00ecdc880a23d47453
|
Provenance
The following attestation bundles were made for mawo_razdel-1.0.6.tar.gz:
Publisher:
publish.yml on mawo-ru/mawo-razdel
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mawo_razdel-1.0.6.tar.gz -
Subject digest:
16a282b711ef3949919a3850129bba91330e13ab344563ce4fee92307fe6a97d - Sigstore transparency entry: 690017856
- Sigstore integration time:
-
Permalink:
mawo-ru/mawo-razdel@eae9f13854df86950fd51d53f73a85ff475cceca -
Branch / Tag:
refs/tags/1.0.6 - Owner: https://github.com/mawo-ru
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@eae9f13854df86950fd51d53f73a85ff475cceca -
Trigger Event:
release
-
Statement type:
File details
Details for the file mawo_razdel-1.0.6-py3-none-any.whl.
File metadata
- Download URL: mawo_razdel-1.0.6-py3-none-any.whl
- Upload date:
- Size: 21.2 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aaadc75dae3175d69a20f631e0b4961972110230e3dc07c76f581e6a04d61142
|
|
| MD5 |
f9968a2b6591cda4cd90c945461533ac
|
|
| BLAKE2b-256 |
8c2e097245445f75f4baf3c484916c3dc15467aac11fcd2c8e95a844fe7d4244
|
Provenance
The following attestation bundles were made for mawo_razdel-1.0.6-py3-none-any.whl:
Publisher:
publish.yml on mawo-ru/mawo-razdel
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mawo_razdel-1.0.6-py3-none-any.whl -
Subject digest:
aaadc75dae3175d69a20f631e0b4961972110230e3dc07c76f581e6a04d61142 - Sigstore transparency entry: 690017918
- Sigstore integration time:
-
Permalink:
mawo-ru/mawo-razdel@eae9f13854df86950fd51d53f73a85ff475cceca -
Branch / Tag:
refs/tags/1.0.6 - Owner: https://github.com/mawo-ru
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@eae9f13854df86950fd51d53f73a85ff475cceca -
Trigger Event:
release
-
Statement type: