• 回答数

    2

  • 浏览数

    229

基督城里
首页 > 学术期刊 > simhash实现论文查重

2个回答 默认排序
  • 默认排序
  • 按时间排序

蓝色晚风blue

已采纳

传统的Hash算法只负责将原始内容尽量均匀随机地映射为一个签名值,原理上仅相当于伪随机数产生算法。传统的hash算法产生的两个签名,如果原始内容在一定概率下是相等的;如果不相等,除了说明原始内容不相等外,不再提供任何信息,因为即使原始内容只相差一个字节,所产生的签名也很可能差别很大。所以传统的Hash是无法在签名的维度上来衡量原内容的相似度,而SimHash本身属于一种局部敏感哈希算法,它产生的hash签名在一定程度上可以表征原内容的相似度。

84 评论

朝夕忆可否

参考论文来源 《Similarity estimation techniques from rounding algorithms》 。 介绍下这个算法主要原理,为了便于理解尽量不使用数学公式,分为这几步(标准做法):

完整的算指纹的算法:

按照这种市面上的通用做法,传入的map 可以是无序的

有一个小问题提请注意 直接用 1<

两种方式的比较:

这里先引入一个概念: 抽屉原理

假设我们要寻找海明距离3以内的数值,根据抽屉原理,只要我们将整个64位的二进制串划分为4块,无论如何,匹配的两个simhash code之间 至少 有一块区域是完全相同的,如下图所示:

由于我们无法事先得知完全相同的是哪一块区域,因此我们必须采用存储多份table的方式。在本例的情况下,我们需要存储4份table,并将64位的simhash code等分成4份;对于每一个输入的code,我们通过精确匹配的方式,查找前16位相同的记录作为候选记录,如下图所示:

让我们来总结一下上述算法的实质: 假定我们最大判重海明距离为MAX_HD 1、将64位的二进制串等分成MAX_HD+1块 2、PUT操作:调整上述64位二进制,将任意一块作为前16位,总共有MAX_HD+1种组合,生成MAX_HD+1份table 3、GET操作:采用精确匹配的方式在MAX_HD+1份table中查找前16位,若找不到,说明不重复,做PUT操作;若找到了,则对剩余链做海明距离计算。 4、如果样本库中存有2^34 (差不多10亿)的哈希指纹,则每个table返回2^(34-16)=262144个候选结果,大大减少了海明距离的计算成本

为何要分桶? 两个字符串通过SimHash码和海明距离比较好判断是否相似,假设计算海明距离的时间为基本操作时间。如果有海量的数据,一一比较计算的次数为 1 + 2 + 3 + ......+ n ,时间复杂度为 O(n^2) 级别。这样的时间复杂度肯定是不能接受的。

构建索引

将SimHashCode添加到索引

查询与索引库中比较的最近的海明距离

其中 bit[n] = 2^n ,索引降低比较时算法时间复杂度的方法是 将SimHashCode 比特位分成8段

其实这里也是用上了抽屉原理的,各位看官自己思考下吧。

分词 -->另写一篇博客说明

需要说明的一点: 分词的时候需要去掉停用词等噪音词,分词是该算法特征抽取的关键一步。

164 评论

相关问答

  • 为什么论文查重字数现实的多

    排除作者存在抄袭这种学术不端的行为,论文重复率高一般与选题以及个人语言习惯有关。 先来谈谈查重的原理。目前的常用的、比较权威的查重网站主要有中国知网和万方数据库

    梦朦胧6620 7人参与回答 2023-12-08
  • java实现论文查重

    差不多,一般。一般学校给的。官方机构的查重率都是差不多的。这些里面收录的论文比较多,因此查重率相应的会比市面上的一些重复率高点。但是他具有权威性,具有官方性。你

    芒果布丁sweet 5人参与回答 2023-12-09
  • python实现论文查重

    代码查重? 这个真的是第一次听到,你的意思是论文里包含代码,需要查重吗,可以通过 论文查重 试一下,把代码粘贴进去就行

    会飞的猪lucky 3人参与回答 2023-12-09
  • 毕业论文查重如何实现

    对于首次接触毕业论文查重的同学来说,论文是如何查重的还是挺迷茫的,也不知道该如何下手。所以就会有很多毕业生都会问道到底毕业论文的查重是如何查重的?下面paper

    阿布kingnine 6人参与回答 2023-12-10
  • 论文查重现实内容太短

    不会。 1,题目:应能概括整个论文最重要的内容,具体、切题,不能太笼统,但要引人注目;题目力求简短,严格控制在25字以内。 2,学科专业:以国务院学位委员会批准

    SmartGirl~~ 7人参与回答 2023-12-10