simhash算法实现

simhash算法实现步骤

1、分词

1)、把需要判断的文本进行分词,形成这个文章的特征单词。

2)、最后形成去掉噪音词的单词序列,并为每个单词加上权重。

2、生成传统hash

通过传统hash算法,对文章的每个特征单词产生一个f位的签名b

3、降维过程

1)、加权

通过步骤2中生成的hash值,需要按照单词的权重形成加权数字串。

2)、合并

把步骤3中第一步各个单词算出来的序列值对应位累加,变成只有一个序列串。

3)、降维

把步骤2中第三步算出来的序列串变成0 1串,形成我们最终的simhash签名。


通过以上操作的转换,我们把库里的文本都转换为simhash代码,并转换为string类型存储,空间大大减少。接下来我们通过海明距离(Hamming distance)计算两个simhash到底相不相似。

海明距离简介

两个码字的对应比特取值不同的比特数称为这两个码字的海明距离。

举例如下: 10101  00110 从第一位开始依次有第一位、第四、第五位不同,则海明距离为3

计算海明距离的普遍算法为:

对于二进制字符串的ab,海明距离为a,b做异或操作(a XOR b)后,结果中1的个数。

异或: 只有在两个比较的位不同时其结果是,否则结果为 0 

到此,我们完成了simhash算法的所有步骤。

总结simhash算法的步骤:

1、生成每个文件的simhash

2、计算两个文件的Hamming distance

五、Simhash适用情境

simhash用于比较大文本,比如500字以上效果都还蛮好,距离小于3的基本都是相似,误判率也比较低。但是如果我们处理的是微博信息,最多也就140个字,使用simhash的效果并不那么理想。看如下图,在距离为3时是一个比较折中的点,在距离为10时效果已经很差了,不过我们测试短文本很多看起来相似的距离确实为10。如果使用距离为3,短文本大量重复信息不会被过滤,如果使用距离为10,长文本的错误率也非常高,如何解决?


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值