【问题标题】:Calculation of distances in WordNetWordNet 中的距离计算
【发布时间】:2018-06-02 14:10:37
【问题描述】:

使用 Python 3.5、NLTK 和 WordNet(最新版本),我正在计算单词“continuous”和“ongoing”的所有同义词集对之间的 wup_similarity()。每个距离都是“无”,即使这两个词的简单英语含义看起来确实相似。我还注意到这些词的词性分别是“形容词”和“形容词卫星”。

是不是词性不同导致计算失败? 有没有办法以某种方式结合这两个词性来规避这个问题?

非常感谢您。我的代码 sn-p 如下所示。

import nltk
from nltk.corpus import wordnet as wn
sl1 = wn.synsets("continuous")
sl2 = wn.synsets("ongoing")
for x in sl1:
    for y in sl2:
        print(x, y, x.wup_similarity(y))

【问题讨论】:

    标签: python nltk wordnet


    【解决方案1】:

    不应该有任何“失败”,就像引发类似错误一样。

    不过,它会返回 None,例如

    from nltk.corpus import wordnet as wn
    sl1 = wn.synsets("dog")
    sl2 = wn.synsets("cat")
    for x in sl1:
        for y in sl2:
            print(x, y, x.wup_similarity(y))
    

    [出]:

    Synset('dog.n.01') Synset('cat.n.01') 0.8571428571428571
    Synset('dog.n.01') Synset('guy.n.01') 0.631578947368421
    Synset('dog.n.01') Synset('cat.n.03') 0.631578947368421
    Synset('dog.n.01') Synset('kat.n.01') 0.25
    Synset('dog.n.01') Synset('cat-o'-nine-tails.n.01') 0.42105263157894735
    Synset('dog.n.01') Synset('caterpillar.n.02') 0.4
    Synset('dog.n.01') Synset('big_cat.n.01') 0.8571428571428571
    Synset('dog.n.01') Synset('computerized_tomography.n.01') 0.1
    Synset('dog.n.01') Synset('cat.v.01') None
    Synset('dog.n.01') Synset('vomit.v.01') None
    Synset('frump.n.01') Synset('cat.n.01') 0.48
    Synset('frump.n.01') Synset('guy.n.01') 0.5714285714285714
    Synset('frump.n.01') Synset('cat.n.03') 0.5714285714285714
    Synset('frump.n.01') Synset('kat.n.01') 0.4
    ...
    

    您可以简单地检查 None 并将其分配为零,例如

    sl1 = wn.synsets("dog")
    sl2 = wn.synsets("cat")
    for x in sl1:
        for y in sl2:
            score = x.wup_similarity(y)
            score = score if score else 0
            print(x, y, score)
    

    [出]:

    Synset('dog.n.01') Synset('cat.n.01') 0.8571428571428571
    Synset('dog.n.01') Synset('guy.n.01') 0.631578947368421
    Synset('dog.n.01') Synset('cat.n.03') 0.631578947368421
    Synset('dog.n.01') Synset('kat.n.01') 0.25
    Synset('dog.n.01') Synset('cat-o'-nine-tails.n.01') 0.42105263157894735
    Synset('dog.n.01') Synset('caterpillar.n.02') 0.4
    Synset('dog.n.01') Synset('big_cat.n.01') 0.8571428571428571
    Synset('dog.n.01') Synset('computerized_tomography.n.01') 0.1
    Synset('dog.n.01') Synset('cat.v.01') 0
    Synset('dog.n.01') Synset('vomit.v.01') 0
    Synset('frump.n.01') Synset('cat.n.01') 0.48
    Synset('frump.n.01') Synset('guy.n.01') 0.5714285714285714
    Synset('frump.n.01') Synset('cat.n.03') 0.5714285714285714
    Synset('frump.n.01') Synset('kat.n.01') 0.4
    

    【讨论】:

    • 我所说的失败并不是指异常中的代码级失败,而是指语义失败,因为答案是“无”,即算法没有生成答案,即使程序做过。当两个词的词性树不满足时,WordNet 提供“无”作为相似度。如果我们试图找到名词和动词之间的相似性,就会发生这种情况。在我的问题中,大多数人会认为是形容词的两个看似相似的词具有不同的词性,即“形容词”和“形容词卫星”。我想知道这两个 POS 的目的是什么以及如何绕过它。
    • 在尝试获得相似度/距离分数时,没有简单的方法可以绕过 sa。返回无或 0。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 2012-01-19
    • 2014-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多