Excel催化剂开源系列Za

Excel催化剂开源第25波-Excel调用百度AI,返回AI结

2019-01-12  本文已影响52人  1d0e4a6e400e

在专业程序猿世界中,调用现成的WebAPI接口,实现一些别人提供的能力,是很常见的事情,其实在VBA开发者中,也不乏有这样的应用,例如调用某个网页API,返回一个二维码,实现二维码生成功能(在.Net中,直接有现成的这些轮子,无需调用网页,直接本地离线即可生成)。

当然在AI时代,少不了各种AI接口的使用场景,普通开发者只需聚焦在自己的业务场景上,这些AI底层技术,只需类似水煤电一般去BAT这些大厂那里去消费即可,作一个AI接口的消费者,将AI的能力接入到自己的应用中,这也是一个不错的创新之举。

当然Excel催化剂专注于数据分析领域,当然少不了AI的能力,将文本世界中的非结构化数据进行结构化分析,是数据分析的一个很大的应用场景。

具体实现功能

在注流的程序语言中,其实各大厂商会给予封装好现在的SDK,类似我们日常调用Excel功能一样,只需简单传入几个参数,即可实现某些特定功能,无需从头开始,调用网页接口,再解释网页内容,获取自己想要的内容这么繁琐。

百度AI的SDK获取,可由百度官方AI后台获取。具体可自行进入后台获取,并进行相应的简单学习。

百度AI的SDK

其实SDK就是供给我们引用的dll文件而已。

SDK就是一个dll文件

Excel催化剂实现的AI是自然语言处理和翻译两大类(翻译好像不在这个AI当中,而分词的话,为了实现离线版和灵活自定义词库管理,用了结巴的库,而没有用百度的接口),现以其中的评论分析讲解一下。

首先是入口,用窗体和用户交互

        private void btnCommentAnalyze_Click(object sender, RibbonControlEventArgs e)
        {
            FormCommentAnalyze form = new FormCommentAnalyze();
            form.StartPosition = FormStartPosition.CenterScreen;
            form.Show();
        }
交互窗体

用户配置好之后,向百度AI发出请求,并返回结构内容到Excel工作表中。

private void btnQueryExistTable_Click(object sender, EventArgs e)
        {
            try
            {
                if (Common.IsContineToRunQuery())
                {
                    Excel.Range listObjectRange = Common.ExcelApp.InputBox(Prompt: "请选择需覆盖的现有智能表的任一单元格", Title: "智能表格区域确认", Type: 8) as Excel.Range;
                    if (listObjectRange != null)
                    {
                        if (listObjectRange.ListObject != null)
                        {
                            Common.ExcelApp.ScreenUpdating = false;
                            ListObject listObject = Globals.Factory.GetVstoObject(listObjectRange.ListObject);
                            OutputDataToWorksheet(listObject);
                            Excel.Worksheet sht = (Excel.Worksheet)listObject.Parent;
                            sht.Activate();
                            this.Close();
                        }
                        else
                        {
                            MessageBox.Show("当前选择的区域未包含智能表格,请重新选择或点击按钮【观点提取-新建智能表】把数据导出到新建工作表中");
                        }
                    }
                    else
                    {
                        MessageBox.Show("未检测到有选择选区的动作,请重新按提示进行操作");
                    }
                }
            }
            catch (Exception ex)
            {

                Common.OutMsgError(ex);
            }
            finally
            {
                Common.ExcelApp.ScreenUpdating = true;
            }
        }

核心代码段,向百度发出AI访问

 private DataTable GetDstTable(DataTable srcTable)
        {
            //创建目标表
            var dstTable = srcTable.Clone();

            dstTable.Columns.Add("原文关键词", typeof(string));
            dstTable.Columns.Add("观点属性词", typeof(string));
            dstTable.Columns.Add("观点描述词", typeof(string));
            dstTable.Columns.Add("情感极性", typeof(string));
            var client = new Baidu.Aip.Nlp.Nlp(API_KEY, SECRET_KEY);
            string type = this.cmbCommentType.Text.Split('-')[0];
            var options = new Dictionary<string, object> { { "type", type } };

            foreach (var srcRow in srcTable.AsEnumerable())
            {
                try
                {
                    // 带参数调用评论观点抽取
                    var result = client.CommentTag(srcRow.Field<string>(contentName), options);
                    Entity.CommentTagInfo commentTagInfo = JsonConvert.DeserializeObject<Entity.CommentTagInfo>(result.ToString());//.Replace("\"abstract\"", "\"_abstract\"")

                    if (commentTagInfo.items != null)
                    {
                        foreach (var item in commentTagInfo.items)
                        {

                            DataRow dstDataRow = dstTable.NewRow();
                            dstDataRow[pkColName] = srcRow.Field<string>(pkColName);
                            dstDataRow[contentName] = srcRow.Field<string>(contentName);
                            dstDataRow["原文关键词"] = Regex.Match(item.@abstract, "<span>(.+)</span>").Groups[1].Value;
                            dstDataRow["观点属性词"] = item.prop;
                            dstDataRow["观点描述词"] = item.adj;
                            dstDataRow["情感极性"] = item.sentiment == 0 ? "消极" : item.sentiment == 1 ? "中性" : "积极";
                            dstTable.Rows.Add(dstDataRow);
                        }
                    }
                }
                catch (Exception)
                {
                    //可能网络访问有出错
                }
            }
            return dstTable;
        }

真正有用的代码,就是百度AI封装好的SDK的几个属性赋值和方法调用返回结构即可。

 var client = new Baidu.Aip.Nlp.Nlp(API_KEY, SECRET_KEY);
            string type = this.cmbCommentType.Text.Split('-')[0];

                    // 带参数调用评论观点抽取
                    var result = client.CommentTag(srcRow.Field<string>(contentName), options);

结语

从此篇的Excel借助VSTO代码,能够顺利和百度AI进行交互可知,在.Net的世界中,不一定需要多么高级的开发技术,亦能实现一些复杂的技术应用,只需要这些复杂应用,它们愿意为.Net语言写一些SDK供调用即可。

技术交流QQ群

QQ群名:Excel催化剂开源讨论群, QQ群号:788145319


Excel催化剂开源讨论群二维码

关于Excel催化剂

Excel催化剂先是一微信公众号的名称,后来顺其名称,正式推出了Excel插件,插件将持续性地更新,更新的周期视本人的时间而定争取一周能够上线一个大功能模块。Excel催化剂插件承诺个人用户永久性免费使用!

Excel催化剂插件使用最新的布署技术,实现一次安装,日后所有更新自动更新完成,无需重复关注更新动态,手动下载安装包重新安装,只需一次安装即可随时保持最新版本!

Excel催化剂插件下载链接:https://pan.baidu.com/s/1Iz2_NZJ8v7C9eqhNjdnP3Q

联系作者 公众号

取名催化剂,因Excel本身的强大,并非所有人能够立马享受到,大部分人还是在被Excel软件所虐的阶段,就是头脑里很清晰想达到的效果,而且高手们也已经实现出来,就是自己怎么弄都弄不出来,或者更糟的是还不知道Excel能够做什么而停留在不断地重复、机械、手工地在做着数据,耗费着无数的青春年华岁月。所以催生了是否可以作为一种媒介,让广大的Excel用户们可以瞬间点燃Excel的爆点,无需苦苦地挣扎地没日没夜的技巧学习、高级复杂函数的烧脑,最终走向了从入门到放弃的道路。

最后Excel功能强大,其实还需树立一个观点,不是所有事情都要交给Excel去完成,也不是所有事情Excel都是十分胜任的,外面的世界仍然是一个广阔的世界,Excel只是其中一枚耀眼的明星,还有其他更多同样精彩强大的技术、工具等。*Excel催化剂也将借力这些其他技术,让Excel能够发挥更强大的爆发!

关于Excel催化剂作者

姓名:李伟坚,从事数据分析工作多年(BI方向),一名同样在路上的学习者。
服务过行业:零售特别是鞋服类的零售行业,电商(淘宝、天猫、京东、唯品会)

技术路线从一名普通用户,通过Excel软件的学习,从此走向数据世界,非科班IT专业人士。
历经重重难关,终于在数据的道路上达到技术平原期,学习众多的知识不再太吃力,同时也形成了自己的一套数据解决方案(数据采集、数据加工清洗、数据多维建模、数据报表展示等)。

擅长技术领域:Excel等Office家族软件、VBA&VSTO的二次开发、Sqlserver数据库技术、Sqlserver的商业智能BI技术、Powerbi技术、云服务器布署技术等等。

2018年开始职业生涯作了重大调整,从原来的正职工作,转为自由职业者,暂无固定收入,暂对前面道路不太明朗,苦重新回到正职工作,对Excel催化剂的运营和开发必定受到很大的影响(正职工作时间内不可能维护也不可能随便把工作时间内的成果公布于外,工作外的时间也十分有限,因已而立之年,家庭责任重大)。

和广大拥护者一同期盼:Excel催化剂一直能运行下去,我所惠及的群体们能够给予支持(多留言鼓励下、转发下朋友圈推荐、小额打赏下和最重点的可以和所在公司及同行推荐推荐,让我的技术可以在贵司发挥价值,实现双赢(初步设想可以数据顾问的方式或一些小型项目开发的方式合作)。

技术交流QQ群

QQ群名:Excel催化剂开源讨论群, QQ群号:788145319


Excel催化剂开源讨论群二维码

关于Excel催化剂

Excel催化剂先是一微信公众号的名称,后来顺其名称,正式推出了Excel插件,插件将持续性地更新,更新的周期视本人的时间而定争取一周能够上线一个大功能模块。Excel催化剂插件承诺个人用户永久性免费使用!

Excel催化剂插件使用最新的布署技术,实现一次安装,日后所有更新自动更新完成,无需重复关注更新动态,手动下载安装包重新安装,只需一次安装即可随时保持最新版本!

Excel催化剂插件下载链接:https://pan.baidu.com/s/1Iz2_NZJ8v7C9eqhNjdnP3Q

联系作者 公众号

取名催化剂,因Excel本身的强大,并非所有人能够立马享受到,大部分人还是在被Excel软件所虐的阶段,就是头脑里很清晰想达到的效果,而且高手们也已经实现出来,就是自己怎么弄都弄不出来,或者更糟的是还不知道Excel能够做什么而停留在不断地重复、机械、手工地在做着数据,耗费着无数的青春年华岁月。所以催生了是否可以作为一种媒介,让广大的Excel用户们可以瞬间点燃Excel的爆点,无需苦苦地挣扎地没日没夜的技巧学习、高级复杂函数的烧脑,最终走向了从入门到放弃的道路。

最后Excel功能强大,其实还需树立一个观点,不是所有事情都要交给Excel去完成,也不是所有事情Excel都是十分胜任的,外面的世界仍然是一个广阔的世界,Excel只是其中一枚耀眼的明星,还有其他更多同样精彩强大的技术、工具等。*Excel催化剂也将借力这些其他技术,让Excel能够发挥更强大的爆发!

关于Excel催化剂作者

姓名:李伟坚,从事数据分析工作多年(BI方向),一名同样在路上的学习者。
服务过行业:零售特别是鞋服类的零售行业,电商(淘宝、天猫、京东、唯品会)

技术路线从一名普通用户,通过Excel软件的学习,从此走向数据世界,非科班IT专业人士。
历经重重难关,终于在数据的道路上达到技术平原期,学习众多的知识不再太吃力,同时也形成了自己的一套数据解决方案(数据采集、数据加工清洗、数据多维建模、数据报表展示等)。

擅长技术领域:Excel等Office家族软件、VBA&VSTO的二次开发、Sqlserver数据库技术、Sqlserver的商业智能BI技术、Powerbi技术、云服务器布署技术等等。

2018年开始职业生涯作了重大调整,从原来的正职工作,转为自由职业者,暂无固定收入,暂对前面道路不太明朗,苦重新回到正职工作,对Excel催化剂的运营和开发必定受到很大的影响(正职工作时间内不可能维护也不可能随便把工作时间内的成果公布于外,工作外的时间也十分有限,因已而立之年,家庭责任重大)。

和广大拥护者一同期盼:Excel催化剂一直能运行下去,我所惠及的群体们能够给予支持(多留言鼓励下、转发下朋友圈推荐、小额打赏下和最重点的可以和所在公司及同行推荐推荐,让我的技术可以在贵司发挥价值,实现双赢(初步设想可以数据顾问的方式或一些小型项目开发的方式合作)。

上一篇下一篇

猜你喜欢

热点阅读