项目总结:如何实现网站内容查重,助力内容审核,提高网站运营效率?

很久没有认真写博客了,乘最近有空,于是想写写项目总结,只分享思路,没有具体代码,因为代码实在又长又臭,很多都是互相配合,单独分享某些代码完全没啥用的,所以分享一下思路,希望对有类似需求的同学能有所启发就行了。

 

项目背景与需求:

年前承接了一个小项目,客户是一个文库网站的运营方,数据量已有一百多万了,为了合规化经营,网站运营方需要每天由人工审核用户发布的文档,但在运营过程中发现用户会不断重复上传已存在的文档(一般标题会不同,无法通过只分析标题判断),这个比例还不少,不仅仅造成网站内容重复,还增加了不少的审核成本,于是想到能否通过技术的方式查重,把重复度过高的内容直接过滤掉,这样就节省了大量的人工审核成本。

 

沟通解决方案:

为了兼顾运行效率和开发成本,因为预算有限,经过沟通,初步确定了这样一个简化处理方案:

1,客户网站已有搭建基于全文检索技术的站内搜索系统,这个平台可以加以利用。

 于是查重第一步确定为:由于查重不可能每篇文章与上百万文章做比对,这样效率太低了,根本无法使用,考虑到现有基于Lucene的站内搜索,搜索效率比较高,通过站内搜索初步筛出重复度高的前N个文档,实现方式就是每一句话去搜索一次,然后得到一个匹配度由高到低的文档集合,为下一步做精确比对做准备。

2,通过分析研究,发现用户上传的大部分的文档,通过分析文档的前300字左右的重复度大致就可以认定是否重复,计算出重复率了。

 通过第一步分析最相关的文档集合,每个文档的前300个字与目标文档的前300个字,分表建立字表,然后两个字表做相似度计算,用百分比显示相似百分比,便于审核时使用。

 

实现过程遇到的问题与解决思路:

1,通过站内搜索结果筛选目标集合,如何计算重复率的高低?

解决思路:基于Lucene的站内搜索,搜索结果会返回一个相关度的值,这个值的高低可以简单地理解为与这个关键词(这里是一个句子)的匹配度(为什么说可以简单理解为,而不能完全等同,后面会解说),建立一个键值对<文档ID,相关度总和>,每一次搜索结果,把这个相关度值新增或累加到这个键值对,排序后,就能从一百万多文档里找出疑似重复率最高的10个文档了。

存在问题:这种方法有可能会出现,相关度高的未必是文字重复率高的,长句子出现概率不高,但特别是一些短的句子,偏差特别大,所以实现过程中,由当初设计的一句一句去搜索,改为固定的每次30个字去搜索,如果只分析300个字,那判断一篇文档,刚好需搜索10次。

2,为什么不直接使用搜索相关度来计算重复率,再次通过建立字表,分析重复率,不是多此一举吗?

简单的说,搜索的基础理论是基于tf/idf,简单地说,个别字词的重复会影响最终的相关度的计算,相关度高有一定比例的重复是必然的,但不代表一定是重复率最高的,反之亦然,所以通过字表来进一步分析重复率更加准确,当然我们最早是通过建立词表来分析,因为比较的样本不大(只有300个字),发现分词的准确率对分析结果影响比较大,反而使用字表更加简单,效率更高,准确率反而更加理想,所以说,没有实践就没有发言权,理论可以指导行动,但最后效果好坏是判断理论是否好用的唯一标准啊。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章