2019 年工作总结

Wu Jun 2020-01-22 23:11:38
21 其他

一、主要工作

2019 年新做的项目主要有“自媒体系统”、“汽车爬虫、文书网爬虫”、“图片去重”几块,另外还实现了“企业价值榜单”、“汽车 app 关注流”、“财经小程序消息系统”等功能,并且开发了“分布式统一id生成器”供文章新系统使用。

1 自媒体系统

自媒体系统,或者叫统一账号系统,就是将来自各个平台的账号关联在一起,能有效管理同一主体在不同平台开设的账号。

简单的实现就是以来自搜狐媒体平台(MP)的账号为主体,对来自搜狐视频、搜狐汽车 app 的账号进行精确匹配(名称相似度、头像相似度、人工核验),对来自外部第三方(今日头条、汽车之家)的账号进行按名称匹配,维护一个“自媒体表”,和“来源账号与自媒体关联表”。

2 爬虫

爬虫方面做了两项工作:一项是汽车方面,爬取竞品数据;一项是财经方面,爬取“中国文书网”数据。

2.1 汽车爬虫

汽车爬虫也分两块:一块是“单纯爬取”,爬取外部的汽车分类文章,用作跑“文章分类”的训练素材;另一块是“爬取关联”,将外部文章与搜狐汽车自有文章做关联,供“评论爬虫”查询使用。

1)文章爬取

主要爬取了“汽车之家”和“今日头条”的文章。

对“汽车之家”采取的方案:先抓取了“汽车之家”所有作者,并定时抓取新作者,存在自媒体库中。对所有“汽车之家”作者,初始化时抓取其发布的所有文章,之后每天定时抓取其新发布的文章。

对“今日头条”采取的方案:因为“今日头条”没有公开的作者池,而“今日头条”汽车类文章与“懂车帝”文章是相通的,所以抓取的是“懂车帝”中的最新文章列表接口,每日定时抓取,入库按来源 id 去重。

目前共抓取了外部文章 233 万余篇,每日新增外部文章 3000 余篇。抓取了外部作者 36 万余位,每日新增外部作者 200 余位。

2)作者关联

作者关联做的是将我们“自媒体系统”中的作者,与从“汽车之家”、“今日头条”抓取的作者信息做关联。

满足以下三个任意条件,则判断作者关联

  1. 名称完全相同
  2. 名称部分相同,且头像相似
  3. 名称部分相同,头像不相似,但最近发布的 20 篇文章中,有 10 篇以上文章标题相同

目前仅对 MP 中白名单账号与外部账号进行了关联,目前已经关联了 700 余位账号。

3)文章关联

“评论爬虫”需要查询一篇文章的“关联文章”,去爬取其他来源相同文章下面的评论。

“关联文章”是在“关联作者”之下的概念,两“关联作者”名下的文章若出现“标题相同”,即简单地视为文章关联。

在查询一篇文章的“关联文章”时,先根据本篇文章作者找到关联的作者,去关联作者主页抓取最新文章,再根据文章标题查找“关联文章”。

2.2 文书网爬虫

文书网爬虫是指从“中国裁判文书网”,每日抓取最新公布的文书存入本地数据库,之后根据搜狐财经方面给的一系列关键字,在本地文书库中搜索相应的文书,有搜索结果就触发邮件通知。

3 图片去重

开发“图片去重”的目的是为了辅助“文章去重”,在文章字数过少,不能根据文章内容去重的时候,通过比较文章中图片的相似度,来判断文章是否重复。

“图片去重”系统:调研 “图片相似度”算法,设计图片去重流程,建立文章、图片关系。

3.1 算法调研

调研后,对“图片相似度”算法,分别选取了基于图片像素哈希感知的 PHash 算法作为初筛算法,基于空间特征点匹配的 SURF 算法作为细筛算法,组合判定图片相似度。

3.2 图片库建立

PHash 算法可以提前算好 PHash 值, 对库里已有的文章,提取文章中的图片,计算图片 PHash 值,建立图片库(Redis、MySQL),新文章的图片可以快速判断是否重复。

SURF 算法的特征点存储不经济,必须实时计算,对于 PHash 算法判断重复的图片,使用 SURF 算法再计算一次,结果作为判断图片是否重复的最终结论。

3.3 图片去重

要判断一篇“新文章”是否与库里的重复

  1. 首先使用“新文章”中的所有图片,各自去图片库中查找“相似图片”
  2. 再根据“相似图片”查找其所属的文章——“疑似文章”,并根据“疑似文章”对“相似图片”做归集
  3. 若“疑似文章”中存在超过阈值数量或阈值比例的图片与“新文章”相似,则判定“疑似文章”是新文章的“相似文章”
  4. 最后根据业务逻辑处理“新文章”或“相似文章”

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 算法的特征点取值原理只了解了大概,没有深入理解