2014-10-06 8 views
6

Voglio verificare la relazione ipernotismo/iponimo tra due parole (fornite dall'utente) il che significa che ognuna di esse può essere hypernym di un'altra o può anche essere il caso che ci sia nessuna relazione ipernima tra i due. Posso usare path_similarity per lo stesso. Sto cercando di fare così. Se puoi suggerire un metodo migliore per quello. Voglio anche sapere se è meglio controllare lo stesso da una query sparqlDeterminazione di Hypernym o Hyponym utilizzando wordnet nltk

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

Non sono stati forniti i dati RDF, o un collegamento a tutti i dati RDF, SPARQL ed è un linguaggio di interrogazione RDF, in modo che non si può davvero suggerire nulla su qualsiasi domanda SPARQL. Esistono dati RDF da qualche parte a cui sei interessato? –

risposta

14

in primo luogo, v'è una differenza tra word e synset/concept in WordNet.

Qui vediamo che una parola può avere un significato multiplo (cioè i collegamenti a più concetti):

>>> 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')] 

E in questo caso 'automobile' e 'auto' possono fare riferimento allo stesso Synset('car.n.01') e in caso affermativo, quindi non hanno una relazione ipo/iperfalo.

C'è anche la nozione di lemma che complicherà solo le cose, quindi salteremo quella per ora.

Diciamo che non si stanno confrontando parole ma synset, quindi è possibile trovare semplicemente tutti gli iponimi del synset e vedere se l'altro synset si verifica al suo interno.

Se stai confrontando parole povere, si veda How to get all the hyponyms of a word/synset in python nltk and wordnet?

Il sotto mostrerà come confrontare synset. Per esempio l'amor, userò 'frutta' e 'mela', che è più logico che 'automobile' e 'auto' in quanto non v'è un solo synset sostantivo per 'automobile' e 'auto'

>>> 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] 
>>> 

Sotto , vediamo che apple non è in iponimi diretti di frutta:

>>> 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 

Quindi dobbiamo iterare giù tutti i iponimi e vedere se apple è in uno di essi:

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

gioco è fatto! Per ragioni di completezza:

>>> 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 
Problemi correlati