2015-05-06 22 views
6

Sto cercando di ottenere il nome da un verbo con Wordnet in python. Voglio essere in grado di ottenere:
dal verbo 'creato' il sostantivo 'creatore',Ottieni nome dal verbo Wordnet

'funded' => 'funder' 
Verb X => Noun Y 

Y si riferisce a una persona

Sono stato in grado di fare il contrario lato: Noun Y => Verb X

import nltk as nltk 
from nltk.corpus import wordnet as wn 

lem = wn.lemmas('creation') 
print lem 

related_forms = lem[0].derivationally_related_forms() 
print related_forms 

Ecco una data uscita

[Lemma('creation.n.01.creation'), Lemma('creation.n.02.creation'), Lemma('creation.n.03.creation'), Lemma('initiation.n.02.creation'), Lemma('creation.n.05.Creation'), Lemma('universe.n.01.creation')] 

[Lemma('create.v.02.create'), Lemma('produce.v.02.create'), Lemma('create.v.03.create')] 

Ma, sto cercando di fare il contrario. Ecco un link che assomiglia a quello che voglio fare, ma il codice non funziona e non risponde alla mia richiesta:
Convert words between verb/noun/adjective forms

risposta

3

si potrebbe provare qualcosa di simile:

def nounify(verb_word): 
    set_of_related_nouns = set() 

    for lemma in wn.lemmas(wn.morphy(verb_word, wn.VERB), pos="v"): 
     for related_form in lemma.derivationally_related_forms(): 
      for synset in wn.synsets(related_form.name(), pos=wn.NOUN): 
       if wn.synset('person.n.01') in synset.closure(lambda s:s.hypernyms()): 
        set_of_related_nouns.add(synset) 

    return set_of_related_nouns 

Questo il metodo cerca tutti i nomi relativi derivazionalmente a un verbo e controlla se hanno "person" come hypernym.

Questo ingresso

print nounify("created") 
print nounify("teach") 
print nounify("spoke") 

restituirà questo output

set([Synset('creator.n.02'), Synset('creature.n.02'), Synset('creature.n.03')]) 
set([Synset('teacher.n.01')]) 
set([Synset('speaker.n.03'), Synset('speaker.n.01')]) 

Purtroppo, però, il vostro esempio "fondo" non è coperto, come "finanziatore" non è elencato come un derivationally correlato modulo per "finanziare" in WordNet.

+0

Devo ringraziarvi, dovreste insegnare nel mio college! ;) @yvespeirsman – dooms

Problemi correlati