Metadata-Version: 2.4
Name: mawo-pymorphy3
Version: 1.0.0
Summary: Улучшенный морфологический анализатор для русского языка с DAWG-оптимизацией и сокращением памяти на 90%
Author-email: MAWO Team <team@mawo.ru>
Maintainer-email: MAWO Team <team@mawo.ru>
License: MIT
Project-URL: Homepage, https://github.com/mawo-ru/mawo-pymorphy3
Project-URL: Documentation, https://github.com/mawo-ru/mawo-pymorphy3#readme
Project-URL: Repository, https://github.com/mawo-ru/mawo-pymorphy3
Project-URL: Issues, https://github.com/mawo-ru/mawo-pymorphy3/issues
Project-URL: Changelog, https://github.com/mawo-ru/mawo-pymorphy3/blob/main/CHANGELOG.md
Keywords: nlp,russian,morphology,pymorphy3,dawg,mawo
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: MIT License
Classifier: Natural Language :: Russian
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Text Processing :: Linguistic
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: dawg-python>=0.7.2
Provides-Extra: dev
Requires-Dist: pytest>=7.0; extra == "dev"
Requires-Dist: black>=23.0; extra == "dev"
Requires-Dist: ruff>=0.1.0; extra == "dev"
Requires-Dist: mypy>=1.0; extra == "dev"
Provides-Extra: security
Requires-Dist: defusedxml>=0.7.1; extra == "security"
Provides-Extra: rich
Requires-Dist: rich>=13.0; extra == "rich"
Provides-Extra: all
Requires-Dist: mawo-pymorphy3[dev,rich,security]; extra == "all"
Dynamic: license-file

# mawo-pymorphy3

[![PyPI версия](https://badge.fury.io/py/mawo-pymorphy3.svg)](https://badge.fury.io/py/mawo-pymorphy3)
[![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
[![Лицензия: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

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

## Возможности

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

## Установка

```bash
pip install mawo-pymorphy3
```

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

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

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

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

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

```python
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})")
```

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

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

```python
from mawo_pymorphy3 import get_global_analyzer

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

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

```python
# Поддержка русских падежей
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 кэшем

```python
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%**

### Бенчмарки

```python
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](https://github.com/mawo-ru/mawo-nlp-data)**

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

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

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

```bash
# Скачать с релизов 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](https://github.com/mawo-ru/mawo-nlp-data#readme).

## Миграция с pymorphy3

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

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

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

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

## Настройка

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

```python
from pathlib import Path
from mawo_pymorphy3 import MAWOMorphAnalyzer

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

## Разработка

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

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

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

```bash
pytest tests/
```

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

```bash
black mawo_pymorphy3/
ruff check mawo_pymorphy3/
```

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

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

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

## Лицензия

Лицензия MIT - см. файл [LICENSE](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](https://github.com/mawo-ru)
