【问题标题】:NLTK wordnet similarity returns "None" for adjectivesNLTK wordnet 相似度为形容词返回“无”
【发布时间】:2012-11-25 20:53:54
【问题描述】:

我已经看到,对于动词,NLTK 中的 WordNet 相似性度量有时会返回“无”,但我知道这不应该发生在其他词性上。查看代码似乎很清楚,在任何其他词性中的两个单词对之间没有关系的地方应该产生-1,而不是“无”。然而我得到了这个结果:

>>> from nltk.corpus import wordnet as wn
>>> plodding1 = wn.synset('plodding.a.01')
>>> for sense in wn.synsets('unsteady','a'):
        print sense.name, sense.path_similarity(plodding1)

unsteady.a.01 None
unfirm.s.01 None

有什么想法吗?

【问题讨论】:

    标签: nltk similarity wordnet


    【解决方案1】:

    WordNet 中的形容词不是按层次排列的,因此最短路径不适用于形容词。副词也是如此。唯一适用于形容词和副词的度量是相关性度量,例如 lesk 度量。 WordNet 中的动词被组织成层次结构,但其中有很多而且它们相当“短”,因此有时您无法找到动词之间的路径(因为它们可能属于不同的动词层次结构)。一般来说,您可以找到名词之间的最短路径,因为它们属于一个大的名词层次结构(至少从 WordNet 3.0 开始)。

    我希望这会有所帮助。更多关于这些问题的讨论也可以在 WordNet::Similarity 列表中找到(它不是 NLTK 的一部分,而是进行此类测量的独立 Perl 包)。 http://wn-similarity.sourceforge.net

    祝你好运, 泰德

    【讨论】:

      【解决方案2】:

      您正在比较的特定同义词在其分类中似乎没有“最短路径”。如果您将 "unsteady"所有同义词集与 "plodding" 的所有同义词集进行比较,您确实会发现一些路径相似之处。

      我尝试了更通用的:

      from nltk.corpus import wordnet as wn
      sy1 = wn.synsets('plodding')
      sy2 = wn.synsets('unsteady')
      
      for s in sy1:
          for t in sy2:
              print "%s\t %s\t :%s" % (s.name,t.name,wn.path_similarity(s,t))
      

      我得到:

      drudgery.n.01    unsteady.a.01   :None
      drudgery.n.01    unfirm.s.01     :None
      plodding.n.02    unsteady.a.01   :None
      plodding.n.02    unfirm.s.01     :None
      slog.v.02    unsteady.a.01   :0.2
      slog.v.02    unfirm.s.01     :0.2
      leaden.s.04  unsteady.a.01   :None
      leaden.s.04  unfirm.s.01     :None
      

      希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-06-07
        • 1970-01-01
        • 1970-01-01
        • 2015-08-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多