Azure认知服务的实际应用-资讯采集推送

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认知服务中的文本分析服务,对标题进行关键词提取。然后根据关键词使用必应图片搜索服务,获取与之相关的图片地址。当然,但凡使用接口获取数据,都要根据自己的策略去对结果进行选择。这就解决了缩略图的问题。

    点击在线体验文本分析

    点击在线体验必应图像搜索

基本上,通过使用翻译、搜索、文本分析等服务,我可以将一篇国外的文章,转化成可通过微信推送的中文文章。

自动化流程

内容来源和处理大概讲了,剩下的就是通过程序实现,并且要自动化整个流程。我只需要寻找好的内容来源,添加采集处理的逻辑就可以。
我们要实现的是:

  1. 采集自动化:确定好来源,程序应该要自己运行,不断采集新的内容入库。
  2. 内容处理自动化:即翻译、缩略图获取等操作都不需要人为选择。
  3. 推送自动化:每天按时推送,不需要人为参与。

架构

  • 后台管理:集成基础管理功能和API接口。自搭环境,通过Azure devops自动化部署。
  • 资讯采集程序:使用 Azure Function 服务,定时采集处理,通过后台接口更新到数据库中。
  • 博客采集程序:使用 Azure Function 服务,定时采集处理,通过后台接口更新到数据库中。
  • 推送服务:使用 Azure Function 服务,每天定时调用后台接口,后台接收请求后,进行微信推送。

说起来,也没什么架构,就是一个网站程序,提供后台管理的功能,然后提供一些自用接口。而对于需要耗时、定时处理的任务,直接使用 Azure Function 即可,都是一键部署,方便省心。

总结

作为从小学就接触编程教育的人,技术对我来说就是兴趣,是展现个人创造力的一种途径。如果你会乐器,你就可以把自己的想法转化成音符演奏出来;你会写作或绘画,就可以在纸上展现出来你的想法;同样的,你会写程序,也可通过编写软件提供服务的形式来展现你的想法。
一切的出发点是满足实际的需求,这样才能真正发挥技术的价值。像微软、谷歌等公司,已经为开发者提供了各种开发工具和服务的支持,如何应用这些东西实现我们的需求,是真正的价值所在。

总结使用的技术:

  • ASP.Net Core:后台服务(网站及接口)
  • Azure DevOps:Git代码管理及pipeline自动部署
  • Azure Function:新闻采集处理等耗时、定时任务
  • Azure认知服务-文本翻译:翻译英语
  • Azure认知服务-文本分析:提取关键词
  • Azure认知服务-必应新闻搜索:获取新闻资讯
  • Azure认知服务-必应图像搜索:根据关键词获取图片
  • Google Translate API:谷歌翻译,效果更好。

最最重要的是,Azure的服务都是免费的,免费的,免费的!
Azure的注册用户可以免费使用以上全部服务,当然有一定的额度限制,但足够我目前使用的了。

Azure提供了各种功能,都可以免费体验,有实力不怕你验证,给你充分的学习和体验机会,这才是真的云!
配合优雅的C#,宇宙至强IDE,开发和部署简单轻松!

posted @ 2018-11-08 17:08 MSDev_NilTor 阅读(...) 评论(...) 编辑 收藏