6

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

有什么想法吗?

4

2 回答 2

10

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

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

祝你好运,特德

于 2012-11-26T13:55:28.893 回答
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

希望有帮助。

于 2012-11-26T07:33:50.790 回答