网上求jaccard相似系数 list的交集和并集使用set存在一定的问题:
1. set会去重;2.包含关系的时候为1
这里改进下
def jaccard_distance(s1, s2):
"""Jaccard 系数"""
s1 = str(s1)
s2 = str(s2)
"""保证s2 更长"""
if len(s1) > len(s2):
temp = s1
s1 = s2
s2 = temp
s1_list = list(s1)
s2_list = list(s2)
ret_a = [i for i in s1_list if i in s2_list] # 交集
if len(ret_a) == len(s1_list):
return len(ret_a)/len(s2_list)
else:
ret_b = [i for i in s1_list if i not in s2_list] # 交集
ret_b.extend(ret_a)
return len(ret_a)/len(ret_b)