Есть ли способ отменить ствол в Python NLTK? - PullRequest
0 голосов
/ 11 июля 2019

У меня есть список основ в NLTK / python и я хочу получить возможные слова, которые создают этот ствол.

Есть ли способ взять ствол и получить список слов, которые будут основаны на немв питоне?

1 Ответ

0 голосов
/ 11 июля 2019

Насколько я знаю, ответ - нет, и в зависимости от того, кто произвел это, может быть трудно найти исчерпывающий поиск для отмены действия правил, и результаты будут в большинстве случаев недопустимыми словами по любому стандарту. Например, для Портера:

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

Таким образом, обратная функция будет генерировать «grabfuled» как одно из допустимых слов, так как суффиксы «-ed» и «-ful» удаляются последовательно в процессе ствола. Тем не менее, при наличии действительной лексики вы можете сделать следующее, не зависящее от метода стволов:

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 словарь английских слов .

...