Skip to main content

Улучшенный морфологический анализатор для русского языка с DAWG-оптимизацией и сокращением памяти на 90%

Project description

mawo-pymorphy3

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

Улучшенный морфологический анализатор для русского языка с DAWG-оптимизацией и сокращением потребления памяти на 90%.

Возможности

  • DAWG Оптимизация: 500МБ → 50МБ (уменьшение в 10 раз, без потерь)
  • Работа офлайн: После установки не требует интернета
  • Потокобезопасность: Безопасно для многопоточного использования
  • OpenCorpora 2025: Самый свежий словарь русского языка
  • Быстрая загрузка: ~1-2 секунды с кэшем (против 30-60 секунд разбора XML)
  • 100% Совместимость: Полная замена для pymorphy3

Установка

pip install mawo-pymorphy3

С дополнительными зависимостями

# Безопасность (рекомендуется для production)
pip install mawo-pymorphy3[security]

# Красивый вывод в консоль
pip install mawo-pymorphy3[rich]

# Все дополнения
pip install mawo-pymorphy3[all]

Быстрый старт

from mawo_pymorphy3 import create_analyzer

# Создаём анализатор (автоматически загружает DAWG словарь)
analyzer = create_analyzer()

# Разбираем русские слова
word = analyzer.parse("стали")[0]
print(word.tag)           # VERB,perf,intr plur,past,indc
print(word.normal_form)   # стать
print(word.inflect({"sing", "femn"}))  # стала

# Морфологический анализ
for parse in analyzer.parse("дом"):
    print(f"{parse.word} -> {parse.normal_form} ({parse.tag})")

Продвинутое использование

Потокобезопасный синглтон

from mawo_pymorphy3 import get_global_analyzer

# Получаем глобальный экземпляр (потокобезопасный)
analyzer = get_global_analyzer()

Анализ падежей

# Поддержка русских падежей
word = analyzer.parse("дома")[0]

# Получаем все падежные формы
cases = {
    "именительный": word.inflect({"nomn"}),
    "родительный": word.inflect({"gent"}),
    "дательный": word.inflect({"datv"}),
    "винительный": word.inflect({"accs"}),
    "творительный": word.inflect({"ablt"}),
    "предложный": word.inflect({"loct"}),
}

for case_name, form in cases.items():
    if form:
        print(f"{case_name}: {form.word}")

Управление DAWG кэшем

from mawo_pymorphy3 import MAWODictionaryManager

manager = MAWODictionaryManager()

# Проверяем наличие DAWG кэша
if manager.is_dawg_cache_available():
    print("✅ DAWG кэш готов")
else:
    # Создаём DAWG кэш из OpenCorpora XML
    manager.build_dawg_cache()

Производительность

Использование памяти

Формат словаря Память Время загрузки
OpenCorpora XML ~500МБ 30-60 сек
DAWG (по умолчанию) ~50МБ 1-2 сек
DAWG + pickle кэш ~50МБ <1 сек

Экономия памяти: 90%

Бенчмарки

import time
from mawo_pymorphy3 import create_analyzer

analyzer = create_analyzer()

# Прогрев
analyzer.parse("тест")

# Замер производительности
start = time.time()
for _ in range(10000):
    analyzer.parse("стали")
elapsed = time.time() - start

print(f"10000 разборов: {elapsed:.2f}сек ({10000/elapsed:.0f} слов/сек)")
# Типично: ~15k-25k слов/сек (однопоточно)

Файлы данных

Пакет включает оптимизированные DAWG словари (~13МБ):

mawo_pymorphy3/
├── dicts_ru/
│   ├── words.dawg                      # Основной словарь
│   ├── prediction-suffixes-0.dawg      # Суффиксы для предсказания
│   ├── prediction-suffixes-1.dawg
│   └── prediction-suffixes-2.dawg
└── data/
    └── dict.opcorpora.xml              # OpenCorpora 2025 (опционально)

📦 Репозиторий данных MAWO

Все справочные данные, модели и корпуса для библиотек MAWO доступны в отдельном репозитории:

🔗 mawo-nlp-data

Репозиторий содержит:

  • OpenCorpora 2025 (69MB) - полный корпус для продвинутого морфологического анализа
  • SlovNet модели (2-3MB каждая) - NER, морфология, синтаксис
  • Navec эмбеддинги (26MB) - векторные представления слов
  • Словари имён (2025) - мужские/женские имена, фамилии, отчества

Скачать полный OpenCorpora (опционально)

Для продвинутого использования или пересборки словаря:

# Скачать с релизов MAWO (69МБ)
wget https://github.com/mawo-ru/mawo-nlp-data/releases/download/v1.0.0/opencorpora-2025.tar.gz
tar -xzf opencorpora-2025.tar.gz -C ~/.mawo-pymorphy3/

# Проверить контрольную сумму
wget https://github.com/mawo-ru/mawo-nlp-data/releases/download/v1.0.0/checksums.txt
sha256sum -c checksums.txt

Подробнее о данных, моделях и способах установки см. в mawo-nlp-data README.

Миграция с pymorphy3

100% совместимость! Просто замените импорт:

# Было
from pymorphy3 import MorphAnalyzer
analyzer = MorphAnalyzer()

# Стало
from mawo_pymorphy3 import create_analyzer
analyzer = create_analyzer()

Все API остаются прежними. Ваш код будет работать без изменений.

Настройка

Свой путь к словарю

from pathlib import Path
from mawo_pymorphy3 import MAWOMorphAnalyzer

analyzer = MAWOMorphAnalyzer(
    dict_path=Path("/свой/путь/к/словарям")
)

Отключить DAWG оптимизацию

# Использовать оригинальный XML словарь (медленнее, больше памяти)
analyzer = create_analyzer(use_dawg=False)

Технические детали

DAWG (Направленный ациклический граф слов)

  • Сжатие: Без потерь, 100% точность
  • Структура: Префиксное дерево с общими суффиксами
  • Поиск: O(|слово|) временная сложность
  • Размер: ~50МБ для 391,845 лексем

Источники словаря

  • OpenCorpora 2025: Морфологический словарь русского языка
  • Ревизия: 417260 (сентябрь 2025)
  • Лексем: 391,845
  • Словоформ: ~5 миллионов

Потокобезопасность

Все операции потокобезопасны:

  • Глобальный синглтон использует threading.Lock
  • DAWG словари неизменяемы (только чтение)
  • Нет разделяемого изменяемого состояния

Решение проблем

Модуль не найден

# Если видите: ModuleNotFoundError: No module named 'mawo_pymorphy3'
pip install --upgrade mawo-pymorphy3

Отсутствует DAWG кэш

# Создайте кэш вручную
from mawo_pymorphy3 import MAWODictionaryManager
manager = MAWODictionaryManager()
manager.build_dawg_cache()

Нехватка памяти

# Используйте DAWG (по умолчанию, только 50МБ)
analyzer = create_analyzer(use_dawg=True)

Разработка

Настройка окружения

git clone https://github.com/mawo-ru/mawo-pymorphy3.git
cd mawo-pymorphy3
pip install -e ".[dev]"

Запуск тестов

pytest tests/

Форматирование кода

black mawo_pymorphy3/
ruff check mawo_pymorphy3/

Благодарности

Основано на pymorphy3 и pymorphy2 от Михаила Коробова и контрибьюторов.

Улучшения MAWO:

  • DAWG оптимизация памяти (сокращение на 90%)
  • Потокобезопасный паттерн синглтон
  • Архитектура offline-first
  • Интеграция с OpenCorpora 2025

Лицензия

Лицензия MIT - см. файл LICENSE.

Ссылки


Сделано с ❤️ командой 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

mawo_pymorphy3-1.0.0.tar.gz (6.8 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mawo_pymorphy3-1.0.0-py3-none-any.whl (6.9 MB view details)

Uploaded Python 3

File details

Details for the file mawo_pymorphy3-1.0.0.tar.gz.

File metadata

  • Download URL: mawo_pymorphy3-1.0.0.tar.gz
  • Upload date:
  • Size: 6.8 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for mawo_pymorphy3-1.0.0.tar.gz
Algorithm Hash digest
SHA256 2ec06e6069983725a0b0abfb5706ca13803901ec4b5ebaee67b81dc3e940a6eb
MD5 919cd0dab0fa17f732212236e4a6a8a9
BLAKE2b-256 e3381cd2c5b257e587074293c3757a5cf784bad5a4034c085656ff54fbd9dff8

See more details on using hashes here.

File details

Details for the file mawo_pymorphy3-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: mawo_pymorphy3-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 6.9 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for mawo_pymorphy3-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 dac851ce2f631ef8b5e04b0eaec7b3276f9dc6cfb1f557bf705d37ea95973917
MD5 faf47953a72540391a8d1403b73b2bce
BLAKE2b-256 b6d63a3f2d66be4348e06c233497aa9f67938da2d07c31aade1282083f6568cd

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page