基于TF-IDF和simhash的内容查重方案
内容查重方案,网上一查都是生成hash,然后计算海明距离。几大步骤没区别,但如何生成hash,如何计算海明距离?
可不是hash md5就OK了,也不是两段内容或两篇文章计算海明距离就完事了,这样准确度低,召回率低。
此方案同样也是几大步骤:
对内容进行分词;
特征词加权;
降维生成hash值;
比较海明距离。
但,不同之处是,使用内容分词生成hash值,改进加权算法。
一、内容分词
使用分词系统对内容分词,并标注词性,此处使用PHPAnalysis分词,其他编程语言就不推荐分词了,根据自己的喜好使用吧。
不管使用什么分词,要确保有词性的标注。
二、加权
一般分词后会根据词频计算权重,这样会造成无意义的词权重很高(比如:的、了等),计算结果将不准确。
这一步对第一步的分词进行过滤,对于非名词、动词、形容词的其他词赋予低权重。
参考词性权重设置:
名词(n):3
动词(v):2
形容词(a):1
其他词性权重为0。
如果单独的对词性的权重进行加减,会使得部分词权重过于高,而加重结果的不准确性。
单纯的使用TF-IDF算法不能满足我们对词性权重的要求,所以,基于TF-IDF算法,我们延伸出另外一套算法:
IF-IDF改进算法
对于出现多次的特征词,对其附加权重,出现次数大于2的,附加权重1,否则不进行附加权重。
综合上述,特征词的权重计算公式为:
三、降维生成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 位网友评论:
上海网站建设 1年前(2023-07-01 07:50:00)
感谢分享
访客 1年前(2023-05-05 12:28:21)
学习了,写的很棒