2

跑了以下:

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

两者都只是返回他们的论点。我希望美国人减少为美国人。有人知道如何做到这一点吗?

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

谢谢!

4

2 回答 2

5

显然大小写对 WordNet 很重要,但您也可以使用 PorterStemmer。

>>> wnl().lemmatize('americans')
'american'
>>> from nltk.stem import PorterStemmer as ps
>>> ps().stem('Americans')
'American'
于 2011-11-04T01:41:05.107 回答
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'
于 2014-05-09T10:04:23.207 回答