没有合适的资源?快使用搜索试试~ 我知道了~
首页使用Python检测文章抄袭及去重算法原理解析
资源详情
资源评论
资源推荐

使用使用Python检测文章抄袭及去重算法原理解析检测文章抄袭及去重算法原理解析
去重(或叫网页去重)是根据文章(或网页)的文字内容来判断多个文章之间是否重复。这篇文章主要介绍了
用Python写了个检测文章抄袭,详谈去重算法原理,需要的朋友可以参考下
在互联网出现之前,“抄”很不方便,一是“源”少,而是发布渠道少;而在互联网出现之后,“抄”变得很简单,铺天盖地的“源”源
源不断,发布渠道也数不胜数,博客论坛甚至是自建网站,而爬虫还可以让“抄”完全自动化不费劲。这就导致了互联网上的“文
章”重复性很高。这里的“文章”只新闻、博客等文字占据绝大部分内容的网页。
中文新闻网站的“转载”(其实就是抄)现象非常严重,这种“转载”几乎是全文照抄,或改下标题,或是改下编辑姓名,或是文
字个别字修改。所以,对新闻网页的去重很有必要。
一、去重算法原理一、去重算法原理
文章去重(或叫网页去重)是根据文章(或网页)的文字内容来判断多个文章之间是否重复。这是爬虫爬取大量的文本行网页
(新闻网页、博客网页等)后要进行的非常重要的一项操作,也是搜索引擎非常关心的一个问题。搜索引擎中抓取的网页是海
量的,海量文本的去重算法也出现了很多,比如minihash, simhash等等。
在工程实践中,对simhash使用了很长一段时间,有些缺点,一是算法比较复杂、效率较差;二是准确率一般。
网上也流传着百度采用的一种方法,用文章最长句子的hash值作为文章的标识,hash相同的文章(网页)就认为其内容一
样,是重复的文章(网页)。
这个所谓的“百度算法”对工程很友好,但是实际中还是会有很多问题。中文网页的一大特点就是“天下文章一大抄”,各种博
文、新闻几乎一字不改或稍作修改就被网站发表了。这个特点,很适合这个“百度算法”。但是,实际中个别字的修改,会导致
被转载的最长的那句话不一样,从而其hash值也不一样了,最终结果是,准确率很高,召回率较低。
为了解决这个问题,我提出了nshash(top-n longest sentences hash)算法,即:取文章的最长n句话(实践下来,n=5效果不
错)分别做hash值,这n个hash值作为文章的指纹,就像是人的5个手指的指纹,每个指纹都可以唯一确认文章的唯一性。这
是对“百度算法”的延伸,准确率还是很高,但是召回率大大提高,原先一个指纹来确定,现在有n个指纹来招回了。
二、算法实现二、算法实现
该算法的原理简单,实现起来也不难。比较复杂一点的是对于一篇文章(网页)返回一个similar_id,只要该ID相同则文章相
似,通过groupby similar_id即可达到去重目的。
为了记录文章指纹和similar_id的关系,我们需要一个key-value数据库,本算法实现了内存和硬盘两种key-value数据库类来记
录这种关系:
HashDBLeveldb 类:基于leveldb实现, 可用于海量文本的去重;
HashDBMemory 类:基于Python的dict实现,可用于中等数量(只要Python的dict不报内存错误)的文本去重。
这两个类都具有get()和put()两个方法,如果你想用Redis或MySQL等其它数据库来实现HashDB,可以参照这两个类的实现进
行实现。
















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0