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

好久没有认真写博客了,乘最近有空,因而想写写项目总结,只分享思路,没有具体代码,由于代码实在又长又臭,不少都是互相配合,单独分享某些代码彻底没啥用的,因此分享一下思路,但愿对有相似需求的同窗能有所启发就好了。网站

 

项目背景与需求:设计

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

 

沟通解决方案:开发

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

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

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

2,经过分析研究,发现用户上传的大部分的文档,经过分析文档的前300字左右的重复度大体就能够认定是否重复,计算出重复率了。基础

 经过第一步分析最相关的文档集合,每一个文档的前300个字与目标文档的前300个字,分表创建字表,而后两个字表作类似度计算,用百分比显示类似百分比,便于审核时使用。搜索

 

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

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

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

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

2,为何不直接使用搜索相关度来计算重复率,再次经过创建字表,分析重复率,不是画蛇添足吗?

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

相关文章
相关标签/搜索