nltk词形还原器无法处理单词Americans

2 投票
2 回答
4022 浏览
提问于 2025-04-17 05:36

我运行了以下代码:

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'

撰写回答