首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python返回wordnet相似性度量的奇数结果

python返回wordnet相似性度量的奇数结果
EN

Stack Overflow用户
提问于 2013-06-25 11:52:39
回答 1查看 3.1K关注 0票数 5

我试图用python的wordnet来寻找两个单词之间的相似之处。两个示例关键字是‘博弈’和‘莱昂纳多’。首先,我已经提取了这两个单词的所有同义词,并交叉匹配每个同步集,以找到它们的相似性。这是我的密码

代码语言:javascript
复制
from nltk.corpus import wordnet as wn

xx = wn.synsets("game")
yy = wn.synsets("leonardo")
for x in xx:
    for y in yy:
        print x.name
        print x.definition
        print y.name
        print y.definition
        print x.wup_similarity(y)
        print '\n'

以下是总产出:

game.n.01意大利画家、雕塑家、工程师、科学家和建筑师的规则竞赛;意大利文艺复兴时期最多才多艺的天才(1452-1519) 0.285714285714 游戏.n.02意大利画家、雕塑家、工程师、科学家和建筑师;意大利文艺复兴时期最多才多艺的天才(1452-1519) 0.285714285714 游戏.n.03意大利画家、雕塑家、工程师、科学家和建筑师;意大利文艺复兴时期最多才多艺的天才(1452-1519) 0.25 游戏.n.04动物被猎杀为食物或运动,意大利画家,雕塑家,工程师,科学家和建筑师;意大利文艺复兴时期最多才多艺的天才(1452-1519) 0.923076923077 游戏.n.05(网球)一种游戏划分,在此期间,一名选手为莱昂纳多服务,意大利画家、雕塑家、工程师、科学家和建筑师;意大利文艺复兴时期最多才多艺的天才(1452-1519),0.222222222222 游戏.n.06(游戏)意大利画家、雕塑家、工程师、科学家和建筑师在某一点上的得分或获胜所需的分数;意大利文艺复兴时期最多才多艺的天才(1452-1519) 0.285714285714 game.n.07意大利画家、雕塑家、工程师、科学家和建筑师的肉,是意大利文艺复兴时期最多才多艺的天才(1452-1519) 0.5 图n.01意大利画家、雕塑家、工程师、科学家和建筑师做某事(特别是黑手或非法行为)的秘密计划;意大利文艺复兴时期最多才多艺的天才(1452-1519) 0.2 游戏.n.09意大利画家、雕塑家、工程师、科学家和建筑师玩某一游戏所需的游戏设备;意大利文艺复兴时期最多才多艺的天才(1452-1519) 0.666666666667 game.n.10意大利画家、雕塑家、工程师、科学家和建筑师;意大利文艺复兴时期最多才多艺的天才(1452-1519) 0.25 游戏.n.11意大利画家、雕塑家、工程师、科学家和建筑师;意大利文艺复兴时期最多才多艺的天才(1452-1519) 0.222222222222 bet_on.v.01押注于leonardo.n.01意大利画家、雕塑家、工程师、科学家和建筑师;意大利文艺复兴时期最多才多艺的天才(1452-1519) -1 意大利画家、雕塑家、工程师、科学家和建筑师;意大利文艺复兴时期最多才多艺的天才(1452-1519) -1 甘愿面对危险的意大利画家、雕塑家、工程师、科学家和建筑师;意大利文艺复兴时期最多才多艺的天才(1452-1519) -1

但是,game.n.04和leonardo.n.01之间的相似之处真的很奇怪。我认为相似性(0.923076923077)不应该太高。

game.n.04 为了食物或运动而猎杀的动物 leonardo.n.01 意大利画家、雕塑家、工程师、科学家和建筑师;意大利文艺复兴时期最多才多艺的天才(1452-1519) 0.923076923077

我的概念有什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-25 12:29:25

根据医生们wup_similarity()方法返回..。

...a评分表示两个词的词义是多么相似,这取决于两个词义在分类学中的深度和它们最不常见的次盛器(最特定的祖先节点)的深度。

...and...

代码语言:javascript
复制
>>> from nltk.corpus import wordnet as wn
>>> game = wn.synset('game.n.04')
>>> leonardo = wn.synset('leonardo.n.01')
>>> game.lowest_common_hypernyms(leonardo)
[Synset('organism.n.01')]
>>> organism = game.lowest_common_hypernyms(leonardo)[0]
>>> game.shortest_path_distance(organism)
2
>>> leonardo.shortest_path_distance(organism)
3

...which就是为什么它认为它们很相似,尽管我.

代码语言:javascript
复制
>>> game.wup_similarity(leonardo)
0.7058823529411765

由于某种原因,...which是不同的。

更新

我想要一些测量来显示不同的(“游戏”,“国际象棋”)远比不同的(“游戏”,“莱昂纳多”)更少。

这样的事怎么样..。

代码语言:javascript
复制
from nltk.corpus import wordnet as wn
from itertools import product

def compare(word1, word2):
    ss1 = wn.synsets(word1)
    ss2 = wn.synsets(word2)
    return max(s1.path_similarity(s2) for (s1, s2) in product(ss1, ss2))

for word1, word2 in (('game', 'leonardo'), ('game', 'chess')):
    print "Path similarity of %-10s and %-10s is %.2f" % (word1,
                                                          word2,
                                                          compare(word1, word2))

...which指纹..。

代码语言:javascript
复制
Path similarity of game       and leonardo   is 0.17
Path similarity of game       and chess      is 0.25
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17296588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档