zoukankan      html  css  js  c++  java
  • simhash算法:海量千万级的数据去重

    simhash算法及原理参考:

    简单易懂讲解simhash算法 hash 哈希:https://blog.csdn.net/le_le_name/article/details/51615931
    
    simhash算法及原理简介:https://blog.csdn.net/lengye7/article/details/79789206
    
    使用SimHash进行海量文本去重:https://www.cnblogs.com/maybe2030/p/5203186.html#_label3
    

    python实现:

    python使用simhash实现文本相似性对比(全代码展示):https://blog.csdn.net/weixin_43750200/article/details/84789361
    
    simhash的py实现:https://blog.csdn.net/gzt940726/article/details/80460419
    

    python库simhash使用

    详情请查看:https://leons.im/posts/a-python-implementation-of-simhash-algorithm/
    
    
    (1) 查看simhash值
    
    >>> from simhash import Simhash
    >>> print '%x' % Simhash(u'I am very happy'.split()).value
    9f8fd7efdb1ded7f
    Simhash()接收一个token序列,或者叫特征序列。
    
     
    
    (2)计算两个simhash值距离
    
    >>> hash1 = Simhash(u'I am very happy'.split())
    >>> hash2 = Simhash(u'I am very sad'.split())
    >>> print hash1.distance(hash2)
    
    
    (3)建立索引
    
    simhash被用来去重。如果两两分别计算simhash值,数据量较大的情况下肯定hold不住。有专门的数据结构,参考:http://www.cnblogs.com/maybe2030/p/5203186.html#_label4
    
    复制代码
    from simhash import Simhash, SimhashIndex
    # 建立索引
    data = {
    u'1': u'How are you I Am fine . blar blar blar blar blar Thanks .'.lower().split(),
    u'2': u'How are you i am fine .'.lower().split(),
    u'3': u'This is simhash test .'.lower().split(),
    }
    objs = [(id, Simhash(sent)) for id, sent in data.items()]
    index = SimhashIndex(objs, k=10) # k是容忍度;k越大,检索出的相似文本就越多
    # 检索
    s1 = Simhash(u'How are you . blar blar blar blar blar Thanks'.lower().split())
    print index.get_near_dups(s1)
    # 增加新索引
    index.add(u'4', s1)
    复制代码
    
  • 相关阅读:
    Array.sort源码
    Linkedlist源码
    最大公约数 2.7
    腾讯笔试题
    腾讯2014校园招聘笔试题
    指针问题
    JavaScript 日历
    QT 初阶 第二章 创建对话框(查找对话框实例)
    QT 初阶 1.3 节 控件的几何排列
    “项目中的问题”
  • 原文地址:https://www.cnblogs.com/nyist-xsk/p/13453652.html
Copyright © 2011-2022 走看看