一、主要工作
2019 年新做的项目主要有“自媒体系统”、“汽车爬虫、文书网爬虫”、“图片去重”几块,另外还实现了“企业价值榜单”、“汽车 app 关注流”、“财经小程序消息系统”等功能,并且开发了“分布式统一id生成器”供文章新系统使用。
1 自媒体系统
自媒体系统,或者叫统一账号系统,就是将来自各个平台的账号关联在一起,能有效管理同一主体在不同平台开设的账号。
简单的实现就是以来自搜狐媒体平台(MP)的账号为主体,对来自搜狐视频、搜狐汽车 app 的账号进行精确匹配(名称相似度、头像相似度、人工核验),对来自外部第三方(今日头条、汽车之家)的账号进行按名称匹配,维护一个“自媒体表”,和“来源账号与自媒体关联表”。
2 爬虫
爬虫方面做了两项工作:一项是汽车方面,爬取竞品数据;一项是财经方面,爬取“中国文书网”数据。
2.1 汽车爬虫
汽车爬虫也分两块:一块是“单纯爬取”,爬取外部的汽车分类文章,用作跑“文章分类”的训练素材;另一块是“爬取关联”,将外部文章与搜狐汽车自有文章做关联,供“评论爬虫”查询使用。
1)文章爬取
主要爬取了“汽车之家”和“今日头条”的文章。
对“汽车之家”采取的方案:先抓取了“汽车之家”所有作者,并定时抓取新作者,存在自媒体库中。对所有“汽车之家”作者,初始化时抓取其发布的所有文章,之后每天定时抓取其新发布的文章。
对“今日头条”采取的方案:因为“今日头条”没有公开的作者池,而“今日头条”汽车类文章与“懂车帝”文章是相通的,所以抓取的是“懂车帝”中的最新文章列表接口,每日定时抓取,入库按来源 id 去重。
目前共抓取了外部文章 233 万余篇,每日新增外部文章 3000 余篇。抓取了外部作者 36 万余位,每日新增外部作者 200 余位。
2)作者关联
作者关联做的是将我们“自媒体系统”中的作者,与从“汽车之家”、“今日头条”抓取的作者信息做关联。
满足以下三个任意条件,则判断作者关联
- 名称完全相同
- 名称部分相同,且头像相似
- 名称部分相同,头像不相似,但最近发布的 20 篇文章中,有 10 篇以上文章标题相同
目前仅对 MP 中白名单账号与外部账号进行了关联,目前已经关联了 700 余位账号。
3)文章关联
“评论爬虫”需要查询一篇文章的“关联文章”,去爬取其他来源相同文章下面的评论。
“关联文章”是在“关联作者”之下的概念,两“关联作者”名下的文章若出现“标题相同”,即简单地视为文章关联。
在查询一篇文章的“关联文章”时,先根据本篇文章作者找到关联的作者,去关联作者主页抓取最新文章,再根据文章标题查找“关联文章”。
2.2 文书网爬虫
文书网爬虫是指从“中国裁判文书网”,每日抓取最新公布的文书存入本地数据库,之后根据搜狐财经方面给的一系列关键字,在本地文书库中搜索相应的文书,有搜索结果就触发邮件通知。
3 图片去重
开发“图片去重”的目的是为了辅助“文章去重”,在文章字数过少,不能根据文章内容去重的时候,通过比较文章中图片的相似度,来判断文章是否重复。
“图片去重”系统:调研 “图片相似度”算法,设计图片去重流程,建立文章、图片关系。
3.1 算法调研
调研后,对“图片相似度”算法,分别选取了基于图片像素哈希感知的 PHash 算法作为初筛算法,基于空间特征点匹配的 SURF 算法作为细筛算法,组合判定图片相似度。
3.2 图片库建立
PHash 算法可以提前算好 PHash 值, 对库里已有的文章,提取文章中的图片,计算图片 PHash 值,建立图片库(Redis、MySQL),新文章的图片可以快速判断是否重复。
SURF 算法的特征点存储不经济,必须实时计算,对于 PHash 算法判断重复的图片,使用 SURF 算法再计算一次,结果作为判断图片是否重复的最终结论。
3.3 图片去重
要判断一篇“新文章”是否与库里的重复
- 首先使用“新文章”中的所有图片,各自去图片库中查找“相似图片”
- 再根据“相似图片”查找其所属的文章——“疑似文章”,并根据“疑似文章”对“相似图片”做归集
- 若“疑似文章”中存在超过阈值数量或阈值比例的图片与“新文章”相似,则判定“疑似文章”是新文章的“相似文章”
- 最后根据业务逻辑处理“新文章”或“相似文章”
4 其他
此外还有写其他工作
4.1 分布式统一id生成器
调研了业内 id 生成器的使用情况,最后选择基于百度 uid-generator,编写改进功能,并封装制作为 spring-boot-starter,供文章新系统使用
4.2 关注流、消息系统
实现了“搜狐汽车 app”的关注流,还有“财经小程序”的消息系统
4.3 视频分发
识别文章从 MP 接收到的视频类文章,提取视频类文章中的视频,直接将视频存入视频库,视频类文章不再入文章库。
4.4 搭建数据仓库
使用 Sqoop 从 MySQL 往 Hive 定时导入数据,搭建数据仓库的 ODS 层
4.5 企业价值榜单
抓取三个行业的上市公司信息,录入公司财务数据。根据财务数据按公式生成公司得分,根据得分形成榜单。调整公式,对差异过大的数值进行归一化处理。
二、工作总结
1 有价值的地方
1.1 新领域
在 19 年做的工作中,“图片相似度”和“数据仓库”都是我之前没有接触过的新领域,能了解新技术并投入使用,对我个人来说很有价值。
1.2 新分享
将百度 uid-generator 封装为 spring-boot-starter 之后,发布到了 Maven 仓库。第一次走通 Maven 发布流程,以及在 GitHub 上收到第一个 fork 的时候,也感觉很有价值。
2 不足的地方
2.1 数据仓库
对数据仓库建模的了解还不够深,知识没有系统梳理过。
对 Spark 的使用还不够熟练。
2.2 图片去重
对 SURF 算法的特征点取值原理只了解了大概,没有深入理解