nltk lemmatizer不知道如何处理美国人这个词

时间:2011-11-03 23:02:01

标签: python nltk lemmatization

请尝试以下内容:

from nltk import WordNetLemmatizer as wnl
wnl().lemmatize("American")
wnl().lemmatize("Americans")

两者都只是回归他们的论点。我希望美国人减少到美国。任何人都知道如何实现这一目标?

我假设我必须修改lemmatizer使用的任何内部字典。它是否正确?有人知道更好的方法吗?

谢谢!

2 个答案:

答案 0 :(得分:5)

显然,案例对WordNet很重要,但您也可以使用PorterStemmer。

>>> wnl().lemmatize('americans')
'american'
>>> from nltk.stem import PorterStemmer as ps
>>> ps().stem('Americans')
'American'

答案 1 :(得分:0)

您可以在将该字词转换为小写字母之前将其转换为小写字母,然后再恢复该字词。

我过去曾使用过这段代码:

word = 'Americans'
lemmatized = wnl().lemmatize(word.lower())
if word.istitle():
    word = lemmatized.capitalize()
else:
    word = lemmatized
# word = 'American'

这假设一个单词中没有多个大写字母的情况(例如" MySpace"),这对我的情况来说是正确的。我认为这通常是正确的,因为具有多个大写字母的单词往往是一个专有名词,因此通常不需要对它们进行词形推理。

如果您关注所有大写单词,您也可以包含该案例:

word = 'AMERICANS'
lemmatized = wnl().lemmatize(word.lower())
if word.istitle():
    word = lemmatized.capitalize()
elif word.upper()==word:
    word = lemmatized.upper()
else:
    word = lemmatized
# word = 'AMERICAN'