个人小程序智能对话查询工具完整代码分享--快递、身份证、词典、诗词等

        这篇文章的原文地址:http://blog.csdn.net/huangmeimao/article/details/76418753

转载请标明出处,谢谢。


我们经常在电影中看到机器和人对答如流,随着越来越多自然语言开放平台的出现,IT爱好者制作一个自己的APP或者小玩具等逐渐可以变为现实。 

自然语言对话即你的APP或者你制作的工具、机器人等能够对用户输入的语音或者文字做出准确的回应。

比如,在微信公众号中,经常要求用户通过输入1、2或者其他关键字来获取相应的服务,而对于句子却无法正确理解。比如,你输入“中秋活动”,这个几个字如果符合关键字的要求,那就会弹出相应的服务。但如果你输入的是“我想参加今年的中秋活动”,“参加中秋活动”等可能就无法进入活动网页了。

再比如,很多智能玩具,你只能跟它进行简单的对话,因为它也是只能抓取简单的关键字。

实际上,我们希望的是做到像许多语音助手一样,能够正确识别用户说的话,并做出对应回复,甚至希望能够理解上下文。

比如,用户问:今天上海的天气

应用回答:今天上海的天气为。。。。。

如果用户接着问: 那北京呢

你的应用能直接回答:今天北京的天气。。。。。

而不需要输入完整的句子“今天北京的天气”。

目前提供智能语音语义理解的API接口不少,使得自己制作语义语音小助手成为现实.

我选择了欧拉蜜人工智能开放平台来完成我的智能查询工具,包括查询快递、身份证、天气、诗歌、词典等。下面对功能和实现的过程做详细介绍:


1. 小程序功能介绍

1.1  小程序功能体验

    如果希望直接体验小程序,请直接扫描下面的二维码,这样更直观。



1.2  完整代码和语法文件下载


 代码下载:  智能查询代码下载

 欧拉蜜语法文件下载: 身份证、快递、词典语法文件下载

该博客中使用的语法可以在 语法分享和技巧中获得,文章结尾有语法分享key

1.3 小程序功能介绍


**   首页

点击首页中的任何选项和图片,都会进入相应的查询界面:


** 帮助页面
帮助页面提供各种功能的简单介绍和自然语言理解、技术交流的联系方式。



** 子页面
每个子页面里都提供例句和切换例句的功能,可以先点击例句试试看。每个子页面也都有输出结果显示,如果内容过多,需要触摸滚动显示。






**快递查询
快递查询会列出你要查询的快递公司、运单号和详细信息。



*词典查询
词库大约有50万数据,支持近义词、反义词、出处、含义单独查询。



**身份证查询
身份证前6位仅能查到行政位置信息,身份证号码可以查到除了姓名之外的信息。



**天气查询
天气支持今天前后五天的查询,也支持温度、风力、风向、指数的查询,口语化做的比较好,比如“明天冷不冷”,“明天上海会下雨吗”



**诗歌背诵 
诗歌支持诗歌名称查询,另外支持作者作品、诗词上下句、诗词出处等的查询。


                                                                                

**菜谱查询
菜谱支持菜名、菜系、菜类型查询。


   

**其余功能
剩余功能不再做详细介绍,可以查看小程序的帮助页面。


2.  写语法


     调用自然语言API接口之前,首先要写自己的语法,也就是你要支持哪些句子,当然你也可以直接使用OLAMI平台提供的内置语法,如果它  的语法符合你的要求的话。我以快递查询模块为例,介绍一下怎么写语法。

2.1 注册

首先在官网上注册,然后进入开发系统中“我的应用”。




2.2 确定自己的模块

   在正式写语法之前,首先得弄明白怎么写语法,写什么样的语法。

   第一步得选择你的应用程序支持的模块,比如是查天气、播放音乐、还是智能家控制。 
这个模块,其实可以称之为领域,因为你不可能把人类所有的语言都涵盖,你的APP一般都是针对某个或者某几个领域。我选择的是快递APP。所以我要支持的都是快递的说法。

   确定好模块之后,你要思考一下你的应用程序希望从用户的说法中得到哪些有用信息,以及用户会有哪些操作。比如快递查询,我需要有“运单号”,“快递公司名称”这两个有效信息,另外,我的应用程序仅提供快递的查询业务。

   我大致知道如果用户说“帮我查一下圆通快递12344”的时候,包含的有效信息很全,我可以直接输出物流信息给他。但如果用户仅仅说“我想查快递”,这时他仅表达了想查的意愿,我的应用程序应该提示用户输入快递单号。

   在OALMI的语法中,使用”Slot”来抓取有效信息,它就像一个函数的参数,它的内容由用户决定。比如运单号和快递公司名称,每个用户的内容都是不同的。 
   因此进入OLAMI的NLI系统之后,我首先“新增”一个模块,名字为”expressage”,然后进入这个模块开始写语法。


2.3 确定有效信息Slot

   就如上面所述,我需要“运单号”和“快递公司名称”这两个关键信息,因此,我定义了”expnumber”和”expname”这两个Slot.


我选择的类型均为’ext’,因为用户有可能会直接输入运单号,而运单号的格式无法确定,所以我选择ext来抓取。 
    快递公司的名称也是有限的,其实选择internal格式的就可以了,但是我选择后面通过ext赋值的方式给slot赋值,这样有利于语法维护。(很拗口是吧?可以暂时不管)

2.4 确认APP的功能

你的APP准备提供什么功能呢?查询?显示?打开?关闭?OLAMI语法需要用Modifier来描述操作信息。其实也就是一个标志来告诉应用程序这句话的意图是什么。 

比如“打开灯”,意图是打开,可以定义一个modifier “open”. 
“打开空调”的意图同样是打开,你只要用沿用已经定义的“open”即可。 
我的快递APP很简单,我就是提供查询功能,因此我定义一个global modifier ‘query’.

2.5. 了解Grammar,Rule,Template.

   其实刚开始只要知道Grammar和Rule就可以了。

   Rule即同义词汇的集合,词汇之间用’|’隔开,表示或的关系。

   Grammar即描述你要匹配的句子的语法。

   比如你希望匹配句子”查询快递”,可以将“查询”的同义词定义一个Rule, “快递”同义词汇定义一个Rule,我建议名称能使用中文就使用中文,这样看起来比较直观。下表中是可以匹配”查询快递”这句话的Grammar相关定义。


名称 类型 内容
查询_动词 Rule 查询|查一下|查查|查
快递_名词 Rule 快递|速递|物流|速运|快运
expname Ext Slot  
expnumber Ext Slot  
查快递1 Grammar <查询动词><快递名词><{@=query}>
查快递名称运单号1 Grammar <查询动词>< expname ><快递名词><{@=query_name_num}>

   你在写Grammar之前要确保Grammar中需要的Rule,Slot,Template已经定义好,并且想好自己的操作modifier. 
   每写好一个Grammar可以通过“例句测试”检查你要支持的句子是不是被当前的Grammar匹配,这个Grammar希望支持的句子都包含进去了,你再提交,然后发布。 
发布之后你才能通过API接口进行访问。


3. 访问自己的应用程序

3.1 你需要从语义理解API接口获取什么信息?


   https的返回,比如status就不再介绍了。

   说白了,开发平台解析你的语法之后,就是会告诉你这句话中的Slot和modifier,以及你的模块名称。 
   Slot根据你选择的类型不同,你获取的内容不同。比如ext类型的,你可以拿到slot的名称和slot的值。

   Datetime类型,即你的Slot是时间,你还可以拿到时间的毫秒数,起始时间等。

   Number类型,表示你只会抓取数字,会得到数字的计算值等。

   Modifier就是你自己定义的要支持的操作,只要按照他们规定的格式命名就好。

3.2 创建应用

   应用可以包含多个模块,具体包含哪些模块也是由你自己决定。OLAMI默认支持了“聊天”,“百科”,“查询日期”三个模块。如果你不需要可以去掉。内置模块的说明见

   点击下图中的配置模块添加自己写的模块和你希望添加的内置模块。比如对话系统模块中的nonsense就是聊天用的。你可以点配置模块右边的”测试”,输入要查询的句子就可以看到结果。


如果测试结果能正确返回,就表明API接口也可以获取同样的结果。

   比如我在输入框中“查快递”就可以看到JSON格式的输出,如下图显示:



3.3 查看应用的key

   这个key就是你访问API 接口的钥匙,在你的应用中点击”查看key”就可以看到了。



3.4 访问自然语言解析API接口

   API接口是https协议,相关说明,我就不再赘述了。

   我使用的是小程序访问,相关代码见下载包的index.js


至此,OLAMI API 接口的基本调用工作已经完成,至于你要添加语言识别,语法完善,模块添加等就看自己的需求了。

   最后说一下语法文件.osl下载之后如何导入。你创建好模块之后,直接选择上传OSL文件即可。



4.   小程序代码解析

4.1 代码结构






------图中app.json定义了所有的页面,以及标题栏和导航栏的样式,包括“首页”和“帮助”两个tabBar.
-------index表示“首页”page
-------express表示快递查询页面
-------identify表示身份证查询页面
-------dict表示词典查询页面
-------mine表示帮助页面
-------general表示其他页面,这些页面同意使用欧拉蜜官网提供的内置语法模块,所以使用统一页面代码。
但需要根据首页不同的选择传入对应的参数。

4.2  代码中用到的API接口

由于微信小程序仅支持https访问,因此接口必须支持https访问。

------所有自然语言的解析,包括输入框中输入的语句和例句,均调用欧拉蜜人工智能开放平台中的自然语言语义理解API接口,详细使用方法可以参考我的另外一些博客:

-----快递查询接口
       这里使用的是 快递鸟即时查询接口,免费使用,请自行到官网()申请APPkey和BusinessID, 请填入util的queryExpress.js中对应的位置:





------词典API
        极速数据的汉语词典,申请获取的APPkey填入dict.js的相应代码:

  

   
--------身份证查询API

    极速数据的 身份证查询API ,申请APPkey之后填入identify.js相应代码:



-------天气、诗歌、计算、菜谱、笑话等其他模块的输出数据均由欧拉蜜的自然语言理解接口提供结果,

相关代码未general.js 的 function parseCorpus(corpus,object) {}函数处理。


5.  调试 

   下载代码并在小程序开发工具中调试

 
        代码下载
       CSDN:  智能查询源码

       百度:  智能查询代码下载
        注意: 在没有申请相应的API接口之前,快递、词典、身份证查询不能正常使用,其他模块可以正常测试。       

         欧拉蜜语法文件下载:

        csdn:  身份证、快递、词典语法下载

        百度:身份证、快递、词典语法文件下载

     小程序开发技巧请参考:http://blog.csdn.net/huangmeimao/article/details/76588480

               
6. 技术交流

            
关于自然语言理解使用有不懂的地方可以扫描下面QQ群进行技术交流:

           

其他相关博客:


  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值