#language #dictionary #russian #в #для #morphologizer #py-morphy2

bin+lib morph-rs

Dictionary Morphologizer for Russian language

2 unstable releases

0.2.0 Mar 13, 2024
0.1.0 Mar 12, 2024

#1711 in Text processing

Custom license

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