2个不稳定版本

0.2.0 2024年3月13日
0.1.0 2024年3月12日

#1298 in 文本处理

自定义许可

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

感谢

  • 感谢Крибрум的指南,使得这项工作可以开源。
  • 感谢PyMorhpy2的开发者,他们的作品为Mop斯的开发提供了灵感。
  • 感谢OpenCorpora的制作者,他们创建的词典是Mop斯默认使用的。
  • 感谢Nikita Patsakula小组组长提供咨询和积极审查。

依赖项

~10–20MB
~272K SLoC