nltk 无法在不进行词形还原的情况下获取英语的WordNet同义词集,

p4tfgftt  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(58)

使用wordnet.synsets()查询wordnet会对查询词进行词形还原,但仅限于英语。虽然这对于许多应用来说很有用,但有时候我不想进行这样的词形还原。例如,我拥有多种语言的字典形式(如Swadesh列表),我想检测不同语言之间的同形异义词差异,但英语中的词形还原会夸大同形异义词的存在。在公共API中似乎没有办法在不进行词形还原的情况下进行英语查询。
例如:

>>> wn.synsets('eyeglasses')
[Synset('spectacles.n.01'), Synset('monocle.n.01')]
>>> wn.synsets('eyeglasses')[0].lemma_names()
['spectacles', 'specs', 'eyeglasses', 'glasses']
>>> wn.synsets('eyeglasses')[1].lemma_names()
['monocle', 'eyeglass']

第二个同义词集(monocle.n.01)被找到是因为'eyeglass'出现在它的词条中,而不是'eyeglasses',后者只在第一个同义词集中。有时指定词性标签(POS)可能会有所帮助,如'scissors'和'scissor.v.01',但并非总是如此(如上面的'eyeglasses',两者都是'n')。我最终需要编写一个类似这样的 Package 器:

def synsets(lemma, pos=None, lang='eng', check_exceptions=True):
    results = wn.synsets(lemma,
                         pos=pos,
                         lang=lang,
                         check_exceptions=check_exceptions)
    if lang == 'eng':
        results = [ss for ss in results if lemma in ss.lemma_names()]
    return results

我是不是漏掉了什么,还是说这是解决这个问题目前最好的方法?

llycmphe

llycmphe1#

请查看nltk/wordnet#18上的提案。很快,默认的NLTK WordNet API将被那个独立的库所取代=)

相关问题