2014-10-06 2 views
6

두 단어 (사용자가 제공) 사이의 상위/하위 단어를 확인하고 싶습니다. 이는 다른 단어의 상위 문자 일 수 있음을 의미하거나있을 수 있습니다. 두 가지 사이의 상위어 관계가 없습니다. 내가 같은 path_similarity 사용할 수 있습니다. 나는이 일을하려고합니다. 만약 당신이 그것에 대한 더 나은 방법을 제안 할 수 있습니다. 나는 또한 그것은 스파링 쿼리에서 동일한 확인하는 것이 더 나은지 알고 싶다.wordnet을 사용하여 하이픈 또는 오명을 결정하십시오.

first=wn.synset('automobile.n.01') 
second=wn.synset('car.n.01') 
first.path_similarity(second) 
+0

당신은 어떤 RDF 데이터에 대한 RDF 데이터 또는 링크를 제공하지 않은, 그리고 SPARQL은 RDF 쿼리 언어입니다, 그래서 우리는 정말 어떤 SPARQL 쿼리에 대해 아무것도 제안 할 수 없습니다. 관심있는 RDF 데이터가 있습니까? –

답변

14

우선 word 워드 넷에서 synset/concept 차이가있다. 여기

우리가 하나 개의 단어가 여러 의미를 가질 수 있습니다 (여러 개념 즉, 링크)를 참조하십시오 :

>>> from nltk.corpus import wordnet as wn 
>>> car = 'car' 
>>> auto = 'automobile' 
>>> wn.synsets(auto) 
[Synset('car.n.01'), Synset('automobile.v.01')] 
>>> wn.synsets(car) 
[Synset('car.n.01'), Synset('car.n.02'), Synset('car.n.03'), Synset('car.n.04'), Synset('cable_car.n.01')] 

그리고 '자동차'와 '자동차'같은 Synset('car.n.01')에 그렇다면 참조 할 수 있습니다이 경우

, 그때 그들은 hypo/uppernym 관계가 없습니다.

lemma이라는 개념이있어 복잡하게 만드는 부분이 있으므로 여기서는 건너 뜁니다.

단어를 비교하지 않고 synset을 비교하면 간단히 synset의 모든 hyponym을 찾아내어 다른 synset이 그 내부에서 발생하는지 확인할 수 있습니다.

당신이 일반 단어를 비교하는 경우는, How to get all the hyponyms of a word/synset in python nltk and wordnet?

는 아래의 synset을 비교하는 방법을 보여집니다. '자동차'와 '자동차'아래

>>> from nltk.corpus import wordnet as wn 
>>> 
>>> fruit = 'fruit' 
>>> wn.synsets(fruit) 
[Synset('fruit.n.01'), Synset('yield.n.03'), Synset('fruit.n.03'), Synset('fruit.v.01'), Synset('fruit.v.02')] 
>>> wn.synsets(fruit)[0].definition() 
u'the ripened reproductive body of a seed plant' 
>>> fruit = wn.synsets(fruit)[0] 
>>> 
>>> apple = 'apple' 
>>> wn.synsets(apple) 
[Synset('apple.n.01'), Synset('apple.n.02')] 
>>> wn.synsets(apple)[0].definition() 
u'fruit with red or yellow or green skin and sweet to tart crisp whitish flesh' 
>>> apple = wn.synsets(apple)[0] 
>>> 

에 대해 하나의 명사 synset 있기 때문에 예를 들어, 위해, 나는 '과일'과 '자동차'와 '자동차'보다 더 논리적이다 '사과'를 사용합니다 우리는 사과는 과일의 직접 hyponyms에없는 것을 볼 수 :이

>>> hypofruits = set([i for i in fruit.closure(lambda s:s.hyponyms())]) 
>>> apple in hypofruits 
True 

당신은 그것을 가지고 :

>>> fruit.hyponyms() 
[Synset('accessory_fruit.n.01'), Synset('achene.n.01'), Synset('acorn.n.01'), Synset('aggregate_fruit.n.01'), Synset('berry.n.02'), Synset('buckthorn_berry.n.01'), Synset('buffalo_nut.n.01'), Synset('chokecherry.n.01'), Synset('cubeb.n.01'), Synset('drupe.n.01'), Synset('ear.n.05'), Synset('edible_fruit.n.01'), Synset('fruitlet.n.01'), Synset('gourd.n.02'), Synset('hagberry.n.01'), Synset('hip.n.05'), Synset('juniper_berry.n.01'), Synset('marasca.n.01'), Synset('may_apple.n.01'), Synset('olive.n.01'), Synset('pod.n.02'), Synset('pome.n.01'), Synset('prairie_gourd.n.01'), Synset('pyxidium.n.01'), Synset('quandong.n.02'), Synset('rowanberry.n.01'), Synset('schizocarp.n.01'), Synset('seed.n.01'), Synset('wild_cherry.n.01')] 
>>> 
>>> apple in fruit.hyponyms() 
False 

그래서 우리는 모든 hyponyms을 반복하고 사과 그들 중 하나에 있는지 여부를 확인해야합니다! 완성도를 위해서 :

>>> hyperapple = set([i for i in apple.closure(lambda s:s.hypernyms())]) 
>>> fruit in hyperapple 
True 
>>> hypoapple = set([i for i in apple.closure(lambda s:s.hyponyms())]) 
>>> fruit in hypoapple 
False 
>>> hyperfruit = set([i for i in fruit.closure(lambda s:s.hypernyms())]) 
>>> apple in hyperfruit 
False