您的位置:首页 > 其它

simhash算法实现

2017-03-15 15:59 85 查看

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。

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

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

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

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

总结simhash算法的步骤:

1、生成每个文件的simhash值

2、计算两个文件的Hamming distance

五、Simhash适用情境

simhash用于比较大文本,比如500字以上效果都还蛮好,距离小于3的基本都是相似,误判率也比较低。但是如果我们处理的是微博信息,最多也就140个字,使用simhash的效果并不那么理想。看如下图,在距离为3时是一个比较折中的点,在距离为10时效果已经很差了,不过我们测试短文本很多看起来相似的距离确实为10。如果使用距离为3,短文本大量重复信息不会被过滤,如果使用距离为10,长文本的错误率也非常高,如何解决?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据挖掘