文本查重算法SimHash

1.介绍  

爬虫采集了大量的文本数据,如何进行去重?可以使用文本计算MD5,然后与已经抓取下来的MD5集合进行比较,但这种做法有个问题,文本稍有不同MD5值都会大相径庭,

无法处理文本相似问题。另一种方式是本文要介绍的SimHash,这是谷歌提出的一种局部敏感哈希算法,在吴军老师的《数学之美》里也有介绍,这种算法可以将文本降维成一个

数字,极大地减少了去重操作的计算量。SimHash算法主要分为以下几个步骤:

1.分词,并为每个词加上权重,代表这个词在这句话中的重要程度(可以考虑使用TF-IDF算法)

2.哈希,分好每个词映射为哈希值

3.加权,按照单词的权重形成加权数字串,比如“美国”的hash值为“100101”,通过加权计算为“4 -4 -4 4 -4 4”;“51区”的hash值为“101011”,通过加权计算为 “ 5 -5 5 -5 5 5”。

4.合并,把上面各个单词算出来的序列值累加,变成只有一个序列串

5.降维,如果序列串每一位大于0 记为 1,小于0 记为 0。最后算出结果为:“1 0 1 0 1 1”。

2.SimHash的比较

根据上面的步骤可以计算出每个文本的一个SimHash值,两个SimHash的相似度就是通过比较不同二者数位的个数,这叫做海明距离,比如10101 和 00110 ,海明距离

为3。

3.比较效率的提高

加入我们已经有了一个simhash库,现在有一个query过来需要查询是否库里存在与这个query海明距离为1到3的文本,如何查询?

方式1. 将这个query的海明距离为1到3的结果实时计算出来,然后依次在库里查找,缺点:海明距离为1到3的结果可能有上万个,逐个查询效率肯定很低。

方式2.将库里每个simhash海明距离为1到3的结果事先离线计算出来,这样每个查询只需要O(1)的复杂度。缺点:需要的存储空间非常大。

待续。。。。

原文地址:https://www.cnblogs.com/showing/p/8616731.html

时间: 2024-07-29 10:21:38

文本查重算法SimHash的相关文章

minhash算法用于文本查重

minhash算法查重是本科毕业设计题目 室友说本科毕业设计做不了什么水平,翔哥(宿舍另一个室友)可以做比毕设更难的作品 ——引言 这里以上的2张图片是来源自张荃硕士的研究论文,我把下载了截图上传的 详细清楚的讲了minhash的原理和怎么编程,我就是看了之后才一鼓作气编完的. 因为现在现在是4月,还没有毕业,所以代码就不贴了. 以下是完成的效果. 原文地址:https://www.cnblogs.com/shao1213/p/12658561.html

海量文件查重SimHash和Minhash

SimHash 事实上,传统比较两个文本相似性的方法,大多是将文本分词之后,转化为特征向量距离的度量,比如常见的欧氏距离.海明距离或者余弦角度等等.两两比较固然能很好地适应,但这种方法的一个最大的缺点就是,无法将其扩展到海量数据.例如,试想像Google那种收录了数以几十亿互联网信息的大型搜索引擎,每天都会通过爬虫的方式为自己的索引库新增的数百万网页,如果待收录每一条数据都去和网页库里面的每条记录算一下余弦角度,其计算量是相当恐怖的. 我们考虑采用为每一个web文档通过hash的方式生成一个指纹

.NET下文本相似度算法余弦定理和SimHash浅析及应用

在数据采集及大数据处理的时候,数据排重.相似度计算是很重要的一个环节,由此引入相似度计算算法.常用的方法有几种:最长公共子串(基于词条空间).最长公共子序列(基于权值空间.词条空间).最少编辑距离法(基于词条空间).汉明距离(基于权值空间).余弦值(基于权值空间)等,今天我们着重介绍最后两种方式. 余弦相似性 原理:首先我们先把两段文本分词,列出来所有单词,其次我们计算每个词语的词频,最后把词语转换为向量,这样我们就只需要计算两个向量的相似程度. 我们简单表述如下 文本1:我/爱/北京/天安门/

【NLP】Python实例:基于文本相似度对申报项目进行查重设计

Python实例:申报项目查重系统设计与实现 作者:白宁超 2017年5月18日17:51:37 摘要:关于查重系统很多人并不陌生,无论本科还是硕博毕业都不可避免涉及论文查重问题,这也对学术不正之风起到一定纠正作用.单位主要针对科技项目申报审核,传统的方式人力物力比较大,且伴随季度性的繁重工作,效率不高.基于此,单位觉得开发一款可以达到实用的智能查重系统.遍及网络文献,终未得到有价值的参考资料,这个也是自然.首先类似知网,paperpass这样的商业公司其毕业申报专利并进行保密,其他科研单位因发

高效网页去重算法-SimHash

记得以前有人问过我,网页去重算法有哪些,我不假思索的说出了余弦向量相似度匹配,但如果是数十亿级别的网页去重呢?这下糟糕了,因为每两个网页都需要计算一次向量内积,查重效率太低了!我当时就想:论查找效率肯定是要考虑hash算法,相同字符串的hashcode肯定相同,不同字符串的hashcode却是大不相同,这也不符合要求啊,会不会存在一种算法能够使相似字符串的code值也相同或相似呢,于是就找到了Google的网页去重算法-SimHash.我们在使用SimHash算法前需要根据文档量级选择SimHa

基于word分词提供的文本相似度算法来实现通用的网页相似度检测

实现代码:基于word分词提供的文本相似度算法来实现通用的网页相似度检测 运行结果: 检查的博文数:128 1.检查博文:192本软件著作用词分析(五)用词最复杂99级,相似度分值:Simple=0.968589 Cosine=0.955598 EditDistance=0.916884 EuclideanDistance=0.00825 ManhattanDistance=0.001209 Jaccard=0.859838 JaroDistance=0.824469 JaroWinklerDi

MacOS 系统上快速高效的文件查重工具:Gemini 2

本文标签: Mac效率工具 MacOS Gemini2 MacOS文件查重工具 MacPaw MacPaw 发布了全新的 Gemini 2,这是一款文件查重工具,可以快速地帮你找出 Mac 硬盘中重复的文件内容,并加以清理. 作为第二代大版本更新,Gemini 2 在保留核心功能不变的基础上,整体界面的改版给人焕然一新的感觉,摒弃了之前的金属拉丝风格,Gemini 2 在设计元素上引入了更多线条的流线感,色彩的运用也更加明亮,和 Yosemite 以来的系统风格更加搭配. 当然,颜值的提升不算什

paperDF 瑞克论文查重软件 使用说明

paperDF 瑞克论文查重软件 使用说明 软件下载地址:https://pan.baidu.com/s/1b60LEu 一.软件截图 (软件启动界面) (单文件查重 软件运行界面) 目录文件介绍 二.使用说明 1.本软件是基于JAVA开发,运行本软件需安装JRE1.7或以上版本JAVA运行环境. 2.本软件需作者授权后才能使用.获取授权方法: 1.运行本软件,软件将提示获取授权.请复制授权文本框中的字符串发到作者邮箱获取授权文件. 2.将获取到的授权文件替换软件目录中的mylicense.li

js查重去重性能优化心得

概述 今天产品反映有个5000条数据的页面的保存按钮很慢,查看代码看到是因为点击保存按钮之后,进行了查重操作,而查重操作是用2个for循环完成了,时间复杂度是O(n^2).没办法,只能想办法优化一下了. 主要参考了这篇文章:JavaScript 高性能数组去重 源码 简单来说,这个页面的要求是查找一个数组中的重复项,并且返回重复项的行号.源码简化后如下: checkData(tableData) { // console.time('数组检查重复项时间'); // 检查重复项,检查空值(全局)