morph-rs

Crates.iomorph-rs
lib.rsmorph-rs
version0.2.0
sourcesrc
created_at2024-03-12 16:23:00.369718
updated_at2024-03-13 14:33:18.442761
descriptionDictionary Morphologizer for Russian language
homepage
repository
max_upload_size
id1170778
size1,040,906
(veta666)

documentation

README

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 за консультации и активное ревью.
Commit count: 0

cargo fmt