基于TF-IDF和simhash的内容查重方案

阅读561评论2

内容查重方案,网上一查都是生成hash,然后计算海明距离。几大步骤没区别,但如何生成hash,如何计算海明距离?

可不是hash md5就OK了,也不是两段内容或两篇文章计算海明距离就完事了,这样准确度低,召回率低。

此方案同样也是几大步骤:

  1. 对内容进行分词;

  2. 特征词加权;

  3. 降维生成hash值;

  4. 比较海明距离。

但,不同之处是,使用内容分词生成hash值,改进加权算法

一、内容分词

使用分词系统对内容分词,并标注词性,此处使用PHPAnalysis分词,其他编程语言就不推荐分词了,根据自己的喜好使用吧。

不管使用什么分词,要确保有词性的标注。

二、加权

一般分词后会根据词频计算权重,这样会造成无意义的词权重很高(比如:的、了等),计算结果将不准确。

这一步对第一步的分词进行过滤,对于非名词、动词、形容词的其他词赋予低权重。

参考词性权重设置:

  • 名词(n):3

  • 动词(v):2

  • 形容词(a):1

其他词性权重为0。

如果单独的对词性的权重进行加减,会使得部分词权重过于高,而加重结果的不准确性。

单纯的使用TF-IDF算法不能满足我们对词性权重的要求,所以,基于TF-IDF算法,我们延伸出另外一套算法:

IF-IDF改进算法

QianJianTec1681364658151.jpg

QianJianTec1681365148393.jpg

对于出现多次的特征词,对其附加权重,出现次数大于2的,附加权重1,否则不进行附加权重。

1681365891426059.jpg

综合上述,特征词的权重计算公式为:

QianJianTec1681366158729.jpg

三、降维生成hash

对每一个特征词使用同一种hash函数计算出二进制的指纹值hash,长度为64。

用第二步计算的特征词权重,对每一个特征词的hash值的每一位都进行处理,若某一位的hash值为1,则令此为的hash值为 weight,若为0,则令此为的hash值为 -weight。

将所有的特征词加权数字相加(64位一一对应相加),这里我们将它命名为:simhash指纹。

再降维形成最终的simhash签名(S)。对simhash指纹的每一位进行降维处理,若第i为的值大于0,则Si设为1,若第i为的值小于等于0,则Si设为0,从而得到二进制的simhash签名值。

四、计算海明距离

计算海明距离就不多说了,两个simhash签名值安位异或就得到海明距离了。

五、效果体验

已放工具箱,请移步:文本对比/判断查重

2 位网友评论:

上海网站建设 10月前(2023-07-01 07:50:00)

感谢分享

访客 12月前(2023-05-05 12:28:21)

学习了,写的很棒

欢迎来评论

暂不支持评论