Jaccard与同义词的集合相似性

时间:2016-04-22 22:58:42

标签: algorithm statistics data-mining similarity

假设您有两个用户具有如下所示的属性集:

userA = {"happy", "excited"}
userB = {"sad", "anxious"}

现在,如果我们计算Jaccard的相似性,那么它就是0.但是,我们想要定义excitedanxious非常相似。

我的问题是,这如何构建?

我会定义另一组与excited同义的单词吗?那么我如何将其纳入Jaccard指数计算?

2 个答案:

答案 0 :(得分:0)

我建议使用某种词库制作同义词群集。每个单词最多只属于一个集群 对于每个群集,请选择“规范”代表 现在,当您必须计算Jaccard相似性时,用其簇中的代表替换每个单词。然后照常进行。

示例群集(代表粗体的代表):
1. 良好,伟大,优秀,积极,有价值 2. 糟糕,贫穷,悲伤,可怕

假设你想要计算两个用户的相似度:
userA = {“positive”}
userB = {“good”}

然后将它们转换为
userA'= {“good”}(因为“good”是群集的代表,“积极”属于) userB'= {“good”}

相似度= 1/1 = 1。

答案 1 :(得分:0)

你不能用文字来做这件事,因为它们可能含糊不清,但是如果你能够得出WordNet所谓的“词义”,你可以从那里映射到同义词,它将编码所有具有词义的同义词。哪个匹配。

例如,参见Word Sense Disambiguation的Python NLTK示例:http://www.nltk.org/howto/wsd.html

对synset ID进行聚类会得到您想要的结果(假设anxiousexcited在您用于消除歧义的数据库中实际上至少有一个同义词义。