请尝试以下内容:
from nltk import WordNetLemmatizer as wnl
wnl().lemmatize("American")
wnl().lemmatize("Americans")
两者都只是回归他们的论点。我希望美国人减少到美国。任何人都知道如何实现这一目标?
我假设我必须修改lemmatizer使用的任何内部字典。它是否正确?有人知道更好的方法吗?
谢谢!
答案 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'