相似哈希simhash计算

simhash计算原理:

简单的将,一篇文档的simhash(64位)是这样计算的:定义一个长度为64的数组s[],初始化为0。针对文档中的每一个词,计算词的hash(64位),如果hash第i位为1,则将数组s[i]加1,否则s[i]减1。所有的词计算完毕后,将数组收缩:如果>0,置为1,否则置为0。得到64个0或1数字,组合成64位的数字,即为simhash。

注意:数组最好为64位,免得在位移操作时溢出(int溢出)导致不可预知的错误。


测试:

根据以上算法计算下面4篇文档的simhash(已手工分词):

doc1:simhash 算法 原理 和 代码 实现
doc2:simhash 算法 的 原理 ( 转 )
doc3:simhash 算法 的 原理
doc4:simhash 与 重复 信息 识别

计算结果为:

doc1的simhash:1416492156445077734

doc2的simhash:16134270046245056934

doc3的simhash:497754534934831522

doc4的simhash:12263517492683995739

他们之间的海明距离分别为:

 doc1doc2doc3doc4
doc1    
doc217   
doc31512  
doc4333432 

从表中可以看出doc2与doc3最相似,即"simhash 算法 的 原理 ( 转 )"与"simhash 算法 的 原理"最相似。

再添加一个doc5:simhash 的 原理 算法,由doc3调换词的顺序得来,发现doc3与doc5的simhash一样,二者最相似,与预期不一致。

这是由于考虑的特征太少所致,现在我们将词的顺序计算进来,简单的方法是将前后相邻的2个词拼接成一个组合词参与计算,这样就有了词的关联性。

重新计算的结果为:

doc1的simhash:15198202046059745510

doc2的simhash:14621043116870299878

doc3的simhash:9721126717995704674

doc4的simhash:10297596533213360614

doc5的simhash:12842524714518182744

他们之间的海明距离分别为:

 doc1doc2doc3doc4doc5
doc1     
doc221    
doc3249   
doc4221112  
doc528333034 

从表中看doc2与doc3最相似。

实际应用中可能要过滤掉常见词、标点符号、出现一次的词(很可能是噪音),添加其他特征。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值