0

NLTKとwordnetを使用して、2つの単語間の意味関係を理解し​​たいと思います。「従業員」と「ウェイター」を入力すると、従業員がウェイターよりも一般的であることを示す何かが返されます。または、「従業員」と「労働者」の場合、等しい値を返します。誰かがそれを行う方法を知っていますか?

4

1 に答える 1

6

まず、単語を見出語に入れてからSynsetに入れるという問題に取り組む必要があります。つまり、単語からsynsetをどのように識別できるでしょうか。

word => lemma => lemma.pos.sense => synset    
Waiters => waiter => 'waiter.n.01' => wn.Synset('waiter.n.01')

したがって、すでに上記の問題に対処し、の右端の表現に到達したとしwaiterましょう。その後、シンセットの比較を続けることができます。単語には多くのシンセットが含まれる可能性があることに注意してください

from nltk.corpus import wordnet as wn
waiter = wn.Synset('waiter.n.01')
employee = wn.Synset('employee.n.01')

all_hyponyms_of_waiter = list(set([w.replace("_"," ") for s in waiter.closure(lambda s:s.hyponyms()) for w in s.lemma_names]))
all_hyponyms_of_employee = list(set([w.replace("_"," ") for s in employee.closure(lambda s:s.hyponyms()) for w in s.lemma_names]))

if 'waiter' in all_hyponyms_of_employee:
  print 'employee more general than waiter'
elif 'employee' in all_hyponyms_of_waiter:
  print 'waiter more general than employee'
else:
  print "The SUMO ontology used in wordnet just doesn't have employee or waiter under the same tree"
于 2013-03-27T04:08:20.490 に答える