zoukankan      html  css  js  c++  java
  • 基于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的聚类方法。

  • 相关阅读:
    基督山伯爵---大仲马
    数据结构
    11. 标准库浏览 – Part II
    python 标准库
    Python 官方文件
    Python 函数
    学员名片管理系统
    如何进入多级菜单
    Python 文件操作
    Python 字符串 (isdigit, isalnum,isnumeric)转
  • 原文地址:https://www.cnblogs.com/nocml/p/3543778.html
Copyright © 2011-2022 走看看