首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

面试|海量文本~simhash

simhash算法是google发明的,专门用于海量文本的需求,所以在这里记录一下simhash工程化落地问题。 下面我说的都是工程化落地步骤,不仅仅是理论。...背景 互联网上,一篇文章被抄袭来抄袭,转载来转载。 被抄袭的文章一般不改,或者少量改动就发表了,所以判并不是等于的关系,而是相似判断,这个判别的算法就是simhash。...结巴分词支持加载IDF词典并且提供了一个默认的词典,它包含了大量的词组以及基于海量文本统计出来的IDF词频,基本可以拿来即用,除非你想自己挖掘这样一个字典。...海量simhash查询 抽屉原理 之前说过,判定2篇文章相似的规则,就是2个simhash的汉明距离<=3。...判 假设有一个新的simhash希望判,它的simhash值是: a=0000000000000000,b=000000001111110,c=1111111100000001,d=111111111111110

2.5K30
您找到你想要的搜索结果了吗?
是的
没有找到

海量数据之SimHash算法简介和应用

Google在2007年发表的论文《Detecting Near-Duplicates for Web Crawling 》中提到的一种指纹生成算法或者叫指纹提取算法,被Google广泛应用在亿级的网页的...,64位的签名,在海明距离为3的情况下,可认为两篇文档是相似的或者是重复的,当然这个值只是参考值,针对自己的应用可能又不同的测试取值 到这里相似度问题基本解决,但是按这个思路,在海量数据几百亿的数量下,...效率问题还是没有解决的,因为数据是不断添加进来的,不可能每来一条数据,都要和全库的数据做一次比较,按照这种思路,处理速度会越来越慢,线性增长。...针对海量数据效率,我们可以将64位指纹,切分为4份16位的数据块,根据抽屉原理在海明距离为3的情况,如果两个文档相似,那么它必有一个块的数据是相等的,如图: ? ?...如此,假设样本库,有2^34条数据(171亿数据),假设数据均匀分布,则每个16位(16个01数字随机组成的组合为2^16个)倒排返回的最大数量为 2^34/2^16=2^(34-16)=262144个候选结果

1.8K90

使用SimHash进行海量文本

SimHash算法思想   假设我们有海量的文本数据,我们需要根据文本内容将它们进行。...对于文本而言,目前有很多NLP相关的算法可以在很高精度上来解决,但是我们现在处理的是大数据维度上的文本,这就对算法的效率有着很高的要求。...SimHash算法是Google公司进行海量网页的高效算法,它通过将原始的文本映射为64位的二进制数字串,然后通过比较二进制数字串的差异进而来表示原始文本内容的差异。 回到顶部 3....SimHash流程实现   simhash是由 Charikar 在2002年提出来的,本文为了便于理解尽量不使用数学公式,分为这几步:   (注:具体的事例摘自Lanceyan的博客《海量数据相似度计算之...那剩下的工作就是两两计算我们得到的simhash签名的汉明距离了,这在理论上是完全没问题的,但是考虑到我们的数据海量的这一特点,我们是否应该考虑使用一些更具效率的存储呢?

2.1K20

巧用MapReduce+HDFS,海量数据的五大策略

举个简单的例子:在专门为电信运营商定制的呼叫详单应用程序中,我们就可以看到删除重复数据的影子。同样的,对于包含相同数据包的通信网络,我们可以使用这种技术来进行优化。...如果数量是零或哈希值在之前的重复表中不存在,HDFS会要求客户端上传文件并更新文件的逻辑路径。 HDFS将存储由用户上传的源文件,以及相应的链接文件,这些链接文件是自动生成的。...Streams到Hadoop的流程:通过控制流程,将Hadoop MapReduce模块作为数据流分析的一部分,对于Streams的操作需要对更新的数据进行检查并,并可以验证MapReduce模型的正确性...众所周知,在数据摄入的时候对数据进行重复是最有效的,因此在Infosphere Streams中对于某个特定时间段或者数量的记录会进行重复,或者识别出记录的增量部分。...接着,经过去数据将会发送给Hadoop BigInsights用于新模型的建立。 ? 2.

1.3K30

海量图片算法-局部分块Hash算法

向AI转型的程序员都关注了这个号 机器学习AI算法工程   公众号:datayx 本文主要调研了一下海量图片(>1000000张)的方法,在调研之前,先考虑一下自己能想到的方法的可行性。...文献发表:《基于pHash分块局部探测的海量图像查算法》https://kns.cnki.net/KCMS/detail/detail.aspx?...基本思想就是挑选一个图片pair,按照某种方法计算相似度(可以是图片特征之间的相似度,可以是由网络计算的相似度),相似度低于某个阈值,则认为它们是重复的,然后从数据库中移除其中一张图片即可。...这种方法虽然简单,但实际上并不可行,因为数据量太大,时间复杂度为O(n^2)。 方法2-感知Hash 生成图片的pHash,并计算pair之间pHash的Hamming distance。...图片的过程就是在每一个Hash表中的每一个位置做图片对的相似度计算,然后去除掉相似度较小的图片。

2.2K20

postgresal_postgresql数据方法

数据有很多方法,下面列出目前理解与使用的方法 第一种 通过group by分组,然后将分组后的数据写入临时表然后再写入另外的表,对于没有出现再group by后面的field可以用函数max,min...提取,效率较高 –适合情况:这种情况适合重复率非常高的情况,一般来说重复率超过5成则可以考虑用这个方法 –优点:对于重复率高的数据集的,十分推荐用这种方法 –缺点:uuid不能用max或min提取,...如果需要去数据集中包含uuid则十分尴尬 create temp table tmp_data1 as select [field1],[field2]…,max(field_special),min...,效率很低,可以尝试配合临时表(测试发现依旧很慢) –适合情况:由于该种方法效率很低,所以不推荐使用,如果数据量不大的情况下可以用这种方法,数据量只要上了100万就会很慢很慢 delete from [...,这种方法一次只能删除重复数据的一条,如果有些数据有几百次重复那就会累死,其实也可以使用函数做一个循环,但这样的效率就不高了 delete from [table] where id in (select

2.1K30

海量短文本场景下的算法

最朴素的做法 在大多数情况下,大量的重复文本一般不会是什么好事情,比如互相抄袭的新闻,群发的垃圾短信,铺天盖地的广告文案等,这些都会造成网络内容的同质化并加重数据库的存储负担,更糟糕的是降低了文本内容的质量...而最朴素的做法就是将所有文本进行两两比较,简单易理解,最符合人类的直觉,对于少量文本来说,实现起来也很方便,但是对于海量文本来说,这明显是行不通的,因为它的时间复杂度是,针对亿级别的文本时,时间消耗可能就要以年为单位...另外,我们讲到,实际上暗含了两个方面的内容,第一是用什么方式比较更为高效,第二是比较的时候标准是什么。...核心思想 降低时间复杂度的关键: > 尽力将潜在的相似文本聚合到一块,从而大大缩小需要比较的范围 simHash算法 海量文本算法里面,最为知名的就是simHash算法,是谷歌提出来的一套算法,并被应用到实际的网页中...一般来说,全局长度的选择跟去率和算法的时间复杂度相关,实际选择的时候,都是率和时间复杂度的折中考虑。全局长度选择的越小,文本的效果越好(率会增大),但相应的时间复杂度也越高。

18.4K41

数据方案

现在需要对数据按用户分析,但当中有大量的重复数据,仅用数据库的等值明显不可行。...至少在现阶段内存和CPU的执行效率在固定时间内是有限的,大量的数据的查处理不可能同时在内存中进行。就像外部排序算法和内部排序算法差别很大,遇到此类大量数据问题对算法进行设计是有必要的。...布隆过滤器 布隆过滤器是一种采用hash法进行查的工具。它将每一条数据进行n次独立的hash处理,每次处理得到一个整数,总共得到n个整数。...使用数据库建立关键字段(一个或者多个)建立索引进行 根据url地址进行: 使用场景:url地址对应的数据不会变的情况,url地址能够唯一判别一条数据的情况 思路:   url存在Redis中   ...往对应值的位置把结果设置为1   新来的一个url地址,一样通过加密算法生成多个值     如果对应位置的值全为1,说明这个url地址已经被抓取过了     否则没有被抓取过,就把对应的位置的值设置为1 根据数据本身进行

73610

数据算法(一)

在编写代码时,经常会遇到对一组数据过滤去除重复的数据,那么怎么来实现这样的一个功能函数呢?...例如:给定一个数组[1,2,3,1],去除重复的数据 我们放眼一看就知道1复了,但计算机没有这样的水平,它需要将该问题转化为严密的逻辑计算和数值计算,才能得到正确的结果。...在转化为计算机可处理的过程,就需要用到算法和数据结构的知识。我们知道hashtable数据结构,它的keys是不能存在重重的,那么我们就可以将数组转化hashtable来解决。...,那么怎么能去除重复的数据 如:给定 nums = [0,0,1,1,1,2,2,3,3,4] 去除重复的数据 对于该问题,我们依然可以按照上边的那种方式进行处理,但由于这个数组是有序的,也就是重复的数据都聚集在一起...,所以可以在循环中进行nums[i]和nums[i+1]的判断,不同时,将数据进行新的存储。

2.5K20

场景题:海量数据如何判

海量数据如何确定一个值是否存在?这是一道非常经典的面试场景题。 那怎么回答这个问题呢?接下来咱们就详细的聊一聊。 参考答案 判断一个值是否存在?...内存占用:哈希表需要根据数据规模来动态调整数组的大小,以保证存储效率。而布隆过滤器在预先设置位数组的大小后,不会随数据规模的增加而增长。因此布隆过滤器更适用于海量数据。...结论 哈希表和布隆过滤器都能实现判,但它们都会存在误判的情况,但布隆过滤器存储占用的空间更小,更适合海量数据的判。...然后,我们可以使用 put() 方法向布隆过滤器中插入数据,使用 mightContain() 方法来判断元素是否存在于布隆过滤器中。 小结 在海量数据如何确定一个值是否存在?...通常有两种解决方案:哈希表和布隆过滤器,而它们两都存在误判的情况,但布隆过滤器更适合海量数据的判断,因为它占用的数据空间更小。

17720

场景题:海量数据如何判

海量数据如何确定一个值是否存在?这是一道非常经典的面试场景题。那怎么回答这个问题呢?接下来咱们就详细的聊一聊。参考答案判断一个值是否存在?...内存占用:哈希表需要根据数据规模来动态调整数组的大小,以保证存储效率。而布隆过滤器在预先设置位数组的大小后,不会随数据规模的增加而增长。因此布隆过滤器更适用于海量数据。...结论哈希表和布隆过滤器都能实现判,但它们都会存在误判的情况,但布隆过滤器存储占用的空间更小,更适合海量数据的判。...然后,我们可以使用 put() 方法向布隆过滤器中插入数据,使用 mightContain() 方法来判断元素是否存在于布隆过滤器中。小结在海量数据如何确定一个值是否存在?...通常有两种解决方案:哈希表和布隆过滤器,而它们两都存在误判的情况,但布隆过滤器更适合海量数据的判断,因为它占用的数据空间更小。

21430

数据,笔试题系列

今天分享一道面试手写笔试题,主要考察数据问题 原题是这样的,给出一组数据,去掉id相同的数据并进行排序 const arr = [ {id: 0,pid: 1,order: 2,},...cur.push(prev) } return cur.sort((a, b) => a.id - b.id); }, []) } 方法三: 通过Set对应的...,我们利用对象key不重复,先判断对象中是否有key,向数组中添加数据,然后将当前的id作为对象的key,如果有就不向数组中添加数据 我们也可以结合reduce这个计算方法,结合findIndex判断是否有...id相同的 通过reduce与Set,Set过滤相同的id,然后进行计算循环,判断cur中是否有pid 利用Map对原有数据进行,将没有的值,以id作为key,将当前项变成值,然后调用Object.values...本文示例源码code example[1] 参考资料 [1]code example: https://github.com/maicFir/lessonNote/blob/master/面试题/02-数据

49410

使用数组实现数据

在上一篇数据文中,介绍了使用hashtable这种数据结构实现对一组数据操作,那么这种方式是否存在优化的空间?...先来看一道题,给定一组整数无序数组,获取重复的数据 如:[1,2,3,1] 在数据第一篇文章中,使用的hashtable, hashtable这种数据结构内部实现上也借用了数组,那么我们是否可以直接使用数组呢...,在使用数组时,需要注意以下几点: 数据为整数 数据的最大值小于整数n 数据的离散性不能过于分散,如果像1, 100 ,1000 这样的范围分散,那么使用数组进行空间复杂度会有些高 如果数据量很大的情况下...,那么怎么实现?...基于以上的数组算法思想,在下篇文章中,将介绍大数据算法。

63420
领券