站在巨人_啊哈、zstu_翊、lengye7、黑夜路人的肩膀上~
分析数据前,我们需要对数据去重,如何选择和设计文本的去重算法?
常见的去重算法有:余弦夹角算法、欧式距离、Jaccard相似度、最长公共子串、编辑距离等。这些算法是先将两篇文章分别进行分词,得到一系列特征向量,然后计算特征向量之间的距离(可以计算它们之间的欧氏距离、海明距离或者夹角余弦等等),从而通过距离的大小来判断两篇文章的相似度。这些算法对于数据量小的文本还比较好用,我们如何对于这些海量千万级的数据进行高效的合并去重?

sim哈希算法原理

参考论文:Similarity estimation techniques from rounding algorithms,论文分为以下几部分,如下图所示:

1. 分词。 去停用词后,为每个词加上tf-idf权重。我们假设权重分为5个级别(1~5)。
例如:“ 美国“51区”雇员称内部有9架飞碟,曾看见灰色外星人 ” ==> 分词后为 “ 美国(4) 51区(5) 雇员(3) 称(1) 内部(2) 有(1) 9架(3) 飞碟(5) 曾(1) 看见(3) 灰色(4) 外星人(5)”,括号里是代表单词在整个句子里重要程度,数字越大越重要。
2. 哈希算法。 每个词通过hash函数生成固定位数二进制哈希值,要把文章变为数字计算才能提高相似度计算性能。
例如:“美国”通过hash算法计算为 100101,“51区”通过hash算法计算为 101011。
3. 加权。 根据步骤2哈希算法生成的结果,按照单词的权重形成加权数字串。
例如:“美国(4)”的hash值为“100101”,通过加权计算为“4 -4 -4 4 -4 4”;“51区(5)”的hash值为“101011”,通过加权计算为 “ 5 -5 5 -5 5 5”。
4. 合并。 分别把单个句子每个词的序列值累加生成对应的一个序列串。
例如:将步骤3中每个单词的序列值相加,结果为“17 -17 1 -1 1 17”。
5. 降维。 将步骤4单个句子生成的序列串变成0-1串,形成我们最终的simhash签名值。大于0 记为 1,小于0 记为 0。
例如:将步骤4中结果转换为“1 0 1 0 1 1”。

图1 sim哈希的计算过程

sim哈希算法应用

每篇文档得到Sim哈希签名值后,接着计算两个签名的海明距离即可。根据经验值,对64位的Sim哈希值,海明距离在3以内的可认为相似度比较高。

  • 海明距离的求法:异或,同0异1。两个二进制数“异或”后得到1的个数,即为海明距离的大小。

具体操作:

  1. 我们可以把 64 位的二进制simhash签名均分成4块,每块16位。根据鸽巢原理(也称抽屉原理),如果两个签名的海明距离在 3 以内,它们必有一块完全相同。如下图所示:
  2. 把分成的4 块中的每一个块(即16位)分别作为前16位,生成四份table来进行查找。
  3. 采用精确匹配的方式查找前16位
  4. 如果样本库中存有234(差不多10亿)的哈希指纹,则每个table返回2(34-16)=262144个候选结果,大大减少了海明距离的计算成本。

文本去重:sim哈希算法相关推荐

  1. data_structure_and_algorithm -- 哈希算法(上):如何防止数据库中的用户被脱库?

    最近写的文章有点杂,看上去东一点西一点,最后会在博客目录中捋顺的. 今天主要看一下哈希算法的应用,主要参考:前谷歌工程师王争的课程,感兴趣可以通过下面方式微信扫码购买: 还记得 2011 年 CSDN ...

  2. 哈希算法(一)---如何防止数据库中的用户信息被脱库?

    目录 什么是哈希算法? 应用一:安全加密 应用二:唯一标识 应用三:数据校验 应用四:散列函数 解答开篇 内容小结 课后思考 还记得 2011 年 CSDN 的"脱库"事件吗?当时 ...

  3. 算法学习笔记13:哈希算法

    哈希算法(上):如何防止数据库中的用户信息被脱库 什么是哈希算法 应用一:安全加密 应用二:唯一标识 应用三:数据校验 应用四:散列函数 解答开篇 哈希算法(下):哈希算法在分布式系统中有哪些应用 应 ...

  4. 【必备算法】哈希算法:七种应用及场景示例

    在文章开头先看看哈希算法到底什么? 定义:将任意长度的二进制值串映射为固定长度的二进制值串,这个映射的规则就是哈希算法.通过原始数据映射之后得到的二进制值串就是哈希值 需要满足的四点要求: 从哈希值不 ...

  5. 算法:哈希算法的应用场景

    什么是哈希算法 将任意长度的二进制值串映射为固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值. 一个优秀的哈希算法应该满足下面几个条件: 从哈希值不能 ...

  6. minhash算法检索相似文本_文本去重算法:Minhash/Simhash/Klongsent

    日前接到一个对名言警句这种短文本进行去重的小任务,下图是几个重复文本的示例: 很直观的结论就是重复度越高的文本,具有更多重复的词汇.一个最直接的去重思路可以描述为:将文本进行分词处理,统计各文本词汇的 ...

  7. 路由器距离向量算法计算举例_文本去重算法:Minhash/Simhash/Klongsent

    日前接到一个对名言警句这种短文本进行去重的小任务,下图是几个重复文本的示例: 很直观的结论就是重复度越高的文本,具有更多重复的词汇.一个最直接的去重思路可以描述为:将文本进行分词处理,统计各文本词汇的 ...

  8. R语言实现︱局部敏感哈希算法(LSH)解决文本机械相似性的问题(一,基本原理)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 私认为,文本的相似性可以分为两类:一类是机械相 ...

  9. 算法 # SimHash 算法:文本相似度、文本去重、海量文本快速查询

    SimHash SimHash 是 Google 发明的海量网页去重的高效算法,将原始的文本映射为 64 位的二进制串,然后通过比较二进制的差异进而表示原始文本内容的差异. 传统的 Hash 算法只负 ...

  10. hashset去重原理_基于simhash的文本去重原理

    互联网网页存在着大量重复内容,必须有一套高效的去重算法,否则爬虫将做非常多的无用功,工作时效性无法得到保证,更重要的是用户体验也不好.业界关于文本指纹去重的算法众多,如 k-shingle 算法.go ...

最新文章

  1. Django从理论到实战(part48)--Django表单
  2. mysql 不指定 长度吗_mysql中整数类型后面的数字,是不是指定这个字段的长度?比如int(11),11代表11个字节吗?...
  3. How to debug WCF in local
  4. linux系统运行application,[分享]分享曾经做过的一个嵌入式系统application框架 | 勤奋的小青蛙...
  5. 【转】android 完全退出应用程序
  6. 浅谈java实现桌面小程序
  7. 不会win10文件夹同步?教你两种方法
  8. python弹性碰撞次数圆周率_关于“用理想弹性碰撞能用来计算π”视频的小讨论...
  9. Flutter实战】文本组件及五大案例
  10. 傅盛:认知升级三部曲(深度好文)
  11. java8新特性stream流
  12. php微信二维码签到墙互动,微久信微信墙2017全新版本教程第二篇:微信签到/扫码3D签到/微信手绘签到...
  13. wpf 的 Window或UserControl绑定自己后台属性
  14. 国科大《自然语言处理》复习(宗成庆老师)
  15. 企业微信欢迎语如何将链接转换为图文卡片形式?
  16. 北通xbox360模拟器_如何将无线Xbox 360控制器连接到计算机
  17. Windows10安装Golang环境
  18. QMC5883L磁力计驱动
  19. 了解TTL、COMS电平
  20. 说说VB中的语法规则

热门文章

  1. Axure|【民宿】民宿APP原型
  2. 再见beycond comapre,适合程序员使用的免费文件对比工具——CCompare1.14
  3. 计算机策略组无法打开怎么办,Win10系统gpedit.msc组策略打不开怎么解决
  4. 大学生如何自学PR剪辑以及PS教程?
  5. 如何修改开机背光亮度
  6. 临时邮箱服务网站不完全列表
  7. creo数控编程怎么样_CREO 3.0中文版数控加工高手必备118招
  8. dx逆向建模步骤_什么是3D打印?游戏建模具体是什么的?哪个更有发展
  9. 需求与商业模式分析-3-设计
  10. NPDP产品经理小知识:商业模式画布的9个构成要素