有没有办法在python nltk中反转词干?

时间:2019-07-10 21:07:36

标签: python nltk stemming

我在NLTK / python中有一个词干列表,想要获取创建该词干的可能单词。

有没有办法获取词干并获取将在python中作为词干的单词的列表?

1 个答案:

答案 0 :(得分:0)

据我所知,答案是“否”,根据词干的不同,可能很难穷举搜索以恢复词干规则的效果,并且按任何标准,结果大部分都是无效词。例如,对于Porter stemmer:

from nltk.stem.porter import *
stemmer = PorterStemmer()
stemmer.stem('grabfuled')
# results in "grab" 

因此,反向函数会在词干过程中连续删除“ -ed”和“ -ful”后缀等有效词之一时,生成“ grabful”。 但是,给定有效的词典,您可以执行与词干提取方法无关的以下操作:

from nltk.stem.porter import *
from collections import defaultdict

vocab = set(['grab', 'grabbing', 'grabbed', 'run', 'running', 'eat'])

# Here porter stemmer, but can be any other stemmer too
stemmer = PorterStemmer()

d = defaultdict(set)
for v in vocab:
    d[stemmer.stem(v)].add(v)  

print(d)
# defaultdict(<class 'set'>, {'grab': {'grab', 'grabbing', 'grabbed'}, 'eat': {'eat'}, 'run': {'run', 'running'}})

现在我们有一个字典,将词干映射到可以生成词干的有效单词。对于任何词干,我们都可以执行以下操作:

print(d['grab'])
# {'grab', 'grabbed', 'grabbing'}

要构建词汇表,您可以标记语料库或使用nltk's built-in dictionary of English words