使用SimHash进行海量文本去重

欢迎访问我的新博客: 传送门

一、参考资料

使用SimHash进行海量文本去重 by Poll的笔记

  1. simhash主要流程是:

    • 分词
    • 加权
    • 合并
    • 降维
  2. 去重的主要思想是:

    • 仿照hashmap的思想重构一个适合simhash的数据结构
    • 将64bit位hash分割成多段,例如4段16位,每段作为一个map_key,并使用链表作为map_value, 存储文本hash值

接下来针对一个实例需求来具体实现。

二、实例

实例场景

  • 当前有五千万文本数据存储在mongoDB中,里面有许多重复或者大面积相似的文本,现在需要进行去重。(大面积相似的文本也需要去掉)

  • 利用simhash解决这个问题刚好, 我主要使用了jieba分词和TF-IDF进行关键词提取并加权,然后利用dict和list自己构建一个符合simhash特点的hashmap.

  • jieba分词使用参考资料:
    Python的jieba分词及TF-IDF和TextRank 算法提取关键字

实例代码

  • simhash
# -*- coding: utf-8 -*-
from jieba import lcut, analyse

def count_diff_str(str1, str2):
    res = 0
    for i in range(min(len(str1),len(str2))):
        if str1[i] != str2[i]:
            res += 1
    return res

def count_diff_int(value1, value2):
    res = 0
    value = value1 ^ value2
    x = 1
    for i in range(64):
        if x & value != 0:
            res += 1
        x <<= 1
    return res

def simhash_(sentence):
    keywords = analyse.extract_tags(sentence, topK=30, withWeight=True)
    value_list = [0 for i in range(64)]
    for item 
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值