相似本文去重方案-技术栈

算法

simhash + 海明距离

  • 简单易懂讲解simhash算法 hash 哈希:https://blog.csdn.net/le_le_name/article/details/51615931

  • simhash算法及原理简介:https://blog.csdn.net/lengye7/article/details/79789206

  • simhash 的 Python 实现原理: https://www.jianshu.com/p/1187fb7c59c5

  • simhash的中文实现(python) : https://www.jianshu.com/p/1187fb7c59c5

  • 使用SimHash算法实现千万级文本数据去重插入(python版代码: https://blog.csdn.net/sinat_33455447/article/details/88956583

  • 使用SimHash进行海量文本去重:https://www.cnblogs.com/maybe2030/p/5203186.html#_label3

  • 海量数据相似度计算之simhash短文本查找: https://cloud.tencent.com/developer/article/1367128

  • 面试|海量文本去重~simhash: https://blog.csdn.net/rlnLo2pNEfx9c/article/details/85110734

  • python使用simhash实现文本相似性对比(全代码展示):https://blog.csdn.net/weixin_43750200/article/details/84789361

  • simhash的py实现:https://blog.csdn.net/gzt940726/article/details/80460419

  • 海量数据,海明距离高效检索(smlar) - 阿里云RDS PosgreSQL最佳实践: https://developer.aliyun.com/article/159575

核心

判定2篇文章相似的规则,就是 2 个 simhash 的汉明距离 <=3。
查询的复杂性在于:已有 100 亿个文章的 simhash,给定一个新的 simhash,希望判断是否与已有的 simhash 相似。
我们只能遍历100亿个 simhash,分别做异或运算,看看汉明距离是否 <=3,这个性能是没法接受的。

优化的方法就是“抽屉原理”,因为 2 个 simhash 相似的标准是 <=3 比特的差异,所以如果我们把 64比特的 simhash 切成 4 段,每一段 16 比特,那么不同的 3 比特最多散落在 3 段中,至少有 1 段是完全相同的。
同理,如果我们把 simhash 切成 5 段,分别长度 13bit、13bit、13bit、13bit、12bit,因为 2 个simhash 最多有 3 比特的差异,那么 2 个simhash 至少有 2 段是完全相同的。

存储设计

  1. redis + 冗余数据存储 (技术难度较低)
  2. postgres + smlar 插件
  3. Hbase

前期文本预处理时间

一篇千字左右的文章, jieba 分词 + 去除停止词的时间为 0.8 s 左右。
解决方案:
1.安装 jieba_fast : https://github.com/deepcs233/jieba_fast
2. jieba 开启并行: eg. https://github.com/fxsjy/jieba/blob/master/test/parallel/test_file.py

总体设计

  • 【深度好文】simhash文本去重流程 https://zhuanlan.zhihu.com/p/71488127
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值