python实现simhash算法实例 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

   

    Simhash的算法简单的来说就是,从海量文本中快速搜索和已知simhash相差小于k位的simhash集合,这里每个文本都可以用一个simhash值来代表,一个simhash有64bit,相似的文本,64bit也相似,论文中k的经验值为3,

python实现simhash算法实例

。该方法的缺点如优点一样明显,主要有两点,对于短文本,k值很敏感;另一个是由于算法是以空间换时间,系统内存吃不消。

   

    复制代码代码如下:

    #!/usr/bin/python

    # coding=utf-8

    class simhash:

    #构造函数

    def __init__(self, tokens='', hashbits=128):

    self.hashbits = hashbits

    self.hash = self.simhash(tokens);

    #toString函数

    def __str__(self):

    return str(self.hash)

    #生成simhash值

    def simhash(self, tokens):

    v = [0] * self.hashbits

    for t in [self._string_hash(x) for x in tokens]: #t为token的普通hash值

    for i in range(self.hashbits):

    bitmask = 1 << i

    if t & bitmask :

    v[i] += 1 #查看当前bit位是否为1,是的话将该位+1

    else:

    v[i] -= 1 #否则的话,该位-1

    fingerprint = 0

    for i in range(self.hashbits):

    if v[i] >= 0:

    fingerprint += 1 << i

    return fingerprint #整个文档的fingerprint为最终各个位>=0的和

    #求海明距离

    def hamming_distance(self, other):

    x = (self.hash ^ other.hash) & ((1 << self.hashbits) - 1)

    tot = 0;

    while x :

    tot += 1

    x &= x - 1

    return tot

    #求相似度

    def similarity (self, other):

    a = float(self.hash)

    b = float(other.hash)

    if a > b : return b / a

    else: return a / b

    #针对source生成hash值  (一个可变长度版本的Python的内置散列)

    def _string_hash(self, source):

    if source == "":

    return 0

    else:

    x = ord(source[0]) << 7

    m = 1000003

    mask = 2 ** self.hashbits - 1

    for c in source:

    x = ((x * m) ^ ord(c)) & mask

    x ^= len(source)

    if x == -1:

    x = -2

    return x

    if __name__ == '__main__':

    s = 'This is a test string for testing'

    hash1 = simhash(s.split())

    s = 'This is a test string for testing also'

    hash2 = simhash(s.split())

    s = 'nai nai ge xiong cao'

    hash3 = simhash(s.split())

    print(hash1.hamming_distance(hash2) , "  " , hash1.similarity(hash2))

    print(hash1.hamming_distance(hash3) , "  " , hash1.similarity(hash3))

   

您可能感兴趣的文章:

使用python实现递归版汉诺塔示例(汉诺塔递归算法)

python使用rsa加密算法模块模拟 登录

python冒泡排序算法的实现代码

python实现的各种排序算法代码

python 实现堆排序算法代码

python 实现归并排序算法

python 算法 排序实现快速排序

Python 连连看连接算法

    QQ空间 搜狐微博 人人网 开心网 百度搜藏更多

    Tags:python simhash 算法

    复制链接收藏本文打印本文关闭本文返回首页

    上一篇:python实现DNS正向查询、反向查询的例子

    下一篇:windows下wxPython开发环境安装与配置方法

   

相关文章

2008-09-09Python字符转换

2014-04-0435个Python编程小技巧

2012-12-12python搭建简易服务器分析与实现

2014-01-01python删除文件示例分享

2012-10-10python笔记(2)

2011-11-11Python常见文件操作的函数示例代码

2014-01-01python发送arp欺骗攻击代码分析

2013-02-02python判断端口是否打开的实现代码

2014-02-02python实现博客文章爬虫示例

2014-04-04Python实现的Kmeans++算法实例

   

文章评论

   

最 近 更 新

   

解决python写的windows服务不能启动的问题

python实现simhash算法实例

python解析json实例方法

rhythmbox中文名乱码问题解决方法

Python 元类使用说明

2款Python内存检测工具介绍和使用方法

Python3.x和Python2.x的区别介绍

python实现异步回调机制代码分享

python正则表达式判断字符串是否是全部小

python二叉树的实现实例

   

热 点 排 行

   

Python入门教程 超详细1小时学会

python 中文乱码问题深入分析

比较详细Python正则表达式操作指

Python字符串的encode与decode研

Python open读写文件实现脚本

Python enumerate遍历数组示例应

Python 深入理解yield

Python+Django在windows下的开发

python 文件和路径操作函数小结

python 字符串split的用法分享

最新文章