基于SimHash的微博去重
一、需求:对微博数据进行去重,数据量比较小,几十万条左右。
二、解决方案
1、采用SimHash的指纹信息去重方法。
三、实现方案
1、对每一条微博使用tf-idf与特征词
2、使用每条微博的特征词,通过SimHash方法生成信息指纹。
3、对生成的信息指纹统计计算海明距离,距离小于等于1判为相似文档。(由于使用的是tf-idf关键词,所以此处的阈值比较小)
四、具体细节
1、SimHash的计算
a) 对一条微博的每个关键词通过Hash函数取hash值(此处假如hash函数用的32位的,一般情况下,hash值最少也要64位,位数越多,能够保留的信息相对较多一些,具体使用多少位的,视具体情况而论)
b) 生成一个包含32个元素,且元素均为0的数组(记做simhashValue)
c) 取上述Hash值中的一个Hash值转化成二进制,使之各位与simhashValue的各元素对应(对应到数据下标),如果此hash值的某一位为1/0,则在simHashValue的对应位上加/减 此hash值对应的tf-idf关键词的权重。
d)对此条微博生成的所有关键词的hash值进行c)步骤的操作
e)取simhashValue,把32个数组元素有序的映射成一个32位数。如果数组元素的值天于0,则映射为1,否则映射为0。从而得到了一个32位SimHash值。
2、计算simHash的海明距离
根据鸽巢原理(抽屉原理),对原始数据进行分组计算。此处计算参考了《编程之美》中“求二进制中1的个数”小节中给出的方法,有效提高计算效率。
五、小结
1、simhash是谷歌开源的一个算法,用来网页去重(支持大数据量)。用在短文本去重中,效果也不错。
2、minHash也是个不错的去重、聚类的好方法。理论上支持的数据量不如simhash。但数据量大的话,可以写成mapreduce的。另,mahout提供了minHash的聚类方法。
基于SimHash的微博去重的更多相关文章
- [转载]基于Redis的Bloomfilter去重(附Python代码)
前言: “去重”是日常工作中会经常用到的一项技能,在爬虫领域更是常用,并且规模一般都比较大.去重需要考虑两个点:去重的数据量.去重速度.为了保持较快的去重速度,一般选择在内存中进行去重. 数据量不大时 ...
- 基于Redis的Bloomfilter去重(转载)
转载:http://blog.csdn.net/bone_ace/article/details/53107018 前言 “去重”是日常工作中会经常用到的一项技能,在爬虫领域更是常用,并且规模一般都比 ...
- 网页去重之Simhash算法
Simhash算法是Google应用在网页去重中的一个常用算法,在开始讲解Simhash之前,先了解——什么是网页去重?为什么要进行网页去重?如何进行网页去重,其基本框架是什么? 网页去重,顾名思 ...
- Flink去重统计-基于自定义布隆过滤器
一.背景说明 在Flink中对流数据进行去重计算是常有操作,如流量域对独立访客之类的统计,去重思路一般有三个: 基于Hashset来实现去重 数据存在内存,容量小,服务重启会丢失. 使用状态编程Val ...
- 腾讯微博OAuth2.0认证介绍
腾讯微博开放平台,是基于腾讯微博系统,为广大开发者和用户提供的开放数据分享与传播平台. 广大开发者和用户登录平台后,就可以使用平台提供的开放API接口,创建应用从微博系统获取信息,或将新的信息传播到整 ...
- 基于社交网络的情绪化分析IV
基于社交网络的情绪化分析IV By 白熊花田(http://blog.csdn.net/whiterbear) 转载需注明出处,谢谢. 前面进行了微博数据的抓取,简单的处理,类似度分析.后面两篇进行学 ...
- 超实用的JS数组去重
一.简单的去重方法,利用数组indexOf方法 // 最简单数组去重法 /* * 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中 * IE8以下不支持数组的indexOf方法 * */ ...
- 基于Scrapy框架的增量式爬虫
概述 概念:监测 核心技术:去重 基于 redis 的一个去重 适合使用增量式的网站: 基于深度爬取的 对爬取过的页面url进行一个记录(记录表) 基于非深度爬取的 记录表:爬取过的数据对应的数据指纹 ...
- 一款基于SVM算法的分布式法律助手
一. 项目简介 与 使用说明 体验网站(适配手机端): http://www.zhuchangwu.com 项目基于 Spring Cloud .Vue 构建,平台针对需要维权的用户而设计,主要提供如 ...
随机推荐
- hdu 5738 2016 Multi-University Training Contest 2 Eureka 计数问题(组合数学+STL)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5738 题意:从n(n <= 1000)个点(有重点)中选出m(m > 1)个点(选出的点只 ...
- MYSQL创建多张表,相同表结构,不同表名
#!/bin/bashfor i in {0..63}domysql -u$1 -p$2 -h127.0.0.1 <<EOFuse yoon;create table ivc_pre_de ...
- class_create(),device_create()使用
开始写Linux设备驱动程序的时候,很多时候都是利用mknod命令手动创建设备节点(包括ldd3中不少例子也是这样),实际上现在Linux内核为我们提供了一组函数,可以用来在模块加载的时候自动在/de ...
- 【转】- 使用T4模板批量生成代码
前言 之前在 “使用T4模板生成代码 - 初探” 文章简单的使用了T4模板的生成功能,但对于一个模板生成多个实例文件,如何实现这个方式呢?无意发现一个解决方案 “MultipleOutputHelpe ...
- C#中的委托与事件 笔记
1.委托是类型安全的回调函数,是将方法作为方法参数.委托可以注册多个方法:委托就是一个 multicastdelegate类,可以通过=赋值,+=添加方法(对象方法与静态方法),内部使用Delega ...
- ORACLE 变量定义
DECLARE v_productid productinfo.productid%TYPE; v_productname ); v_productprice ,); v_quantity ); v_ ...
- Team Homework #3: The feedback of predecessors
此次对学长的采访主要在QQ上进行,感谢陈宇宁学长的热情配合. 采访学长的问题及学长的答复如下: 1. 平均每周花在这门课上的时间 (包括上课/作业/上机) -大约15-20小时吧(学长个人花费时间) ...
- spicy及remote-viewer登录方法
spicy登录: $sudo spicy remote-viewer登录: $ sudo /usr/local/bin/remote-viewer $ spice://192.168.70.158:4 ...
- eclipse 下找不到或无法加载主类的解决办法[转]
转自:http://blog.sina.com.cn/s/blog_7ebc46500101gtff.html 有时候 Eclipse 会发神经,好端端的 project 就这么编译不了了,连 Hel ...
- spoj 375 Query on a tree(树链剖分,线段树)
Query on a tree Time Limit: 851MS Memory Limit: 1572864KB 64bit IO Format: %lld & %llu Sub ...