2013-07-16 6 views
2

WordNet 3.0을 사용하고 있습니다. WordNet 계층 구조에서 두 synset 간의 의미 론적 관계를 어떻게 찾을 수 있는지 알고 싶습니다. 마찬가지로, 입력으로 두 단어를 주어진 그들 사이의 관계, 즉 그들이 동의어, hyponym - 상위어 등 여부를 찾고 싶습니다.WordNet에서 두 synset 간의 의미 관계를 찾는 방법

이것을 달성하기 위해 파이썬이나 펄 모듈이 있습니까?

+0

사용하는 라이브러리? 어떤 인간 언어인가? – Jacopofar

+0

@Jackopo : 영어 – nish

답변

4

NLTK는 Python에서 가장 많이 사용되는 NLP 라이브러리입니다.

common_lemmas = len(set(house.lemma_names).intersection(set(station.lemma_names))) 

: 그들은 동의어인지 발견에

taxonomy_distance = house.shortest_path_distance(station) 

: 당신이 클래스 Synset의이 방법을 방법을 사용할 수 있습니다 다음

from nltk.corpus import wordnet 

house = wordnet.synset('house.n.01') 
station = wordnet.synset('station.n.01') 

: 뭔가처럼 기술 된 작업이 될 것이다 두 집합에서 공통 표제어의 수를 반환합니다.

Neo4j와 같은 그래프 데이터베이스를 사용하여 wordnet 데이터 세트를로드하고 해당 노드 간의 최단 경로를 찾으면 문제가 here으로 표시됩니다.

+0

'shortest_path_distance'에 오류가 발생합니다. 내 코드를 다시 검사 중입니다 ... –

1

파이썬 NLTK 사용 :

>>> from nltk.corpus import wordnet as wn 
>>> 
>>> synset1 = wn.synset('adornment.n.01') 
>>> synset2 = wn.synset('jewelry.n.01') 
>>> 
>>> synset1.lowest_common_hypernyms(synset2) 
[Synset('adornment.n.01')] 
>>> 
>>> synset1.hyponyms() 
[Synset('frill.n.03'), Synset('rosette.n.01'), Synset('frontlet.n.01'), Synset('cordon.n.03'), Synset('fob.n.02'), Synset('beauty_spot.n.01'), Synset('sequin.n.01'), Synset('war_paint.n.01'), Synset('boutonniere.n.01'), Synset('trimming.n.02'), Synset('pendant.n.01'), Synset('pompon.n.01'), Synset('band.n.04'), Synset('bangle.n.02'), Synset('jewelry.n.01'), Synset('epaulet.n.01'), Synset('circlet.n.02'), Synset('frog.n.03'), Synset('tassel.n.01'), Synset('plume.n.02'), Synset('pectoral.n.02')] 
>>> synset2.hypernyms() 
[Synset('adornment.n.01')] 

동의어를 얻으려면 :

>>> def lemmas_in_all_synsets(keyword): 
...  lemmas=[] 
...  for synset in wn.synsets(keyword): 
...   for lemma in synset.lemmas: 
...    lemmas.append(lemma) 
...  return lemmas 
... 
>>> lemmas_in_all_synsets('station') 
[Lemma('station.n.01.station'), Lemma('place.n.10.place'), Lemma('place.n.10.sta 
tion'), Lemma('station.n.03.station'), Lemma('post.n.01.post'), Lemma('post.n.01 
.station'), Lemma('station.n.05.station'), Lemma('station.v.01.station'), Lemma(
'station.v.01.post'), Lemma('station.v.01.send'), Lemma('station.v.01.place')] 
+0

이것은 NLTK for Python 2.7에서 작동합니다. –

관련 문제