【问题标题】:What other alternative are there to stemming?除了词干还有什么其他选择?
【发布时间】:2013-03-27 00:10:37
【问题描述】:

给定一个像这样的单词列表['add', 'adds', 'adding', 'adding', 'addition'],我想把它们都写成同一个词'添加'。这意味着将一个单词的所有不同动词和名词形式(但不是它的形容词和副词形式)合并为一个。

我找不到任何可以做到这一点的词干分析器。我找到的最接近的一个是 PorterStemmer,但它使上述列表成为 ['add', 'add', 'ad', 'ad', 'addit']

我对词干提取技术不是很有经验。所以,我想问一下是否有任何可用的词干分析器可以完成我上面解释的操作?如果没有,您对如何实现这一点有什么建议吗?

非常感谢,

【问题讨论】:

  • 您正在寻找的是一个lemmatizer,而不是一个词干分析器,而且是一个相当强大的词干分析器,因为来自addition => add,需要很多知识。我有一个适用于verb+morpheme => verbsnouns+morpheme 的英语形态词形还原器。一旦我完成其他工作,我可以在下周发布代码。你急用吗?
  • NLTK 中的 WordNet lemmatizer 接近于此,但它需要 POS 标签才能获得良好的结果。但它不做加法 => 加法。
  • @2er0:那太好了!太感谢了。下周对我来说很好。+1
  • @larsmans:我在发布问题之前查看了 WordNet,但在我看来它只返回不同形式的单词。我不知道如何将它与 POS 标签一起使用。我会再检查一次。谢谢。
  • 我会尝试清理代码,但它肯定需要优化。我以每句 10-20 个单词约 5-6 秒的成本获得了良好的引理。

标签: python nltk stemming porter-stemmer


【解决方案1】:

Lemmatization 应该比词干提取更好的结果 (source):

词干提取通常是指一种粗略的启发式过程,该过程会切断词尾以希望在大多数情况下正确实现这一目标,并且通常包括删除派生词缀。

词形还原通常是指使用词汇和词形分析正确地做事,通常旨在仅删除屈折词尾并返回单词的基本形式或字典形式,即称为引理。

作为nltk.stem 包的一部分,NTLK 支持词形还原:

import nltk

l = nltk.stem.WordNetLemmatizer()
l.lemmatize('dogs')     # -> 'dog'
l.lemmatize('addition') # -> 'addition'

s = nltk.stem.snowball.EnglishStemmer()
s.stem('dogs')          # -> 'dog'
s.stem('addition')      # -> 'addit'

如果词形还原器不能识别这个词,它不会改变它。一个陷阱是默认情况下所有单词都被视为名词。要覆盖该行为,您必须设置 pos 参数,默认设置为 pos='n'

s.stem('better')               # -> 'better'
l.lemmatize('better')          # -> 'better'
l.lemmatize('better', pos='a') # -> 'good'

【讨论】:

    【解决方案2】:

    词干提取的想法是将同一单词的不同形式简化为单个“基本”形式。这不是您所要求的,因此可能没有现有的词干分析器(至少不是有意地)满足您的需求。因此,对于您的问题,显而易见的解决方案是:如果您有自己的自定义规则,则必须实施它们。

    您没有过多地说明您的要求。根据您的需要,您必须从头开始。如果搬运工词干分析器接近您的需求,但不是在某些特殊情况下,您可以手动编写一些覆盖代码并在其他情况下使用现有的词干分析器。

    【讨论】:

    • 谢谢,阿奇姆。正如上面 2ero 所指出的,我正在寻找的任务是 lemmatisation 而不是词干。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    • 1970-01-01
    • 2012-06-04
    • 2021-10-19
    • 1970-01-01
    • 1970-01-01
    • 2023-01-03
    相关资源
    最近更新 更多