simhash--ドキュメントの重み付けアルゴリズム
2763 ワード
最初に数学の美しさを読んだとき、本の中でこのアルゴリズムに言及しました.当時は関連する仕事をしたことがなく、具体的な印象はありませんでした.1年前に転職したときの面接でこのアルゴリズムに言及され、simhashがウェブページなど大量のデータの重複問題を解決できることを知り、効率的でした.
そして自分はたぶんこのアルゴリズムのpythonバージョンを実現して、試してみて、感じは悪くない、mark下
出力結果:
そして自分はたぶんこのアルゴリズムのpythonバージョンを実現して、試してみて、感じは悪くない、mark下
# coding=utf-8
import os
single_bits = {}
for x in xrange(32):
single_bits[x] = 1 << x
print single_bits
def simhash(str):
simhash_map = {}
for x in xrange(32):
simhash_map[x] = 0
for c in str:
h = hash(c)
for bit in single_bits:
if h & single_bits[bit] == 0:
simhash_map[bit] -= 1
else:
simhash_map[bit] += 1
result = 0
for x in xrange(32):
if simhash_map[x] > 0:
result |= single_bits[x]
return result
def haiming_dis(simhash1, simhash2):
dis = 0
sh = simhash1 ^ simhash2
for x in xrange(32):
if sh & (1 << x) > 0:
dis += 1
return dis
if __name__ == "__main__":
str = " , , , , 、 。 , , 。 , Google , , , 。"
str2 = " , , , , 。 , , 。 , baidu , , , 。"
sh1 = simhash(str)
sh2 = simhash(str2)
print sh1
print sh2
print haiming_dis(sh1, sh2)
出力結果:
3544471205
3540285093
2