百度Android语音识别SDK语义理解与解析方法

摘要:
百度语义理解开放平台为互联网开发者提供自然语言文本解析服务,即可以根据文本的意图将其解析为相应的表示。为了便于人们阅读和机器分析,同时生成,意图表示协议用json语言描述,并用gb18030编码。在面向对象的语言中,key是对象的属性,value是对应的属性值,因此很容易理解value方法是object.key来获得属性值。属性值的类型可以是数字、字符串、数组和对象。

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

为了易于人阅读,同一时候也方便机器解析和生成,意图表示协议採用 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结构例如以下

  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数据是怎么的键值对,然后一层一层解析就能够,依据不同的语义,分发到不同的操作中。

  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.             }  
  25.             if (!TextUtils.isEmpty(type)) {  
  26.                 Log.i("TYPE", type);  
  27.                 new CommandProcessorTask().execute(mProcessors.getProcessor(type), command);  
  28.             }  
  29.         } catch (JSONException e) {  
  30.   
  31.             e.printStackTrace();  
  32.         }  
  33.     }  

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

免责声明:文章转载自《百度Android语音识别SDK语义理解与解析方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SpringMVC2Swing自定义JTable列的宽度下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android下OpenCV的环境搭建

目录(?)[-] 前言 系统环境 相关工具 Android ADT环境搭建 Android SDK环境变量的配置 Android NDK的安装与配置 OpenCV for Android 环境搭建 基于SDK的OpenCV开发 基于NDK的OpenCV开发 Android上层程序的编写 来自CODE的代码片 activity_mainxml...

文件签名<魔塔50层>android反编译破解

发一下牢骚和主题无关: 缘由:该游戏作者有点可爱,原来就是拿别人的游戏,还在游戏中参加积分的轨制,打到20层后,需要积分。看不惯,就把它破解了,打到20层后,直接跳过要积分进程。 本文不提供破解后的安装包! 进程: 首先下载目标apk,我是从这里下载的:http://www.wandoujia.com/apps/com.ss.magicTower 然后下载...

15个Android通用流行框架大全

1. 缓存 DiskLruCache  Java实现基于LRU的磁盘缓存 2.图片加载 Android Universal Image Loader  一个强大的加载,缓存,展示图片的库 Picasso  一个强大的图片下载与缓存的库 Fresco  一个用于管理图像和他们使用的内存的库 Glide   一个图片加载和缓存的库 3. 图片处理 Pi...

Android内核移植

google的android很多人都希望在gphone没有出来之前,把它移植到相关的硬件平台上去。网上看了不少文章,总的感觉是:在这一步走得最远的就是openmoko的一个大师级别的黑客Ben “Benno” Leslie,他曾经试图把目前google发布的android移植到openmoko的平台上去,并且做了10000多行代码的尝试。最终虽然由于ope...

Android SlidingMenu 滑出侧边栏

  最近有个项目需要使用侧边栏,而且希望是左右两侧都能够滑出侧边菜单,在网上查找实现方式时,发现大家用的最多的还是大神jfeinstein10的SlidingMenu库,地址https://github.com/jfeinstein10/SlidingMenu,通过将开源库导入eclipse,并把它作为library引入自己的工程,经过配置就可以实现Sli...

Android 路由框架ARouter最佳实践

一:什么是路由? 说简单点就是映射页面跳转关系的,当然它也包含跳转相关的一切功能。 二:为什么需要路由 Android系统已经给我们提供了api来做页面跳转,比如startActivity,为什么还需要路由框架呢?我们来简单分析下路由框架存在的意义: 在一些复杂的业务场景下(比如电商),灵活性比较强,很多功能都是运营人员动态配置的,比如下发一个活动页面...