Python 实现Jaccard 相似度 计算排序

基本原理

Jaccard 的核心就是。交集/并集。

公式为 Jaccard(a,b) =. | F(a) ^ F(b)| / |F(a) U F(b)||

如何理解这个 指标呢 ? 比如说 我和 我朋友都喜欢 听歌, 我们在 网易云音乐听歌,我听过的歌 和 他听过的歌 类似,那么我们这两个 用户就 非常相似。 可以 通过 jaccard 来根据我们的听歌的记录的交集和并集来计算相似度。

如果我和 我的朋友 听过的歌完全一样 ,那么 fa = fb , jaccard 为1。如果我们之间没有共同的播放记录,那么 交集为0,相似度就为零。

工程实现

Jaccard的a和b实际上就是不同 document 的 某一个 相同字段, 可以是 文本, 也可以是 id ,最后通过 F(a)来构建 集合特征。

在我的例子中,我用的是 文本的分词特征。如果 a 和b两段文本有 很大的比例是 共同的关键词,那么a和b很相似

代码

def jaccard(a,b):
    return len(set(a).intersection(set(b))) / len(set(a).union(set(b)))

def get_common_word_number(query, docs):
    #return [  len(set(query).intersection(set(d))  ) for d in docs]
    return [ jaccard(query,d) for d in docs]

def rank_feature(id2doc, query_id, eng_field, sub_data):
    query = id2doc[query_id][eng_field]
    do
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值