【问题标题】:Get noun from verb Wordnet从动词 Wordnet 中获取名词
【发布时间】:2015-05-06 16:05:54
【问题描述】:

我正在尝试使用 Python 中的 Wordnet 从动词中获取名词。 我希望能够得到:
从动词“创造”到名词“创造者”,

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

但是,我正试图做相反的事情。 这是一个看起来像我想要做的链接,但代码不起作用并且没有回答我的请求:
Convert words between verb/noun/adjective forms

【问题讨论】:

    标签: python nlp wordnet


    【解决方案1】:

    你可以试试这样的:

    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
    

    此方法查找所有与动词派生相关的名词,并检查它们是否有“人”作为上位词。

    这个输入

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

    将返回此输出

    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”示例并未涵盖,因为在 WordNet 中“funder”并未列为与“fund”相关的派生形式。

    【讨论】:

    • 我要谢谢你,你应该在我的大学教书! ;) @yvespeirsman
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-02
    • 1970-01-01
    相关资源
    最近更新 更多