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

1主要概念

  海明距离:在信息编码中,两个合法代码对应位上编码不同的位数称为码距,又称海明距离。

注:比如合法代码长度为8,那么00111100与11110000的海明距离是4,10101111与01101111的海明距离是2,11110000与11110000的海明距离是0.

2算法流程

1)分词

  将文档分词,然后为每个词分配权重(比如可以用tf-idf算法计算权重,但这里需要变换一下算法,将tf-idf值以单调递增函数映射到一个整数值),举个例子:我(3)是(2)中国人(5),我(3)热爱(4)我(3)的(1)祖国(5)。括号中是权重,权重越高表示这个词在文档中越重要。接下来需要去掉tf-idf值过低的,这样会把“的”这种虚词过滤掉。

2)计算Hash

  计算每个词的Hash值,比如“我”——01001000,“是”——10110011,“中国人”——11001100,“热爱”——10101010,“祖国”——01011000

3)加权

  将词乘以对应的权值,0用-1代替乘以对应权值,这样,“我”—— -33-3-33-3-3-3,“是”—— 2-222-2-222,“中国人”—— 55-5-555-5-5,“热爱”—— 4-44-44-44-4,“祖国”—— -55-555-5-5-5

4)合并

  把单词序列从前到后按位累加,上面累加的结果是3,7,-7,-5,15,-9,-7,-15

5)降维

  把第4)步的结果变为0-1串,方法是大于0的—>1,小于0的->0,所以结果是11001000,这样每篇文档会得到一个ID

6)比较海明距离

  将第5)步得到的结果与已有的每一篇文档的ID做异或运算,然后求运算结果中1的个数(似曾相识燕归来啊!),得到海明距离。通常对于长文档来说,海明距离小于3的会被认为是一篇文档。对于微博等短文本来说,海明距离可以设置的较大,比如10以内的会被认为是同一篇文档。

3算法优缺点

优点:

1)算法高效,非常适用于大规模网页去重

2)算法非常容易使用在MapReduce等分布式计算中

3)对于每篇文档来说,算法消耗空间非常小

缺点:

1)对于长文档和短文档同时存在的情况,只依靠算法本身尚不能完美解决网页去重的问题

2)对于两篇看似完全不相关的文档来说,其海明距离甚至有可能为0,但出现这种情况的概率极小

高效网页去重算法-SimHash的更多相关文章

  1. 一个基于特征向量的近似网页去重算法——term用SVM人工提取训练,基于term的特征向量,倒排索引查询相似文档,同时利用cos计算相似度

    摘  要  在搜索引擎的检索结果页面中,用户经常会得到内容相似的重复页面,它们中大多是由于网站之间转载造成的.为提高检索效率和用户满意度,提出一种基于特征向量的大规模中文近似网页检测算法DDW(Det ...

  2. 网页去重之Simhash算法

    Simhash算法是Google应用在网页去重中的一个常用算法,在开始讲解Simhash之前,先了解——什么是网页去重?为什么要进行网页去重?如何进行网页去重,其基本框架是什么?   网页去重,顾名思 ...

  3. 海量数据去重之SimHash算法简介和应用

    SimHash是什么 SimHash是Google在2007年发表的论文<Detecting Near-Duplicates for Web Crawling >中提到的一种指纹生成算法或 ...

  4. 文本去重之SimHash算法

    文本去重之SimHash算法 - pathenon的个人页面 - 开源中国社区 文本去重之SimHash算法

  5. 【转】JavaScript下对去重算法的优化

    本人较懒,直接将链接附上: JavaScript下去重算法优化:http://www.linuxde.net/2013/02/12062.html

  6. 谷歌的网页排序算法(PageRank Algorithm)

    本文将介绍谷歌的网页排序算法(PageRank Algorithm),以及它如何从250亿份网页中捞到与你的搜索条件匹配的结果.它的匹配效果如此之好,以至于“谷歌”(google)今天已经成为一个被广 ...

  7. 【转】larbin中的url去重算法

    1.bloom filter算法 传说中,larbin使用bloom filter算法来进行url去重.那我们就先来了解下bloom filter算法好了. [以下转自:http://hi.baidu ...

  8. javascript数组去重算法-----3

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. javascript数组去重算法-----2

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

随机推荐

  1. css引用第三方字体库

    对应的CSS文件中如下方式进行字体库的引用: @font-face { font-family: '造字工房情书'; src: url('../fonts/MFQingShu_Noncommercia ...

  2. windows7 下python3.6 下Scripts文件夹为空

    windows7 下python3.6 下Scripts文件夹为空,安装后不能运行pip,这个时候输入命令: python -m ensurepip 会自动安装pip,然后运行pip3 list就可以 ...

  3. 原生js 保存图片到本地

    <template> <div> <!--创建一个cavas 用来存放图片--> <canvas id="cavasimg" width= ...

  4. async eachSeries如何按序列执行下去

    async callback要执行完才会进到一下个序列 async.mapSeries(files, function(file, outerCB) { var all = fs.readdirsyn ...

  5. python 两种导入的区别

    参考文献: 法1:import module1 使用:这样你调用时就得:module1.funct(),funct2(),... 法2:from module1 import funct() 使用就直 ...

  6. 【集成学习】lightgbm使用案例

    github地址 #!/usr/bin/env python2 # -*- coding: utf-8 -*- """ Created on Sat Mar 31 21: ...

  7. Linux服务器运行环境搭建(四)——Tomcat安装

    官网地址:http://tomcat.apache.org 官网下载地址(Tomcat6):http://tomcat.apache.org/download-60.cgi,Windows下载wind ...

  8. CSS琐碎[1]

    (1)letter-spacing 设置字符间局,用长度指定(百分比兼容性不好) 没有间距 间距6px API:http://gucong3000.github.io/css-book/propert ...

  9. Codeforces 28C Bath Queue 【计数类DP】*

    Codeforces 28C Bath Queue LINK 简要题意:有 n 个人等概率随机进入 m 个房间,一个房间可以有多个人,第 i 个房间有 ai 个水龙头,在一个房间的人要去排队装水,他们 ...

  10. 在 GitHub 公开仓库中隐藏自己的私人邮箱地址

    GitHub 重点在开方源代码,其本身还是非常注重隐私的.这一点与面向企业的 GitLab 很不一样. 不过,你依然可能在 GitHub 上泄露隐私信息,例如企业内部所用的电子邮箱. GitHub 对 ...