python实现simhash算法实例
2014-04-25 00:00
806 查看
Simhash的算法简单的来说就是,从海量文本中快速搜索和已知simhash相差小于k位的simhash集合,这里每个文本都可以用一个simhash值来代表,一个simhash有64bit,相似的文本,64bit也相似,论文中k的经验值为3。该方法的缺点如优点一样明显,主要有两点,对于短文本,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实现simhash算法实例
- Python实现二分法算法实例
- [机器学习]kNN算法python实现(实例:数字识别)
- python实现的二叉树定义与遍历算法实例
- python 实现红包随机生成算法的简单实例
- python实现数独算法实例
- Python实现的选择排序算法原理与用法实例分析
- Python实现二分法算法实例
- python实现数独算法实例
- Back Propagation后向传播算法 Python实现
- 机器学习经典算法详解及Python实现--CART分类决策树、回归树和模型树
- Javascript 实现的数独解题算法网页实例
- 使用Python一步步实现PCA算法
- 算法基础之python实现深度优先搜索的数独问题
- python实现的简单窗口倒计时界面实例
- 机器学习之KNN算法python实现
- 词性标注的python实现-基于平均感知机算法
- 面试宝典_Python.常规算法.0003.用Python去实现一个扁平化的字典?
- KNN算法例子(java,scala,python 代码实现)
- ID3决策树的算法原理与python实现