2 unstable releases
0.2.0 | Mar 13, 2024 |
---|---|
0.1.0 | Mar 12, 2024 |
#1711 in Text processing
275KB
3.5K
SLoC
MOrPh-rS
Мопс — морфологический анализатор для русского языка.
Главное
- Приведение к начальной форме слова.
- Грамматическая характеристика слова: получение грамматической информации о слове.
- Работа с OpenCorpora-совместимыми словарями.
- ✨Производительность✨: скорость разбора в десятки раз превышает PyMorphy2.
Примеры использования
Создание словаря
Инициализация морфологического анализатора требует словарь OpenCorpora, представленный на сайте, выходной каталог, где будут сохранены бинарные данные, и указание языка (на данный момент имеется только русский язык).
let dict = MorphAnalyzer::create(dictionary, db, language).unwrap();
let morph = MorphAnalyzer::init(dict).unwrap();
Парсинг
let morph = MorphAnalyzer::open(dict_path).unwrap();
let stali = morph.parse("стали").unwrap();
println!("{stali}");
Нормализация
let morph = MorphAnalyzer::open(dict_path).unwrap();
let stali = morph.normalize("стали").unwrap();
println!("{stali}");
Склонение слова в нужную форму.
let morph = MorphAnalyzer::open(dict_path).unwrap();
let stali = morph.inflect_forms("стали", grams![Gender::Feminine]).unwrap();
println!("{stali:?}");
let morph = MorphAnalyzer::open(dict_path).unwrap();
let stali = morph.parse("стали").unwrap().0[5]; // индекс соответствует глаголу "стать"
let stali = morph.inflect_parsed(stali, grams![Gender::Feminine]).unwrap();
println!("{stali:?}");
Склонение/спряжение слова во все формы.
Возможность привести слово ко всем формам, считая связи между леммами. Например, стать -> стал, стала, стали, ставший, ставшая, ставшие и т.д.
Функция затратная по производительности. Если есть необходимый набор слов, который нужно будет искать во всех формах в тексте, лучше сделать вызов функции в начале работы приложения.
let morph = MorphAnalyzer::open(dict_path).unwrap();
let stali = morph.declension("стали").unwrap();
println!("{stali:?}");
let morph = MorphAnalyzer::open(dict_path).unwrap();
let stali = morph.parse("стали").unwrap().0[5]; // индекс соответствует глаголу "стать"
let stali = morph.declension_parsed(stali).unwrap();
println!("{stali:?}");
Производительность
Результат нагрузочного тестирования может быть найден в benchmarks.md.
Там же находятся результаты сравнительного тестирования с PyMorphy2
.
План развития
- Предсказание грамматических характеристик несловарного слова по постфиксу.
- Работа со словами с дефисом.
- Склонение несловарных слов.
Лицензия
Данный код распространяется под лицензией Kribrum-NC, которая основана на Apache License Version 2.0
.
Благодарности
- Руководству Крибрум, которое позволило вывести эту работу в OpenSource.
- Разработчикам PyMorhpy2 за создание источника вдохновения при разработке Мопса.
- Создателям OpenCorpora за формирование словаря, который Мопс использует по умолчанию.
- Руководителю группы разработки Nikita Patsakula за консультации и активное ревью.
Dependencies
~10–20MB
~290K SLoC