新闻去重算法的设计和实现

来源:互联网 发布:windows.old 1 删不掉 编辑:程序博客网 时间:2024/06/07 00:58

    之前有介绍过大规模去重算法的设计,可惜没有办法付诸实现,主要是因为没有相应的应用场景,还是停留在纸上谈兵的阶段!这里简单的介绍下新闻去重算法的实现,客户端在基于yahoo shingle算法的基础上进行了封装,便于采用服务的方式来进行调用,这样比较容易进行复用和提高扩展性,利用thrift来进行跨语言的通信,客户端采用Java实现,原有的设计是服务端既提供计算的接口,即根据文本计算它的shingles,又可以在后端提供去重的服务,即根据文档内容查看这个文档和哪些文档内容重复。客户端可以只调用计算shingle的接口在客户端做去重的服务,thrift的接口定义如下:


    在原有代码的基础上,增加了两个函数,分别用来以字符串和长整形数组来返回文档的shingles,代码如下:


    传入的参数是可以调整的,而且会影响算法的准确率和召回率,代码中的参数是个较优的值,具体可以根据具体的场景来选择调整。

客户端调用的代码如下所示:

    以上是去重的主要代码,应该都可以直接运行的,代码放在news-duplicated上面,通过将文章计算成n个shingles, 如果有一个shingle重复,这篇文章与其它文章重复的概率就非常大了,所以利用以上代码还是很方便的搭建一个去重系统的,前文提到该算法计算速度比较低,但是可以在计算上提高并发效率,剩下的就是查询的问题了,这个应该不是瓶颈,还有一个问题就是,太短的正文不适合采用这种算法,可以考虑用md5来计算hash。

0 0
原创粉丝点击