NLTK 单词词形还原

4

我正在尝试使用NLTK对单词进行词形还原。

目前我发现可以使用 stem 包将"cars"转换为"car","women" 转换为 "woman"等,但是无法对带有词缀的单词如 "acknowledgement" 进行词形还原。

如果在 "acknowledgement" 上使用 WordNetLemmatizer(),它会返回 "acknowledgement";如果使用.PorterStemmer(),它会返回 "acknowledg" 而不是 "acknowledge"。

有没有人能告诉我如何去除单词的词缀?
比如,当输入为 "acknowledgement" 时,输出应该是 "acknowledge"。


1
你有没有考虑过在nltk中的其他词形还原器? - inspectorG4dget
1个回答

8
Lemmatization不会(也不应该)将“acknowledgement”转换为“acknowledge”。前者是动词,而后者是名词。另一方面,Porter的词干算法只是使用一组固定的规则。因此,你唯一的方法就是在源代码中更改规则。(这不是解决问题的正确方法)。
你要寻找的是“acknowledgement”的派生形式,最好的来源是WordNet。你可以在WordNet在线上检查它。
有很多基于WordNet的库可供使用(例如Java中的JWNL)。在Python中,NLTK应该能够获取你在网上看到的派生形式:
from nltk.corpus import wordnet as wn

acknowledgment_synset = wn.synset('acknowledgement.n.01')
acknowledgment_lemma = acknowledgment_synset.lemmas[1]

print(acknowledgment_lemma.derivationally_related_forms())
# [Lemma('admit.v.01.acknowledge'), Lemma('acknowledge.v.06.acknowledge')]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接