为什么单词“got”的词干还是“got”而不是“get”?

2024-10-16 22:31:36 发布

您现在位置:Python中文网/ 问答频道 /正文

from stemming.porter2 import stem

documents = ['got',"get"]

documents = [[stem(word) for word in sentence.split(" ")] for sentence in documents]
print(documents)

结果是:

^{pr2}$

有人能帮我解释一下吗? 谢谢您!在


Tags: infromimportforgetsentencedocumentsword
1条回答
网友
1楼 · 发布于 2024-10-16 22:31:36

你想要的是一个词干分析器而不是词干分析器。差别是微妙的。在

通常,词干分析器会尽可能多地删除后缀,在某些情况下,对于那些无法通过简单地删除后缀来找到规范化形式的单词,可以处理一个异常单词列表。在

词法学家试图找到单词的“basic”/词根/不定式形式,通常需要针对不同语言的特殊规则。在

看到了吗


使用morphy lemmatizer的NLTK实现的词法化要求正确的词性(POS)标记相当准确。在

避免(或者事实上永远不要)尝试孤立地将单个单词词组化。试着把一个完全词性标记的句子词义化,例如

from nltk import word_tokenize, pos_tag
from nltk import wordnet as wn

def penn2morphy(penntag, returnNone=False, default_to_noun=False):
    morphy_tag = {'NN':wn.NOUN, 'JJ':wn.ADJ,
                  'VB':wn.VERB, 'RB':wn.ADV}
    try:
        return morphy_tag[penntag[:2]]
    except:
        if returnNone:
            return None
        elif default_to_noun:
            return 'n'
        else:
            return ''

使用penn2morphy helper函数,您需要将POS标记从pos_tag()转换为morphy标记,然后可以:

^{pr2}$

为了方便起见,您也可以尝试^{} lemmatizer。在

>>> from pywsd.utils import lemmatize_sentence
Warming up PyWSD (takes ~10 secs)... took 7.196984529495239 secs.
>>> sent = "He got up in bed at 8am."
>>> lemmatize_sentence(sent)
['he', 'get', 'up', 'in', 'bed', 'at', '8am', '.']

另请参见https://stackoverflow.com/a/22343640/610569

相关问题 更多 >