什么是Shingling算法 网页去重——Shingling 算法
shingling算法用于计算两个文档的相似度,例如,用于网页去重。维基百科对w-shingling的定义如下:
In natural language processing a w-shingling is a set of unique "shingles"—contiguous subsequences of tokens in a document —that can be used to gauge the similarity of two documents. The w denotes the number of tokens in each shingle in the set.
维基百科用一个浅显的例子讲解了shingling算法的原理。比如,一个文档
"a rose is a rose is a rose"
分词后的词汇(token,语汇单元)集合是
(a,rose,is,a,rose,is, a, rose)
那么w=4的4-shingling就是集合:
{ (a,rose,is,a), (rose,is,a,rose), (is,a,rose,is), (a,rose,is,a), (rose,is,a,rose) }
去掉重复的子集合:
{ (a,rose,is,a), (rose,is,a,rose), (is,a,rose,is) }
给定shingle的大小,两个文档A和B的相似度 r 定义为:
r(A,B)=|S(A)∩S(B)| / |S(A)∪S(B)|
其中|A|表示集合A的大小。
因此,相似度是介于0和1之间的一个数值,且r(A,A)=1,即一个文档和它自身 100%相似。
网页去重——Shingling 算法 相关知识点:
Rabin的指纹生成算法思想如下: 假设A([b1,…,bm])是包含m个二进制字符的二进制字符串,那么可以根据A构造相应的(m-1)度的多项式如下,其中t是不定元。
A(t)=b1tm-1 + b2tm-2+…+bm-1t+bm (1) 给定一个度为k的多项式P(t),如下:
P(t)=a1tk+a2tk-1+…+ak-1t+ak (2) 那么A(t) 除以P(t)的余数f (t)的度数为(k-1)。对于给定的字符串A,定义A的指纹f(A)如下:
f(A)=A(t) mod P(t) (3) 如何计算特征记录:
1.通过删除HTML标签、字母小写化等对网页的预处理将网页内容规范化; 2.取Shingle大小为10(即w的值为10),来构造每一个Shingle;
3.对每个Shingle用Rabin的指纹生成算法计算每个Shingle的指纹; 4.采用整除的方法且设定m为25,来选择部分Shingle组成这个网页的特征记录。
步骤: 第一步,计算每个文档的特征记录。这一步和总的文档数成线性关系。
第二步,计算得到一个所有的Shingle以及每个Shingle所出现在的文档列表,且按Shingle值排序。为了实现这个目标,每个文档的特征记录被扩展二元组<SHINGLE,文档ID>列表。所有文档的特征记录扩展得到的列表最终将个庞大列表,因此我们对其进行划分、计算、合并来得到最终结果。 第三步,检测任意两个文档是否有共同的Shingle,如果有则记录这个文及他们所包含的相同的Shingle的数目,然后组成一个列表。为了实现这个们以第二步中得到的有序的二元组<SHINGLE,文档ID>组成的列表文件为基通过为每个在多个文档中出现的Shingle初始化一个三元组<文档ID,文档然后统计所有的这样的三元组并合并有着相同文档ID对的三元组,得到一个三元祖<文档ID,文档ID,共同Shingle数>所组成的列表。最后再采用划分并的方式来得到最后的三元组<文档ID,文档ID,1>组成的列表,并按第档ID排序。这一步的计算需要最大的磁盘空间,因为由于Shingle以及文档都很庞大,计算初始化以及更多的中间临时结果都要消耗极大的存储空间。
第四步,进行最后的完整的聚类。检查每个三元组<文档ID,文档ID,共同数>看其是否达到了所设定的相似度的临界值,如果是则判定他们相似并归(或增加一个这两个文档之间的某个关系)。 终于理清了大概的思想,着手编程了。因为是做实验,在计算特征记录的第一步省略了,而且我只是做两个文本之间的相似度。在计算特征记录第三步时我用的开源的包com.planetj.math.rabinhash.RabinHashFunction32,该包中可以生成32位的哈希值,也可以使64位的,我采用的是32位。对第四步m值我在想是不是自己设置的,我刚开始时设置为25,但是发现经过指纹生成算法得到的值很少有能被其整除的。后来自己再用几个值试试。这里我还有个疑问,还需要保存能被m值整除的hash值所对应的Shingle?因为我觉得既然不同的Shingle对应的Hash值是一样的机会是很渺茫的。那言外之意的是只要对两个文档比较hash值就可以了。这里有个很严重的性能问题就是在第三步中,可能会有大量的在多个文档中都出现的Shingle,因为共享某些Shingle的文档ID对的数量可能是非常庞大的。太多的共享Shingle可以极大的增加这种文档对数量。
在这基础上有人采取了Super-Shingle算法,其实就是将特征记录再使用一次指纹生成算法。 自己按照上面的步骤编程,但是后来发现效率是很低的,如果是两个相同的文档,那相似度是为1,但是稍微修改,相似度就急剧下降。也不知道是不是自己编程出现的问题,做这些就是有些不好:就是不知道自己到底是对好是错。 我想出现这样的原因可能是因为得到的hash值很少能有被给定的值整除的。这样那就得到的特征记录就非常少
from :http://zz.shangdu.com/index-htm-m-cms-q-view-id-693.html
分享到:
相关推荐
这篇研究论文探讨了近似重复网页的聚类随时间演化的特性,并且介绍了一种改进的shingling算法来辅助搜索引擎进行网页去重的工作。 #### Shingling算法概述 Shingling算法是一种用于度量文档间相似性的技术,它最初...
网页去重是互联网数据处理中的一个重要任务,目的是识别并消除重复或近似的网页内容。本文主要探讨了六种用于网页去重的算法:I-Match、Shingling、SimHashing(局部敏感哈希)、Random Projection以及SpotSig和...
对比介绍了网页查重算法Shingling和Simhash的优劣,提出了两者适用的不同领域,是文本相似度计算的重要参考资料
在IT领域,去重算法是数据处理和信息检索中的关键组成部分,主要目的是识别并消除重复的数据,以提高存储效率和数据分析的准确性。本项目提供的"SimilarityAlgorithms"压缩包包含了几种常用的相似性计算方法,包括...
erlang_w_shingling erlang中的W-shingling算法实现。描述: 该模块包含使用 W-shingling 算法比较文本相似性的函数。 关于算法的信息: : 出口: similarity ( Text1 , Text2 , ShingleLength ) -> float () 返回两...
3. **Shingling算法**:由Broder等人提出的,它将网页分割成小的片段(shingles),然后计算这些片段的集合。相似网页的shingle集合会有很高的重叠度。这种方法结合了局部和全局信息,提高了查重的准确性。 4. **...
在IT领域,尤其是在大数据分析和信息检索中,`shingling`、`simhash` 和 `bloom filter` 是三个非常重要的概念。这些技术主要用于处理大量数据,进行相似性检测和去重,从而提高效率和准确性。下面将详细介绍这三个...
实验内容:采用Shinling及Minhash技术分析以下两段文本的Jaccard相似度: (1) The TOEFL test is an English language assessment that is often required for admission by English-speaking universities and ...
- **URL去重**:利用哈希表存储已访问的网页URL,新抓取的网页URL经哈希处理后与表中已有条目对比,以此判断网页是否已被收录。 - **关键词匹配**:提取网页的关键内容,如标题、关键词、正文等,构建评价函数,通过...
在网页查重算法中,通过建立索引,可以快速找到与特定网页相似的其他网页,减少不必要的比较,提高查重的准确性和速度。 5. 实验验证改进型布尔模型查重算法的有效性。 实验验证是检验算法性能的重要手段。在这篇...
实时大数据分析实验四——文本相似-Shingling、Minhash算法 一、实验内容 采用Shinling及Minhash技术分析以下两段文本的Jaccard相似度: (1) The TOEFL test is an English language assessment that is often ...
- **ASH**:可能代表Adaptive Shingling Hashing,一种基于块的压缩算法。 - **COMP**:可能是压缩的通用术语,具体实现不清楚。 这些源代码对于学习数据压缩原理、理解和实现压缩算法以及优化现有压缩系统都非常...
The book is based on Stanford Computer Science course CS246: Mining Massive Datasets (and CS345A: Data Mining). The book, like the course, is designed at the undergraduate computer science level with...
本文将深入探讨相似度计算的一种常见方法——Jaccard相似度,并介绍两种相关的技术:Shingling和Minhashing。 Jaccard相似度是衡量两个集合相似程度的指标,其定义为两个集合交集的大小除以它们并集的大小。用数学...
用Shingling算法和LCS算法判断字符串相似度之前,先去除字符串中的特殊字符和城市名称 重构KDTree @author: peng.huang @email: @date: 2015-05-01 @update content: 补充添加LCS算法对酒店名称判重 完成LCS算法...
《网页查重算法Shingling和Simhash深度解析》 在信息技术日新月异的今天,数据处理和信息检索已经成为日常工作中不可或缺的部分。特别是在互联网领域,网页内容的重复性问题一直困扰着搜索引擎优化和网络爬虫的设计...
在Simhash算法的大框架下,文档shingling、minhashing以及LSH三个技术紧密结合,构建起一套处理文档相似性的流程。首先,将文档转换成字符串集合,随后将这些集合转换成短签名,最后利用LSH识别可能相似的签名对,...
聚类的主要应用场景包括作为独立的工具来探索数据的分布情况,或者作为其他机器学习算法的预处理步骤。 #### 层次聚类 **层次聚类**是一种构建树状结构来表示数据间相似性的聚类方法。它有两种基本形式: 1. **自...
根据给定文件的信息,以下知识点总结了标题“连接位极大似然动态过滤算法”和描述中所涉及的内容。 知识点一:极大似然估计(MLE) 极大似然估计是一种用于统计推断的方法。在机器学习和数据挖掘中,极大似然估计...