Улучшенный морфологический анализатор для русского языка с DAWG-оптимизацией и сокращением памяти на 90%
Project description
mawo-pymorphy3
Улучшенный морфологический анализатор для русского языка с 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 доступны в отдельном репозитории:
Репозиторий содержит:
- 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.
Ссылки
- GitHub: https://github.com/mawo-ru/mawo-pymorphy3
- PyPI: https://pypi.org/project/mawo-pymorphy3/
- Проблемы: https://github.com/mawo-ru/mawo-pymorphy3/issues
- Данные и модели: https://github.com/mawo-ru/mawo-nlp-data
- Оригинальный pymorphy2: https://github.com/pymorphy2/pymorphy2
- Оригинальный pymorphy3: https://github.com/no-plagiarism/pymorphy3
- OpenCorpora: http://opencorpora.org/
Сделано с ❤️ командой 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_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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2ec06e6069983725a0b0abfb5706ca13803901ec4b5ebaee67b81dc3e940a6eb
|
|
| MD5 |
919cd0dab0fa17f732212236e4a6a8a9
|
|
| BLAKE2b-256 |
e3381cd2c5b257e587074293c3757a5cf784bad5a4034c085656ff54fbd9dff8
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dac851ce2f631ef8b5e04b0eaec7b3276f9dc6cfb1f557bf705d37ea95973917
|
|
| MD5 |
faf47953a72540391a8d1403b73b2bce
|
|
| BLAKE2b-256 |
b6d63a3f2d66be4348e06c233497aa9f67938da2d07c31aade1282083f6568cd
|