对于形容词,NLTK wordnet相似度返回“None”

时间:2012-11-25 20:53:54

标签: nltk similarity wordnet

我已经看到,对于动词,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

有什么想法吗?

2 个答案:

答案 0 :(得分:10)

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

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

祝你好运, 泰德

答案 1 :(得分:0)

您要比较的特定同义词在其分类中似乎没有“最短路径”。如果您将“不稳定”所有同义词与“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

希望有所帮助。