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

为了易于人阅读,同一时候也方便机器解析和生成,意图表示协议採用 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. 顶尖大数据挖掘实战平台(TipDM-H8)产品白皮书

        顶尖大数据挖掘实战平台 (TipDM-H8)           产  品  说  明  书 广州泰迪智能科技有限公司 版权所有 地址: 广州市经济技术开发区科学城232号 网址: http: ...

  2. linux之SQL语句简明教程---IN

    在 SQL 中,在两个情况下会用到 IN 这个指令:这一页将介绍其中之一 -- 与 WHERE 有关的那一个情况.在这个用法下,我们事先已知道至少一个我们需要的值,而我们将这些知道的值都放入IN 这个 ...

  3. iOS断言

    来自:http://my.oschina.net/panyong/blog/205573 在看到xmpp项目中的一些代码时,看到如下,不懂该代码是啥意思, 如下: NSAssert(_xmppStre ...

  4. #include <list>

    clear();删除向量中的所有对象 erase(iterator it);删除it所指向的容器对象 insert(iterator it,const T&);向it所指的向量位置前插入一个对 ...

  5. 第一次用shell脚本来自动运行带参程序

    将目录下的part-开头的文件带入程序处理 #!bin/sh FILES=/data5/follow_relation_list_part_00000/part-* file="" ...

  6. WIN7 以下创建cocos2d-x3.0+lua项目

    用命令行生成和执行项目 无需打开VS 配置完环境 CMD执行 cocos new  helloWold   -p com.test -l lua -d E:\cocos2dx 来创建项目 cocos ...

  7. 【概率论】【POJ 3682】【King Arthur's Birthday Celebration】

    题意:进行翻硬币实验,若k次向上则结束,进行第n次实验需花费2*n-1的费用,询问期望结束次数及期望结束费用 设F[i]为第i次结束时的概率 F[i]=  c(i-1,k-1)*p^k*(1-p)^( ...

  8. ADO.Net两种访问数据库模式

    在连接模式下的数据库访问通常包括以下几个步骤: 1.通过数据库连接类(DbConnection)链接类指定到数据库服务器的数据库 2.通过数据库命令类(DbCommand)在数据库上执行SQL命令,可 ...

  9. 总结一下.net framework适合装在哪些系统中

    最近在客户这部署,环境是windows server2003 service pack2.因为vs2012开发环境是.net framework4.5,所以发布iis的时候,尝试在sever2003上 ...

  10. android开发Tost工具类管理(一)

    Tost工具类管理: package com.gzcivil.utils; import android.content.Context; import android.widget.Toast; / ...