如何在wordnet层次结构中使用python nltk找到两个同义词集之间的距离?

Mad*_*dan 3 python nlp nltk wordnet

假设我有两个同义词集synset(car.n.01') 和synset('bank.n.01'),如果我想在wordnet 层次结构中找到这两个同义词集之间的距离,那么我该如何使用nltk?
我在互联网上搜索过,但我得到了类似 lin、resnik、jcn 等的相似性算法,这些算法不能解决我的问题。
请帮我解决这个问题。

axi*_*iom 7

这个

路径相似性, wup_similarity 和 lch_similarity,所有这些都应该有效,因为它们基于 Wordnet 层次结构中两个同义词集之间的距离。

dog = wn.synset('dog.n.01')
cat = wn.synset('cat.n.01')

dog.path_similarity(cat)

dog.lch_similarity(cat)

dog.wup_similarity(cat)
Run Code Online (Sandbox Code Playgroud)


来自同一个链接,(相关部分以粗体显示)

synset1.path_similarity(synset2):

根据连接 is-a (hypernym/hypnoym) 分类法中的词义的最短路径,返回一个分数,表示两个词义的相似程度。分数在 0 到 1 的范围内,除非在找不到路径的情况下(仅适用于动词,因为有许多不同的动词分类法),在这种情况下返回 -1。1 分代表同一性,即将某种意义与其自身进行比较将返回 1。


synset1.lch_similarity(synset2),Leacock-Chodorow 相似度:

根据连接词义的最短路径(如上)和词义出现的分类法的最大深度,返回一个分数,表示两个词义的相似程度。该关系以 -log(p/2d) 形式给出,其中 p 是最短路径长度,d 是分类深度。


synset1.wup_similarity(synset2), Wu-Palmer 相似度:

根据分类法中两个词义的深度和它们的 Least Common Subsumer(最具体的祖先节点)的深度,返回一个表示两个词义的相似程度的分数。请注意,此时给出的分数并不总是与 Pedersen 的 Wordnet Similarity 的 Perl 实现给出的分数一致。