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

  • 相关阅读:
    百度网盘下载速度慢的问题解决
    问题汇总
    centos 遇到Name or service not known
    centos7 下 python3 和python2 同时存在但是无法使用pip3 的解决方案
    pycharm2020(最简单的方法)配置远程连接服务器
    pycharm2020.1.2激活
    centos安装成功bart标注工具
    keras遇到bert实战一(bert实现分类)
    使用Array.slice(0) 实现数组浅拷贝
    try/catch/finally 语句
  • 原文地址:https://www.cnblogs.com/lexus/p/3772381.html
Copyright © 2011-2022 走看看