Azure认知服务如何应用于资讯采集推送的疑问?
摘要:Azure认知服务的实际应用-资讯采集推送 演示 实现的是通过使用各种azure服务,每天自动获取资讯、博客,定时推送到公众号的功能! 微信公众号搜索TechViews,或直接扫描二维码关注,每天推送科技资讯。 需求 我个人有浏览科技资讯的
Azure认知服务的实际应用-资讯采集推送
演示
实现的是通过使用各种azure服务,每天自动获取资讯、博客,定时推送到公众号的功能!
微信公众号搜索TechViews,或直接扫描二维码关注,每天推送科技资讯。
需求
我个人有浏览科技资讯的需求。长期以来,我通过一些新闻客户端、关注部分公众号推送、谷歌快讯、搜索引擎关键词搜索等方式去获取我想要的资讯,比较分散和费时。为了满足自己的需求,我需要能够天天获取到自己感兴趣的内容。
背景
从2016年年中接触.net core开始,陆续了解了微软相关的技术栈,其实包括Azure服务。近年来机器学习、人工智能等概念很火,但具体的应用,还不是十分广泛。微信Azure当中就提供了认知服务,其实包括语言、图片、音频、视频等相关的接口服务。自己经过对部分服务的了解和使用后,最终应用到现在的服务当中。
参考: Azure认知服务文档
技术实现
做一个每天自动推送资讯的公众号都包含哪些部分,我是如何去实现的呢?下面做简单说明。
内容来源
内容是最主要的,对于资讯来说,来是要从网络上采集,但网络上的内容众多,如何采集筛选并不容易。
资讯来源
对于资讯来说,我是直接使用的Azure提供的 Bing News Search 接口,可根据关键词返回结果。
可以通过以下链接直接体验搜索的效果。
当然,搜索过来的新闻,哪些要保存,哪些有问题,怎么去重筛选,这个不细说了,根据每个人的需求需要自定义。这样就解决了资讯来源问题。我会进一步对筛选过的网站,对详细页再进行采集处理(保留所有版权和来源信息),作为内容显示在网站TechViews上。
点击在线体验必应新闻搜索。
技术文章来源
另一方面,对于一些技术类文章,我并没有选择直接从国内的博客网站上去获取,因为这些相对来说比较容易,大家想获取都可以比较轻松的获取到。所以我会有意找国外的文章。尴尬并且有意思的是,国外虽然也有个别博客平台有专门的技术分类,但基本没什么有用的内容。感觉老外更多的还是通过官方文档、stackoverflow、github、gitter之类方式学习和解决问题的,不像国内用百度一搜索,就是一堆重复的文章,散落到csdn、cnblogs等博客平台。所以,目前我能找到的是通过一些官方的博客rss源获取内容。这样原始内容算是有了。只是国外的文章需要翻译才可阅读,所以我借助Azure提供的 Bing Translate Api 接口对英文进行翻译。不过由于微软提供的翻译接口是非神经网络训练的,有需要的要自己训练 ,而自己训练要大量一定格式的训练数据,并不容易,所以现在我已经更改成Goole云提供的翻译接口了,谷歌对大部分语言都支持神经网络翻译,结果要准确的多。
内容处理
基本处理
数据来源有了,但处理是最花时间和精力的,我们要应对各种数据源缺失、重复的情况。这一块不多讲,其实没什么好办法,遇到一个处理一个,比如建立自己的过滤列表等内容。
缩略图处理
我从rss获取的博客文章,是不带缩略图的。但如果要想作为图文消息推送到微信中,就需要有一个缩略图,这个时候需要打一个组合拳了。
首先,我会对英文文章的标题处理,使用Azure认知服务中的文本分析服务,对标题进行关键词提取。然后根据关键词使用必应图片搜索服务,获取与之相关的图片地址。当然,但凡使用接口获取数据,都要根据自己的策略去对结果进行选择。这就解决了缩略图的问题。
点击在线体验文本分析。
点击在线体验必应图像搜索。
基本上,通过使用翻译、搜索、文本分析等服务,我可以将一篇国外的文章,转化成可通过微信推送的中文文章。
自动化流程
内容来源和处理大概讲了,剩下的就是通过程序实现,并且要自动化整个流程。我只需要寻找好的内容来源,添加采集处理的逻辑就可以。
我们要实现的是:
采集自动化:确定好来源,程序应该要自己运行,不断采集新的内容入库。
内容处理自动化:即翻译、缩略图获取等操作都不需要人为选择。
推送自动化:每天按时推送,不需要人为参与。
架构
后台管理:集成基础管理功能和API接口。自搭环境,通过Azure devops自动化部署。
资讯采集程序:使用 Azure Function 服务,定时采集处理,通过后台接口更新到数据库中。
博客采集程序:使用 Azure Function 服务,定时采集处理,通过后台接口更新到数据库中。
推送服务:使用 Azure Function 服务,每天定时调用后台接口,后台接收请求后,进行微信推送。
说起来,也没什么架构,就是一个网站程序,提供后台管理的功能,然后提供一些自用接口。而对于需要耗时、定时处理的任务,直接使用 Azure Function 即可,都是一键部署,方便省心。
