一、需求:对微博数据进行去重,数据量比较小,几十万条左右。

二、解决方案

  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的微博去重的更多相关文章

  1. [转载]基于Redis的Bloomfilter去重(附Python代码)

    前言: “去重”是日常工作中会经常用到的一项技能,在爬虫领域更是常用,并且规模一般都比较大.去重需要考虑两个点:去重的数据量.去重速度.为了保持较快的去重速度,一般选择在内存中进行去重. 数据量不大时 ...

  2. 基于Redis的Bloomfilter去重(转载)

    转载:http://blog.csdn.net/bone_ace/article/details/53107018 前言 “去重”是日常工作中会经常用到的一项技能,在爬虫领域更是常用,并且规模一般都比 ...

  3. 网页去重之Simhash算法

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

  4. Flink去重统计-基于自定义布隆过滤器

    一.背景说明 在Flink中对流数据进行去重计算是常有操作,如流量域对独立访客之类的统计,去重思路一般有三个: 基于Hashset来实现去重 数据存在内存,容量小,服务重启会丢失. 使用状态编程Val ...

  5. 腾讯微博OAuth2.0认证介绍

    腾讯微博开放平台,是基于腾讯微博系统,为广大开发者和用户提供的开放数据分享与传播平台. 广大开发者和用户登录平台后,就可以使用平台提供的开放API接口,创建应用从微博系统获取信息,或将新的信息传播到整 ...

  6. 基于社交网络的情绪化分析IV

    基于社交网络的情绪化分析IV By 白熊花田(http://blog.csdn.net/whiterbear) 转载需注明出处,谢谢. 前面进行了微博数据的抓取,简单的处理,类似度分析.后面两篇进行学 ...

  7. 超实用的JS数组去重

    一.简单的去重方法,利用数组indexOf方法 // 最简单数组去重法 /* * 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中 * IE8以下不支持数组的indexOf方法 * */ ...

  8. 基于Scrapy框架的增量式爬虫

    概述 概念:监测 核心技术:去重 基于 redis 的一个去重 适合使用增量式的网站: 基于深度爬取的 对爬取过的页面url进行一个记录(记录表) 基于非深度爬取的 记录表:爬取过的数据对应的数据指纹 ...

  9. 一款基于SVM算法的分布式法律助手

    一. 项目简介 与 使用说明 体验网站(适配手机端): http://www.zhuchangwu.com 项目基于 Spring Cloud .Vue 构建,平台针对需要维权的用户而设计,主要提供如 ...

随机推荐

  1. MySQL 5.7.9的多源复制

    什么是多源复制? 首先,我们需要清楚 multi-master 与multi-source 复制不是一样的. Multi-Master 复制通常是环形复制,你可以在任意主机上将数据复制给其他主机. M ...

  2. 将日志搬家到自己的站点 http://nowhereman.cn/

    个人站点同步地址 : http://nowhereman.cn/

  3. DataTable.Compute 性能慢的问题

    问题描述 工作中碰到一个dt.Compute("max(lineid)","")来取最大行号的情况,由于dt中数据大概有4000条,发现每次调用需要0.3秒的耗 ...

  4. mysql数据恢复

    [1] 当数据库被删除后的恢复方法   首先建立一个测试用的数据库.  mysql -u root -p123123   ← 用root登录到MySQL服务器  Enter password:  ←  ...

  5. Netty4.x中文教程系列(三) ChannelHandler

    Netty4.x中文教程系列(四)  ChannelHandler 上一篇文章详细解释了Hello World示例的代码.里面涉及了一些Netty框架的基础. 这篇文章用以解释ChannelHandl ...

  6. Problem 1014 xxx游戏 暴力+拓扑排序

    题目链接: 题目 Problem 1014 xxx游戏 Time Limit: 1000 mSec Memory Limit : 32768 KB 问题描述 小M最近很喜欢玩XXX游戏.这个游戏很简单 ...

  7. struts2 ,web.xml中配置为/*.action,运行报错Invalid <url-pattern> /*.action in filter mapp

    首先,修改成: <filter-mapping>  <filter-name>struts2</filter-name>  <url-pattern>/ ...

  8. 【BestCoder】【Round#29】

    T1 啊……a^b 与 c^d比较大小,我们可以两边取对数,转化成 log(a^b)=b*log(a) 和d*log(c) 这样就能直接算了……然后稍微搞一下精度什么的就A了=.= //BC #29 ...

  9. maven+springMVC+mybatis+junit详细搭建过程 ***

    springMVC+mybatis框架搭建 在上一遍博客中以及讲诉了新建maven项目的流程,现在紧跟上一遍文章,接着搭建spring项目 首先我们先要弄清搭建项目的一般流程,需要注意哪些方面,想要什 ...

  10. DOM对象和JQuery对象的区别

    DOM对象和JQuery对象的区别 jQuery对象和DOM对象使用说明,需要的朋友可以参考下.1.jQuery对象和DOM对象第一次学习jQuery,经常分辨不清哪些是jQuery对象,哪些是 DO ...