从动词 Wordnet 中获取名词
Get noun from verb Wordnet
我试图在 python 中使用 Wordnet 从动词中获取名词。
我希望能够得到:
从动词 'created' 到名词 'creator',
'funded' => 'funder'
Verb X => Noun Y
Y
指的是一个人
我已经能够在另一边做到了: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
这是给定的输出
[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')]
但是,我正试图做相反的事情。
这是一个 link 看起来像我想做的,但是代码不工作并且不回答我的请求:
Convert words between verb/noun/adjective forms
您可以尝试这样的操作:
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
此方法查找所有与动词派生相关的名词,并检查它们是否具有 "person" 作为上位词。
这个输入
print nounify("created")
print nounify("teach")
print nounify("spoke")
将return这个输出
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')])
不幸的是,您的 "fund" 示例未包含在内,因为 "funder" 在 WordNet 中未列为 "fund" 的派生相关形式。
我试图在 python 中使用 Wordnet 从动词中获取名词。
我希望能够得到:
从动词 'created' 到名词 'creator',
'funded' => 'funder'
Verb X => Noun Y
Y
指的是一个人
我已经能够在另一边做到了: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
这是给定的输出
[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')]
但是,我正试图做相反的事情。
这是一个 link 看起来像我想做的,但是代码不工作并且不回答我的请求:
Convert words between verb/noun/adjective forms
您可以尝试这样的操作:
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
此方法查找所有与动词派生相关的名词,并检查它们是否具有 "person" 作为上位词。
这个输入
print nounify("created")
print nounify("teach")
print nounify("spoke")
将return这个输出
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')])
不幸的是,您的 "fund" 示例未包含在内,因为 "funder" 在 WordNet 中未列为 "fund" 的派生相关形式。