2

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

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

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

非常感谢,

4

2 回答 2

2

词形还原应该比词干(来源)产生更好的结果:

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

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

作为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'

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

s.stem('better')               # -> 'better'
l.lemmatize('better')          # -> 'better'
l.lemmatize('better', pos='a') # -> 'good'
于 2017-01-22T21:53:13.970 回答
0

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

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

于 2013-04-04T19:00:09.410 回答