使用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
我是不是漏掉了什么,还是说这是解决这个问题目前最好的方法?
1条答案
按热度按时间llycmphe1#
请查看nltk/wordnet#18上的提案。很快,默认的NLTK WordNet API将被那个独立的库所取代=)