【问题标题】:nltk lemmatizer doesn't know what to do with the word Americansnltk lemmatizer 不知道如何处理美国人这个词
【发布时间】:2011-12-21 15:02:03
【问题描述】:

运行以下:

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

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

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

谢谢!

【问题讨论】:

  • 如果他们都被词形化为America,我觉得会更自然。

标签: python nltk lemmatization


【解决方案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'

【讨论】:

    【解决方案2】:

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

    >>> wnl().lemmatize('americans')
    'american'
    >>> from nltk.stem import PorterStemmer as ps
    >>> ps().stem('Americans')
    'American'
    

    【讨论】:

    • 感谢您的回复。我不想使用词干分析器,因为我需要这些在大多数情况下是可呈现的字典单词(美式在一段文本中)。我认为问题在于 American 既可以是形容词也可以是名词——例如“美国人去市场”与“他去美国市场”。我想我是说我不认为它们都是同一个词素的一部分了。
    猜你喜欢
    • 2016-02-10
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 2018-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多