在专业程序猿世界中,调用现成的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{ { "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
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号