0
두 단어 사이의 의미 론적 관계를 이해하려면 NLTK와 wordnet을 사용하고 싶습니다. 마치 "직원"과 "웨이터"라고 입력하면 직원이 웨이터보다 더 일반적임을 나타내는 결과를 반환합니다. 또는 "직원"과 "작업자"에 대해서는 동등한 값을 반환합니다. 누구든지 그 일을하는 방법을 알고 있습니까?NLTK를 사용하여 의미 계층 구조/관계를 결정하는 방법은 무엇입니까?
두 단어 사이의 의미 론적 관계를 이해하려면 NLTK와 wordnet을 사용하고 싶습니다. 마치 "직원"과 "웨이터"라고 입력하면 직원이 웨이터보다 더 일반적임을 나타내는 결과를 반환합니다. 또는 "직원"과 "작업자"에 대해서는 동등한 값을 반환합니다. 누구든지 그 일을하는 방법을 알고 있습니까?NLTK를 사용하여 의미 계층 구조/관계를 결정하는 방법은 무엇입니까?
먼저 단어를 보조 용어로 가져온 다음 Synsets으로 가져와야합니다. 즉 단어에서 synset을 어떻게 식별 할 수 있습니까?
word => lemma => lemma.pos.sense => synset
Waiters => waiter => 'waiter.n.01' => wn.Synset('waiter.n.01')
그럼 당신은 이미 위의 문제를 해결하고 waiter
의 오른쪽 대부분의 표현에 도착했습니다 가정 해 봅시다, 당신은 synset을 비교 계속할 수 있습니다. 단어가 많은 synset을 가질 수 있음을 유의하십시오.
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"
그리고 무엇을 시도 했습니까? – Anthon