百度语义理解开放平台面向互联网开发人员提供自然语言文本的解析服务,也就是能够依据文本的意图解析成对应的表示。

为了易于人阅读,同一时候也方便机器解析和生成,意图表示协议採用 json 语言进行描写叙述,採用 gb18030 编码。

json 语言的基本概念: 

1、属性名/属性值 

即键值对(key-value) 

2、数组 

在 json 中是“[]”括起来的内容,数据结构为 ["value1","value2",...],取值方式和全部语言中一样,使用索引获取,属性值的类型能够是数字、字符串、数组、对象。 

3、对象 

在 json 中表示为“{}”括起来的内容,数据结构为 {key1:value1,key2:value2,...}的键值对的结构。在面向对象的语言中,key 为对象的属性,value 为相应的属性值,所以非常easy理解,取值方法为对象.key 获取属性值,这个属性值的类型能够是数字、字符串、数组、对象几种。

自然语言文本(下面简称 query)。query 的意图表示由例如以下键值对和数组构成: 

1、raw_text:用户的原始输入文本 

2、parsed_text:经过分词,纠错,改写处理后的文本 

3、version:协议版本 

4、results:意图表示数组

从server中得到的json数据就是依照这种几个部分组成的,比如 “北京天气”相应的json结构例如以下

[plain] view
plain
copy

  1. query:北京明天天气
  2. {
  3. "raw_text":"北京明天天气",
  4. "parsed_text":"北京 明天 天气",
  5. "results":[
  6. {
  7. "domain":"weather",
  8. "intent":"query",
  9. "score":1,
  10. "object":{
  11. "date": "2013-09-25,2013-09-25",
  12. "region":"北京"
  13. }
  14. }
  15. ]
  16. }

在“百度语义理解开放平台 意图表示协议”文档中有具体的介绍,这篇文章主要介绍怎样通过代码对这种语义模型结果进行解析,并对解析的结果进行对应的操作。

以下的代码就是对server返回的json数据结构进行解析的过程,开发人员首先须要了解json数据是怎么的键值对,然后一层一层解析就能够,依据不同的语义,分发到不同的操作中。

[java] view
plain
copy

  1. private void handleResult(String result) {
  2. try {
  3. JSONObject r = new JSONObject(result);
  4. result = r.optString("json_res");
  5. r = new JSONObject(result);
  6. String query = r.optString("raw_text");
  7. if (!TextUtils.isEmpty(query)) {
  8. mAdapter.add(new ChatItem(query));
  9. mAdapter.notifyDataSetChanged();
  10. }
  11. JSONArray commands = r.optJSONArray("results");
  12. JSONObject command = null;
  13. String type = null;
  14. if (commands != null && commands.length() > 0) {
  15. command = commands.optJSONObject(0);
  16. type = command.optString("domain");
  17. } else {
  18. commands = r.optJSONArray("commandlist");
  19. if (commands != null && commands.length() > 0) {
  20. command = commands.optJSONObject(0);
  21. type = command.optString("commandtype");
  22. }
  23. }
  24. if (!TextUtils.isEmpty(type)) {
  25. Log.i("TYPE", type);
  26. new CommandProcessorTask().execute(mProcessors.getProcessor(type), command);
  27. }
  28. } catch (JSONException e) {
  29. e.printStackTrace();
  30. }
  31. }

结果是以String格式返回的,所以首先,将该字符串转为JSONObject,然后解析"json_res"相应的字符串,再生产JSONObject,之后解析"raw_text"相应的文本,然后一步步的把每一个键值相应的数据提取出来,当中“domain”相应的是语义的领域,能够作为区分语意的type类型分发到不同操作。

百度Android语音识别SDK语义理解与解析方法的更多相关文章

  1. 发现最新版百度Android 定位SDK v6.1.3 网络定位bug

    对于百度地图已经实在忍无可忍了,实验室两年以前的一个项目用到了百度地图,以前师兄毕业了,我来维护这个破项目,百度地图推出新版本出来后,老版本的api不能用了,不能做到向下兼容吗?换掉少量的api也就算 ...

  2. 用Kotlin开发android平台语音识别,语义理解应用(olamisdk)

    Kotlin是由JetBrains创建的基于JVM的编程语言,IntelliJ正是JetBrains的杰作,而android Studio是 基于IntelliJ修改而来的.Kotlin是一门包含很多 ...

  3. 百度Android定位SDK获取位置

    http://gis.sunxianlei.cn/2013/01/27/%E7%99%BE%E5%BA%A6android%E5%AE%9A%E4%BD%8Dsdk%E8%8E%B7%E5%8F%96 ...

  4. 百度Android在线语音识别SDK用法

    百度Android语音识别SDK分在线与离线两种,这篇文章介绍在线SDK的用法. 在线SDK是以JAR包和动态链接库形式公布和使用,能够从百度开放云平台站点中下载SDK及使用说明文档. title=d ...

  5. 提速1000倍,预测延迟少于1ms,百度飞桨发布基于ERNIE的语义理解开发套件

    提速1000倍,预测延迟少于1ms,百度飞桨发布基于ERNIE的语义理解开发套件 11月5日,在『WAVE Summit+』2019 深度学习开发者秋季峰会上,百度对外发布基于 ERNIE 的语义理解 ...

  6. 百度地图定位SDK 之构想

    百度地图定位 前提 从香港旅游回来,心中油然升起一股热血滂湃,激励自己发现市场需求,向创业奋进,朝着梦想前进. 简介 百度Android定位SDK支持Android1.5以及以上设备,提供: 定位功能 ...

  7. 我的Android进阶之旅------>Android百度地图定位SDK功能学习

    因为项目需求,需要使用百度地图的定位功能,因此去百度地图开发平台下载了百度地图的Android定位SDK最新版本的开发包和示例代码学习. Android 定位SDK地址:http://develope ...

  8. Android接入百度自动更新SDK

    一:前言 公司的app,上传到百度应用市场,然后说必须要接入百度的自动更新sdk才能上架,于是从百度官网上去下载jar包,下载的时候必须要带上数据统计,如果使用自动的jar包,还需要带上广告联盟,坑爹 ...

  9. 【百度地图-安卓SDK】从头开始写android程序

    [百度地图-安卓SDK]从头开始写android程序首先确保有这四个文件    安装jdk先安装android开发SDK(并不只是为eclipse服务的),即运行installer_r15-windo ...

随机推荐

  1. mongodb启动关闭;

    [正确关闭方法] 方法一 ps  -ef |grep mongodb 找到你要查找的进程号 kill -2  pid    杀掉 方法二 也可以进入到mongo数据库里面进行操作./mongouse ...

  2. hdu 5569 matrix(简单dp)

    Problem Description Given a matrix with n rows and m columns ( n+m ,) and you want to go to the numb ...

  3. wxpython 拖动界面时进入假死状态(未响应)解决方法

    场景:在一个事件中调用一个函数,但是这个函数执行的时间非常的长,此过程中拖动界面的时候会使得界面进入未响应状态,直到函数执行完才可以ok 解决方法: 在调用函数的时候使用多线程调用 import th ...

  4. Anton and Lines(思维)

    Anton and Lines time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...

  5. 使用fat jar和exe4j把java程序打包成exe执行文件---转载的

    java应用编写测试好之后都是jar包或class文件,客户拿到这个东西后一般是不会java开发者那样在命令窗口下面输入运行的.客户要求的就是直接点击应用名称运行.java在方面做得很不友好,开发人员 ...

  6. 【27前端】CSS Reset

    CSS reset就像是一种宁可错杀三千不可放过一个的做法. 一个最简单粗暴的css reset解决方案 *{ margin:0; padding:0; } 多余的话我就不再累赘,想要更多可以参考我的 ...

  7. FormData实现文件上传实例

    单提交,文件上传是一个常用又十分麻烦的功能,以前要上传文件通常都是借助插件或者flash来实现,噼里啪啦的加载一大堆东西.自从有了HTML5的FormData后,老板再也不用担心我的上传了. Form ...

  8. 使用VS2003 发送Email

    使用VS2003发送Email与之后VS2005版本及以上VS版本不一样,记录一下, 需要引用using System.Web.Mail; public void SendEmail() { try ...

  9. iOS开发那些事儿(三)JsonKit解析原理

    json_parse_it :开始解析,字符串指针从头到尾循环 jk_parse_next_token:获取下个字符的type和length 大部分分隔符长度都是固定1 jk_parse_string ...

  10. jquery精简选项卡

    <!DOCTYPE html><html><head lang="en">    <meta charset="UTF-8&qu ...