Wordnet:获取 derivationally_related_forms 个单词

Wordnet: Getting derivationally_related_forms of a word

我正在做一个 IR 项目,我需要一个替代词干提取(returns 不真实的词)和词形还原(可能根本不会改变词)

所以我寻找一种获取单词形式的方法。

这个 python 脚本给了我 derivationally_related_forms 个单词(例如 "retrieving"),使用 NLTK 和 Wordnet:

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'...等

并且结果还缺少其他形式,例如:'retrieve'

我知道问题是 "synsets" 包含与我输入的词不同的词,所以我得到不相关的派生形式

有没有办法得到我期望的结果?

你可以做你现在做的事情,然后 运行 对你得到的单词列表进行词干分析,只保留与你想要的词有相同词干的那些。

另一种不使用 Wordnet 的方法是获取包含所有派生形式的大词典,然后对其进行模糊搜索。我刚发现这个:https://github.com/dwyl/english-words/ (Which links back to this question How to get english language word database? )

最简单的算法是 O(N) 线性搜索,对每个搜索进行编辑距离。或者 运行 每个条目的词干分析器。

如果效率开始成为一个问题……好吧,这确实是一个新问题,但我想到的第一个想法是您可以通过词干分析器结果对所有条目进行一次性索引。