针对文章内容进行去重

  最近公司项目抓取新闻板块内容,但是多个网站之间,重复新闻的概率很高(因为大多数新闻网站的内容都是互相爬取的),所以我自己想了一个针对内容的去重方法。
  大概思路是: 取文章当中最长的3句话(当然这个值可以自己随意指定),默认只接收列表,然后进行hash,把hash值存储在redis中,因为相同的内容生成hash值是一样,其实去重原理就跟scrapy-redis很类似…
  具体实现代码如下:

import hashlib


def sim_hash(content, title=None):
    if not isinstance(content, list):
        raise ("ValueError: Please send a list object")
    if len(content) <= 3:
        if title is None:
            raise ("list is too short!")
        else:
            return hashlib.md5("".join(title).encode("utf-8")).hexdigest()
    new_dict = dict()
    for i in content:
        # 把内容的索引当作key 长度当作value
        new_dict[content.index(i)] = len(str(i))

    data = []
    # 将长度排序  倒序
    for i in sorted(new_dict.values(), reverse=True)[:3]:
        data.append([content[k] for k, j in new_dict.items() if i == j and content[k] not in data][0])
        # 这句话跟下面这段代码效果是一样的
        # for k, j in new_dict.items():
        #     # key是索引,j 是长度
        #     if i == j:
        #         if content[k] not in data:
        #             data.append(str(content[k]))
    return hashlib.md5("".join(data[:3]).encode("utf-8")).hexdigest()

  预留title的目的是,如果文章内容太少,就对title进行hash,大概思路就这样吧!反正就简单的完成了一下去重,大概可以完成90%左右的新闻去重。如果对你有帮助,就点个赞吧!

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值