2015-05-06 25 views
6

Sözcüğü bir fiilden WordNet'te python ile almaya çalışıyorum. Ben o diğer yapabilmek oldum Fiilden ad al Wordnet

Y

'funded' => 'funder' 
Verb X => Noun Y 
bir kişinin

bahsediyor, fiil 'yarattı' isim 'yaratıcısı' dan
: ben elde edebilmek istiyorum yan: Burada 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 

verilen çıkışı

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

Fakat, tam tersini yapmaya çalışıyorum. İşte Ben yapmak istediğim gibi görünen bir bağlantı olduğunu, ancak kod çalışmıyor ve benim isteği cevap vermezse:
Convert words between verb/noun/adjective forms

cevap

3

Böyle bir şey deneyebilirsiniz:

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 

Bu yöntem, türeve bağlı tüm isimleri bir fiile benzetir ve bir "hypernym" olarak "sahip" olup olmadıklarını kontrol eder.

Bu giriş

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

"destekçinizle" olarak

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

, ancak, "fon" örneği kapsamında değildir bu çıktı üretmesi, bir derivationally ilgili olarak listelenmemiş dönecektir WordNet'te "fon" a

+0

Size teşekkür etmeliyim, üniversitemde ders vermelisiniz! ;) @yvespeirsman – dooms