基于SimHash的微博去重

基于SimHash的微博去重 - 吕新建 - 博客园

基于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的聚类方法。

你可能感兴趣的:(hash)