Wor dnet: получение производных_связанных_форм слова - PullRequest
1 голос
/ 04 апреля 2020

Я работаю над IR-проектом, мне нужна альтернатива как основа (которая возвращает нереальные слова), так и лемматизация (которая может вообще не изменить слово)

Поэтому я искал способ получить формы слова.

Этот python скрипт дает мне производные_связанные_формы слова (например, "извлечение"), используя NLTK и Wor dnet:

from nltk.corpus import wordnet as wn    

str = "retrieving"

synsets = wn.synsets(str)

s = set()
result = ""
for synset in synsets:
    related = None
    lemmas = synset.lemmas()
    for lemma in lemmas:
        forms = lemma.derivationally_related_forms()
        for form in forms:
            name = form.name()
            s.add(name)    

print(list(s))

Вывод:

['recollection', 'recovery', 'regaining', 'think', 'retrieval', 'remembering', 'recall', 'recollective', 'thought', 'remembrance', 'recoverer', 'retriever']

Но я действительно хочу только: 'retrieval', 'retriever', а не 'think' или 'recovery' ... et c

, и результат также отсутствуют другие формы, такие как: 'retrieve'

Я знаю, что проблема заключается в том, что в "наборы" входят слова, отличные от моего входного слова, поэтому я получаю несвязанные производные формы

Есть ли способ получить ожидаемый результат?

1 Ответ

1 голос
/ 05 апреля 2020

Вы можете сделать то, что вы в данный момент делаете, затем запустить средство поиска над списком слов, который вы получаете, и оставить только те из них, которые имеют то же основание, что и слово, которое вы хотите.

Другой подход, не использующий Wor dnet, это получить большой словарь, который содержит все производные формы, а затем выполнить нечеткий поиск по нему. Я только что нашел это: https://github.com/dwyl/english-words/ (Который ссылается на этот вопрос Как получить базу данных слов английского языка sh? )

Самый простой алгоритм будет O (N) линейный поиск, делающий расстояние Левенштейна на каждом. Или запустите свой стеммер для каждой записи.

Если эффективность начинает вызывать беспокойство ... ну, это действительно новый вопрос, но первая мысль, которая приходит на ум, - это сделать одноразовую индексацию. всех записей результата стеммера.

...