【发布时间】:2013-09-16 18:49:36
【问题描述】:
我有一个清单:list = ['item1', 'item2', 'item3', 'item4']
我想比较所有项目的相似度。
如果item2和item3相似,则结果为list = ['item1', 'item2', 'item4']
编辑:
抱歉,我的问题令人困惑。
列表项是一组三元组。我想删除列表中的类似项目。
list = [('very','beauty','place'),('very','good','place'),('another','trigram','item')]
计算该列表中每个pair-item的jaccard相似度,如果pair-item的jaccard分数> 0.4,我称之为相似。在此示例中,item1 和 item2 相似。我想要的最后一个输出是:
list = [('very','beauty','place'),('another','trigram','item')]
这是计算jaccard分数的方法:
def compute_jaccard_index(set_1, set_2):
n = len(set_1.intersection(set_2))
return n / float(len(set_1) + len(set_2) - n)
【问题讨论】:
-
你认为什么是“相似”?
-
它是传递的吗?你有更好的例子(包括代码)吗?
-
当
item2和item3相似时,你如何决定这两个元素中的哪些应该保留,哪些应该删除? -
另外,为什么每个人都认为“相似”意味着相同,因此认为集合是合适的解决方案?
-
“相似”是可传递的吗?如果
a类似于b并且b类似于c是a类似于c?例如,如果“first”与“fist”相似,“fist”与“list”相似,那么“first”与“list”相似?