simhash的算法简单的来说就是,从海量文本中快速搜索和已知simhash相差小于k位的simhash集合,这里每个文本都可以用一个simhash值来代表,一个simhash有64bit,相似的文本,64bit也相似,论文中k的经验值为3。该方法的缺点如优点一样明显,主要有两点,对于短文本,k值很敏感;另一个是由于算法是以空间换时间,系统内存吃不消。
代码如下:
#!/usr/bin/python# coding=utf-8class 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 = 0: fingerprint += 1 =0的和 #求海明距离 def hamming_distance(self, other): x = (self.hash ^ other.hash) & ((1 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])