【问题标题】:How to get Sense Key in WordNet for NLTK Python?如何在 WordNet 中为 NLTK Python 获取 Sense Key?
【发布时间】:2016-06-05 11:54:48
【问题描述】:

你好 Stackoverflow 社区

我刚刚开始使用 Python NLTK 进行修补,并将注意力转向 Wordnet 模块。

我正在尝试获取给定引理的 Sense Ky 并发现以下内容:

s = wn.synset('skill.n.01')
s.lemmas # >>> [Lemma('skill.n.01.skill'), ... ]
s.lemmas[0].key # >>> 'skill%1:09:01::'

但是,似乎不再支持此实现。

Traceback (most recent call last):
File "C:/Users/Admin/PycharmProjects/momely/placementarchitect/testbench.py", line 59, in <module>
s.lemmas[0].key
TypeError: 'method' object is not subscriptable

我想知道是否有人能够指出我如何在给定引理或同义词集的情况下获得感觉键的正确方向?

任何建议将不胜感激!

【问题讨论】:

    标签: python nlp nltk wordnet open-multilingual-wordnet


    【解决方案1】:

    看看https://stackoverflow.com/a/27518899/610569 之间的区别Synset.lemmas()[0].keySynset.lemmas()[0].key()

    >>> from nltk.corpus import wordnet as wn
    >>> wn.synset('dog.n.1')
    Synset('dog.n.01')
    >>> wn.synset('dog.n.1').lemmas()
    [Lemma('dog.n.01.dog'), Lemma('dog.n.01.domestic_dog'), Lemma('dog.n.01.Canis_familiaris')]
    >>> wn.synset('dog.n.1').lemmas()[0]
    Lemma('dog.n.01.dog')
    >>> wn.synset('dog.n.1').lemmas()[0].name()
    u'dog'
    
    # To retrieve Princeton WordNet style keys.
    >>> wn.synset('dog.n.1').lemmas()[0].key()
    u'dog%1:05:00::'
    

    对于Open Multilingual WordNet,使用 offset + pos 键会更容易,例如:

    >>> from nltk.corpus import wordnet as wn
    >>> ss = wn.synset('dog.n.1')
    >>> ss.offset()
    2084071
    >>> ss.pos()
    u'n'
    >>> '{}-{}'.format(str(ss.offset()).zfill(8), ss.pos())
    '02084071-n'
    

    在 OMW 界面上搜索 offset + pos 键(例如02084071-n):http://compling.hss.ntu.edu.sg/omw/cgi-bin/wn-gridx.cgi?gridmode=grid 将带您进入一个漂亮的同义词集可视化页面。

    【讨论】:

      【解决方案2】:

      如果您查看此模块的示例,例如在http://www.nltk.org/howto/wordnet.html 中,lemmas 是一个方法——所以你需要在它后面加上 () 来调用它,例如:

      s = wn.synset('skill.n.01')
      s.lemmas() # >>> [Lemma('skill.n.01.skill'), ... ]
      

      然后你可以像这样访问返回值:

      s.lemmas()[0].key # >>> 'skill%1:09:01::'
      

      TypeError: 'method' object is not subscriptable 错误消息告诉您,您正在尝试将方法或函数视为列表 - 当您看到类似的错误时,查找您有 [0] 或类似的可能是功能。

      【讨论】:

      • 好的。这样就解决了 TypeError,但它不返回感知键。它返回这个:。感知键应该如下所示:skill%1:09:01::
      【解决方案3】:

      所以我想通了。在深入研究了 NLTK 的 Wordnet API 之后,我注意到 API 似乎需要像这样调用密钥:

      s = wn.synset('skill.n.01')
      print(s.lemmas) # >>> <bound method Synset.lemmas of Synset('skill.n.01')>
      
      print(str(s.lemmas()[0]._key)) #>>>skill%1:09:01::
      

      因此调用 ._key 成功返回 Sense Key。

      感谢@bouteillebleu 为我指明了正确的开始方向。

      中号

      【讨论】:

        猜你喜欢
        • 2013-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-26
        • 2013-03-11
        • 2011-10-03
        相关资源
        最近更新 更多