我不确定这是否是预期的输出,但NLTK PorterStemmer与https://pypi.python.org/pypi/stemming/1.0给出的输出不同。
从NLTK:
>>> from nltk.stem import PorterStemmer
>>> porter = PorterStemmer()
>>> porter.stem('this')
u'thi'
从stemming
:
>>> from stemming.porter2 import stem
>>> stem('this')
'this'
5条答案
按热度按时间0kjbasz61#
Verified using python 3.5 (had to pip install stemming first)
kupeojn62#
错误似乎出现在
porter.py
文件的第289行:它通过应用一些规则(如删除字母
s
)来去除后缀。然而,似乎有些例外情况是硬编码的。在这种情况下,要在不简单地列出大量例外的情况下正确实现此功能可能会很困难。@alvations,你有什么想法?
ercv8c1e3#
@ExplodingCabbage会更清楚地说明如何处理这个问题。
为了重新验证,NLTK中PorterStemmer的三种模式都发生了这个差异:
13z8s7eq4#
刚刚使用Martin的参考C实现 https://tartarus.org/martin/PorterStemmer/c.txt 进行了测试,结果也将 "this" 转换为 "thi",所以我认为nltk的行为是正确的。
测试代码:
输出:
@alvations 注意,你使用
stemming
得到不同结果的例子使用的是 porter2 词干提取器,而不是 porter 词干提取器。如果你导入的是 porter 词干提取器,你会看到这个结果:总之:这里没有错误。NLTK可能需要引入并 Package 某人的 porter2 实现,但这是一个单独的问题。
9rnv2umw5#
看起来不错@ExplodingCabbage。我能在这里做些什么来帮忙吗?