我试图对单词进行预处理以删除常见的前缀,如“un”和“re”,但是nltk的所有常用词干分析器似乎都完全忽略了前缀:
from nltk.stem import PorterStemmer, SnowballStemmer, LancasterStemmer
PorterStemmer().stem('unhappy')
# u'unhappi'
SnowballStemmer('english').stem('unhappy')
# u'unhappi'
LancasterStemmer().stem('unhappy')
# 'unhappy'
PorterStemmer().stem('reactivate')
# u'reactiv'
SnowballStemmer('english').stem('reactivate')
# u'reactiv'
LancasterStemmer().stem('reactivate')
# 'react'
词干分析器的工作不包括删除常用前缀和后缀吗?有没有另一个词干分析器可以可靠地做到这一点?在
如果你有400000多个英语单词的列表,以及645个前缀的列表。在
https://www.dictionary.com/e/affixes/
https://raw.githubusercontent.com/dwyl/english-words/master/words.txt
你说得对。大多数词干分析器只使用词干后缀。事实上,马丁·波特的原始论文的标题是:
在NLTK中,可能唯一具有前缀词干的词干分析器是阿拉伯语词干分析器:
但是如果我们看看这个^{} 函数,
它只是删除旧前缀并用新前缀替换它。在
但我们可以做得更好!在
首先,对于需要处理的语言,您是否有固定的前缀和替换列表?
让我们用(不幸的)事实上的语言,英语,做一些语言学工作来找出英语中的前缀:
https://dictionary.cambridge.org/grammar/british-grammar/word-formation/prefixes
不需要太多的工作,您可以在来自NLTK的后缀之前编写一个前缀词干生成函数,例如
^{pr2}$现在我们有了一个简单的前缀词干分析器,我们能做得更好吗?
如果我们先检查前缀词干的单词是否出现在特定列表中,然后再对其进行词干分析呢?在
我们解决了前缀不加词干,导致词根无意义的问题
但是波特词干仍然会删除后缀
-ed
,这可能/可能不是人们所需要的输出,特别是当目标是在数据中保留语言上的健全单位时:因此,根据任务的不同,有时使用引理比词干分析器更有益。在
另请参见:
相关问题 更多 >
编程相关推荐