微信公众平台开发(75) 语音识别
本文介绍如何使用微信公众平台高级接口中的语音识别功能,做出一个语音版的天气预报查询功能。根据这个模型,你可以扩展到所有的语音查询。
一、接收语音识别结果
开通语音识别功能以后,用户每次发送语音给公众号时,微信会在推送的语音消息XML数据包中,增加一个Recongnition字段。该字段为语音识别出的文本内容。
用户发送语音:
语音XML数据包如下
toUser
fromUser
1357290913
voice
media_id
Format
深圳天气怎么样
1234567890123456
参数说明:
参数
描述
ToUserName
接收方微信号
FromUserName
发送方帐号(一个OpenID)
CreateTime
消息创建时间 (整型)
MsgType
语音为voice
MediaID
语音消息媒体id,可以调用多媒体文件下载接口拉取该媒体
Format
语音格式:amr
Recognition
语音识别结果,UTF8编码
MsgID
消息id,64位整型
二、中文分词
中文分词 (Chinese Word Segmentation) 指的是将一个汉字序列切分成一个一个单独的词。分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。我们知道,在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字、句和段能通过明显的分界符来简单划界,唯独词没有一个形式上的分界符,虽然英文也同样存在短语的划分问题,不过在词这一层上,中文比之英文要复杂的多、困难的多。通过分词可以提取其中关键词语进行搜索。
打个比方:“深圳天气怎么样”,这句话中可分词为“深圳”,“天气”,“怎么样”三个词。其中“天气”为名词,“深圳”为地点名词。
以下是SAE上的分词代码示例:
<?php$str = "深圳天气怎么样";$seg = newSaeSegment();$ret = $seg->segment($str, 1);print_r($ret); //输出
if ($ret === false)var_dump($seg->errno(), $seg->errmsg());?>
结果如下:
Array(
[0] => Array(
[word]=>深圳
[word_tag]=> 102[index]=> 0)
[1] => Array(
[word]=>天气
[word_tag]=> 95[index]=> 1)
[2] => Array(
[word]=>怎么样
[word_tag]=> 40[index]=> 2)
)
得到,名词天气,和地名名词深圳,副词怎么样可以忽略。
三、程序实现
判断是否开启语音识别
private function receiveVoice($object)
{if (isset($object->Recognition) && !empty($object->Recognition)){$contentStr = "你发送的是语音,内容为:".$object->Recognition;
}else{$contentStr = "未开启语音识别功能或者识别内容为空";
}if (is_array($contentStr)){$resultStr = $this->transmitNews($object, $contentStr);
}else{$resultStr = $this->transmitText($object, $contentStr);
}return $resultStr;
}
效果如下:
调用SAE分词
var_dump(segment("明天长沙天气怎么样"));function segment($str)
{$seg = newSaeSegment();$ret = $seg->segment($str, 1);if ($ret === false){return;
}$category = "";$keyword = "";foreach ($ret as $key => $value) {if ($value["word_tag"] == 95){$category = $value["word"];
}if ($value["word_tag"] == 102){$keyword = $value["word"];
}
}if (!empty($category) && !empty($keyword)){return array('category'=>$category, 'keyword'=>$keyword);
}else{return;
}
}
返回结果如下:
array(2) {
["category"]=>string(6) "天气"["keyword"]=>string(6) "长沙"}
这样就获知晓了用户要查询的功能是天气,城市名称是长沙。
功能查询
根据获得的功能类别及关键字,我们可以查询相应的城市天气预报。
include("segment.php");$result = sinasegment($content);if (is_array($result)){switch ($result['category'])
{case "天气":
$url = "http://api100.duapp.com/weather/?appkey=trialuser&city=".urlencode($result['keyword']);$output = file_get_contents($url);$contentStr = json_decode($output, true);break;default:
$contentStr = "还不支持这一功能:".$result['category'];break;
}
}else{$contentStr = "不能理解你的内容:".$content;
}
四、效果演示
微信公众平台开发(75) 语音识别相关推荐
- 微信公众平台开发(82) 天气预报
在这篇教程中,我们将介绍如何在微信公众平台上开发天气预报功能.我们将使用中国天气网的气象数据接口来获取天气信息. 这篇教程将介绍以下内容: 获取中国天气网的气象数据 在微信公众平台中回复天气 一.中国 ...
- 微信公众平台开发----天气预报
在这篇教程中,我们将介绍如何在微信公众平台上开发天气预报功能.我们将使用中国天气网的气象数据接口来获取天气信息. 这篇教程将介绍以下内容: 获取中国天气网的气象数据 在微信公众平台中回复天气 一.中国 ...
- 微信公众平台开发中-SAE不支持XStream框架的解决方案
问题描述 最近几天(2014年8月20日之后),突然有不少网友反应,柳峰博客中的微信公众平台开发代码在SAE上运行会报错,或者是能正常部署,但向公众号发消息没反应.以前也有一些初学者质疑过我博客中的代 ...
- 《微信公众平台开发:从零基础到ThinkPHP5高性能框架实践》——3.3 微信开发者中心...
本节书摘来自华章计算机<微信公众平台开发:从零基础到ThinkPHP5高性能框架实践>一书中的第3章,第3.3节,作者 方倍工作室,更多章节内容可以访问云栖社区"华章计算机&qu ...
- 第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装...
微信服务器和第三方服务器之间究竟是通过什么方式进行对话的? 下面,我们先看下图: 其实我们可以简单的理解: (1)首先,用户向微信服务器发送消息: (2)微信服务器接收到用户的消息处理之后,通过开发者 ...
- 第一篇:微信公众平台开发实战Java版之了解微信公众平台基础知识以及资料准备...
相信很多人或多或少听说了微信公众平台的火热.但是开发还是有一点门槛,鉴于挺多朋友问我怎么开发,问多了,自己平时也进行以下总结. 所以下面给大家分享一下我的经验: 第一部分 介绍微信公众号的一些简单 ...
- 微信公众平台开发入门教程(图文)
关键字:微信公众平台开发入门 作者:贝创工作室 原文: http://www.cnblogs.com/imaker/p/5491433.html 背景知识:微信公众平台的开发需要有一定的PHP基础知识 ...
- 微信公众平台开发最佳实践(第2版)
<微信公众平台开发最佳实践 第2版> 微信公众平台开发经典之作全新改版,精心挑选最经典的商业项目开发,成千上万人次微信公众平台开发者从中受益 前言 出版说明 自从方倍工作室在博客园推出微信 ...
- 微信公众平台开发最佳实践
<微信公众平台开发最佳实践>共分10章,案例程序采用广泛流行的PHP.MySQL.XML.CSS.JavaScript.HTML5等程序语言及数据库实现.系统完整地介绍微信公众平台基础接口 ...
最新文章
- Anaconda使用
- 2013汇总计算 广联达gcl_36h就可成造价高手:广联达GTJ2018实操指导手册,实用
- 查看linux java home_查看Linux中自带的jdk,设置JAVA_HOME
- vue2.0读书笔记2-进阶
- 谈谈集群NAS在VDI存储中的应用
- Oracle Exadata迈入十年将助企业迈向数位转型之路
- Spring Boot + 微信小程序——登录凭证校验DEMO
- boost::log::string_literal用法的测试程序
- leetcode104. 二叉树的最大深度(层序遍历09)
- 7-20 表达式转换 (25 分)(代码详解+题目分析)
- Linux系统中的load average
- 数组正遍历,数组倒遍历
- 千博企业网站管理系统源码 支持电脑和手机版
- linux mv命令改名,Linux mv命令:移动文件或改名
- 万字图文 | 学会Java中的线程池,这一篇也许就够了!
- java main 静态代码_java中没有main方法怎么怎么执行静态块中的内容
- VBA_自定义对数函数
- 存储基础知识学习(12月)
- 计算机无法连接路由器上网,为什么路由器无法连接到网络,但是路由器无法连接到互联网!...
- 2022盘点工作室常用的API数据接口开发平台