Skip to main content

mawo-razdel

PyPI версия Python 3.10+ Лицензия: MIT

Продвинутая токенизация для русского языка с 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).

Оригинальный проект

Улучшения MAWO

  • SynTagRus паттерны: +25% качество сегментации
  • 80+ аббревиатур: Расширенная обработка специальных случаев
  • Обработка инициалов: Правильная сегментация имен с инициалами
  • Поддержка прямой речи: Корректная обработка диалогов
  • Качественная оценка: Метрики для оценки сегментации

Полная информация об авторстве: см. ATTRIBUTION.md

Лицензия

MIT License - см. LICENSE файл.

Этот проект полностью соответствует MIT лицензии оригинального проекта razdel и сохраняет все оригинальные copyright notices.

Ссылки


Сделано с ❤️ командой MAWO

Metadata

Release files for mawo-razdel 1.0.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mawo-razdel 1.0.6
File Size Uploaded
mawo_razdel-1.0.6.tar.gz 21.2 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for mawo-razdel 1.0.6
File Interpreter ABI Platform
mawo_razdel-1.0.6-py3-none-any.whl Python 3 none any Details

Total release size: 42.3 MB

Release files / mawo_razdel-1.0.6.tar.gz

Download URL mawo_razdel-1.0.6.tar.gz
Size 21.2 MB
Tags Source
SHA-256 checksum
How to use checksums
16a282b711ef3949919a3850129bba91330e13ab344563ce4fee92307fe6a97d
BLAKE2b-256 checksum
How to use checksums
f72f8ef82c39d05499d2c50aa6d88aa4dc8c5c8fe7162b00ecdc880a23d47453
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 11, 2025.

Transparency log

Release files / mawo_razdel-1.0.6-py3-none-any.whl

Download URL mawo_razdel-1.0.6-py3-none-any.whl
Size 21.2 MB
Tags Python 3
SHA-256 checksum
How to use checksums
aaadc75dae3175d69a20f631e0b4961972110230e3dc07c76f581e6a04d61142
BLAKE2b-256 checksum
How to use checksums
8c2e097245445f75f4baf3c484916c3dc15467aac11fcd2c8e95a844fe7d4244
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 11, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

1.0.6 This release

2 release files

1.0.5

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page