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

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

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

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

具体实现功能

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

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

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

百度AI的SDK

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

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

SDK就是一个dll文件

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

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

 private void btnCommentAnalyze_Click(object sender, RibbonControlEventArgs e)
 {
 FormCommentAnalyze form = new FormCommentAnalyze();
 form.StartPosition = FormStartPosition.CenterScreen;
 form.Show();
 }
Excel催化剂开源第25波-Excel调用百度AI,返回AI结果

交互窗体

用户配置好之后,向百度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 { { "type", type } };
 foreach (var srcRow in srcTable.AsEnumerable())
 {
 try
 {
 // 带参数调用评论观点抽取
 var result = client.CommentTag(srcRow.Field(contentName), options);
 Entity.CommentTagInfo commentTagInfo = JsonConvert.DeserializeObject(result.ToString());//.Replace(""abstract"", ""_abstract"")
 if (commentTagInfo.items != null)
 {
 foreach (var item in commentTagInfo.items)
 {
 DataRow dstDataRow = dstTable.NewRow();
 dstDataRow[pkColName] = srcRow.Field(pkColName);
 dstDataRow[contentName] = srcRow.Field(contentName);
 dstDataRow["原文关键词"] = Regex.Match(item.@abstract, "(.+)").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(contentName), options);

结语

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

展开阅读全文

页面更新:2024-03-16

标签:催化剂   离线   极性   窗体   属性   场景   接口   观点   参数   能力   代码   功能   智能   网页   数据   数码

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top