nltk词形还原器无法处理单词Americans
我运行了以下代码:
from nltk import WordNetLemmatizer as wnl
wnl().lemmatize("American")
wnl().lemmatize("Americans")
这两个函数都只是返回它们的参数。我想把“Americans”简化成“American”。有没有人知道怎么做到这一点?
我以为我需要修改词形还原器(lemmatizer)使用的内部字典。这是对的吗?有没有人知道更好的方法?
谢谢!
2 个回答
5
显然,WordNet对大小写是敏感的,但你也可以使用PorterStemmer。
>>> wnl().lemmatize('americans')
'american'
>>> from nltk.stem import PorterStemmer as ps
>>> ps().stem('Americans')
'American'
1
你可以在把单词交给词形还原器之前,先把它转换成小写,处理完后再恢复原来的大小写。
我以前用过这样的代码:
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'