Python版本的茎干算法

bulstem的Python项目详细描述


bulstempy:一个针对保加利亚人的BulStem-屈折词干生成器的Python重新实现

BuildPyPILicense

简介

这是延髓词干算法的Python版本。它遵循中介绍的算法

Nakov, P. BulStem: Design and evaluation of inflectional stemmer for Bulgarian. In Workshop on 
Balkan Language Resources and Tools (Balkan Conference in Informatics).

有关算法的主页,请参见http://people.ischool.berkeley.edu/~nakov/bulstem/。另外,请查看原始的paper以获取更多详细信息和示例。在

实施

与其他可用的实现相反,这个实现使用Trie而不是Dictionary/Hashtable/,以便找到可以应用于令牌的最长可能的规则。在

基本算法步骤:

  1. 找出记号中第一个元音的位置。在
  2. 以相反的顺序遍历字符串,直到有匹配的后缀,或者向下到第一个元音的位置(在步骤中找到)来查找可能的最长规则。1) 一。在
  3. 在词干后缀前面加上非词干前缀(步骤。2) 一。在

安装

此库与Python>;=3.6兼容。在

克隆存储库并运行:

有pip

^{pr2}$

测试

项目中包括一组测试,在tests folder下。 测试套装可按如下方式运行:

pip install -e ".[testing]"
pip install -r requirements-test.txt
python -m unittest

使用

该库使用一组用于词干分析的规则。规则可以作为列表传递给BulStemmer构造函数,也可以作为文件的路径。在

对于这两个选项,规则的格式如下:

word ==> stem ==> freq

包中包含一组预定义的规则,可以直接使用。词干规则可以找到here。(示例:Reading the rules from an external file

手动加载规则

frombulstem.stemimportBulStemmerstemmer=BulStemmer(["ой ==> о 10"],min_freq=0,left_context=2)stemmer.stem('порой')# Excepted output: 1. 'поро'

BulStemmer构造函数参数:

  1. rules-Iterable包含规则的字符串。在
  2. min_freq-词干生成时要使用的规则的最小频率。在
  3. left_context-不以词干为词干的前缀的大小。在

从外部文件读取规则

frombulstem.stemimportBulStemmer# Pre-defined names of rule setsPRE_DEFINED_RULES=['stem-context-1','stem-context-2','stem-context-3']# Excepted output:# 1 втор# 2 втори# 3 вториятfori,rules_nameinenumerate(PRE_DEFINED_RULES,start=1):stemmer=BulStemmer.from_file(rules_name,min_freq=2,left_context=i)print(i,stemmer.stem('вторият'))stemmer=BulStemmer.from_file('stem_rules_context_2_utf8.txt',min_freq=2,left_context=i)stemmer.stem('вторият')# Excepted output: 1. 'втори'stemmer.stem('вероятен')# Excepted output: 1. 'вероят'

BulStemmer.from_file参数:

  1. path-规则文件的路径(或预定义的名称),格式如下:word==>;stem===>;freq
  2. min_freq-词干生成时要使用的规则的最小频率。在
  3. left_context-不以词干为词干的前缀的大小。在

其他实现

Perl (Original)Java (JDK 1.4)RubyC#Python2GATE plugin (Java)

许可证

有关许可证信息,请参见LICENSE。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java矢量图像被拉伸   java如何检查为8085模拟器设置的标志   java更改动态数据列表显示的宽度   重载Java:允许使用一个varargs参数的函数和具有相同名称和一个相同类型参数的函数?   java Google应用程序引擎搜索API赋予某些字段比其他字段更高的优先级   java如何确定Textview在RelativeLayout中的位置   参数按日期排序。比较器。JAVA   继承在Java中,当类A继承类B时,堆中会发生什么   java javafx使用来自MainController或适当控制器类中其他控制器的对象   java ElasticSearch如何从3000万个文档中快速查询一个结果