我正在从事一个IR项目,除了词干(返回不真实的单词)和词根化(可能根本不会更改单词)之外,我还需要其他选择。
因此,我寻找了一种获取单词形式的方法。
此python脚本使用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'
我知道问题是“同义词集”包含与输入单词不同的单词,所以我得到了不相关的派生形式
有没有办法得到我期望的结果?
[我正在从事一个IR项目,除了词干(返回不真实的单词)和词根化(可能根本不会改变单词)之外,我还需要一种替代方法,所以我在寻找一种获取...形式的方法...] >
您可以执行当前操作,然后在获得的单词列表上运行词干分析器,仅保留词干与所需单词相同的词干。
另一种不使用Wordnet的方法是获得一个包含所有派生形式的大型词典,然后对其进行模糊搜索。我刚刚发现了这个问题:https://github.com/dwyl/english-words/(链接回此问题How to get english language word database?)