跑了以下:
from nltk import WordNetLemmatizer as wnl
wnl().lemmatize("American")
wnl().lemmatize("Americans")
两者都只是返回他们的论点。我希望美国人减少为美国人。有人知道如何做到这一点吗?
我假设我必须修改 lemmatizer 使用的任何内部字典。它是否正确?有人知道更好的方法吗?
谢谢!
跑了以下:
from nltk import WordNetLemmatizer as wnl
wnl().lemmatize("American")
wnl().lemmatize("Americans")
两者都只是返回他们的论点。我希望美国人减少为美国人。有人知道如何做到这一点吗?
我假设我必须修改 lemmatizer 使用的任何内部字典。它是否正确?有人知道更好的方法吗?
谢谢!
显然大小写对 WordNet 很重要,但您也可以使用 PorterStemmer。
>>> wnl().lemmatize('americans')
'american'
>>> from nltk.stem import PorterStemmer as ps
>>> ps().stem('Americans')
'American'
您可以在将单词提供给词形还原器之前将其转换为小写,然后再恢复大小写。
我过去曾使用过此代码:
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'