微信公众平台开发(75) 语音识别
本文介绍如何使用微信公众平台高级接口中的语音识别功能,做出一个语音版的天气预报查询功能。根据这个模型,你可以扩展到所有的语音查询。
一、接收语音识别结果
开通语音识别功能以后,用户每次发送语音给公众号时,微信会在推送的语音消息XML数据包中,增加一个Recongnition字段。该字段为语音识别出的文本内容。
用户发送语音:
语音XML数据包如下
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1357290913</CreateTime> <MsgType><![CDATA[voice]]></MsgType> <MediaId><![CDATA[media_id]]></MediaId> <Format><![CDATA[Format]]></Format> <Recognition><![CDATA[深圳天气怎么样]]></Recognition> <MsgId>1234567890123456</MsgId> </xml>
参数说明:
参数 | 描述 |
ToUserName | 接收方微信号 |
FromUserName | 发送方帐号(一个OpenID) |
CreateTime | 消息创建时间 (整型) |
MsgType | 语音为voice |
MediaID | 语音消息媒体id,可以调用多媒体文件下载接口拉取该媒体 |
Format | 语音格式:amr |
Recognition | 语音识别结果,UTF8编码 |
MsgID | 消息id,64位整型 |
二、中文分词
中文分词 (Chinese Word Segmentation) 指的是将一个汉字序列切分成一个一个单独的词。分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。我们知道,在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字、句和段能通过明显的分界符来简单划界,唯独词没有一个形式上的分界符,虽然英文也同样存在短语的划分问题,不过在词这一层上,中文比之英文要复杂的多、困难的多。通过分词可以提取其中关键词语进行搜索。
打个比方:“深圳天气怎么样”,这句话中可分词为“深圳”,“天气”,“怎么样”三个词。其中“天气”为名词,“深圳”为地点名词。
以下是SAE上的分词代码示例:
<?php $str = "深圳天气怎么样"; $seg = new SaeSegment(); $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 = new SaeSegment(); $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; }
四、效果演示

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Eclipse+Java+OpenCV246人脸识别
---恢复内容开始--- 1.环境搭建:见上一篇博客 整个项目的结构图: 2.编写DetectFaceDemo.java,代码如下: [java] view plain copy "> packagecom.njupt.zhb.test; importorg.opencv.core.Core; importorg.opencv.core.Mat; importorg.opencv.core.MatOfRect; importorg.opencv.core.Point; importorg.opencv.core.Rect; importorg.opencv.core.Scalar; importorg.opencv.highgui.Highgui; importorg.opencv.objdetect.CascadeClassifier; // //Detectsfacesinanimage,drawsboxesaroundthem,andwritestheresults //to"faceDetection.png". // publicclassDetectFaceDemo{ ...
- 下一篇
科幻星系2013盘点三:移动社交的力量:2013年微信和它小伙伴们不得不说的事儿
科幻星系2013盘点三:移动社交的力量:2013年微信和它小伙伴们不得不说的事儿 以微信为代表,加上来往、易信、有你、米聊、啪啪、陌陌等移动即时通信应用构成的移动社交正在颠覆人们的生活。从去年起,这一趋势就已经开始显现,终于在今年达到了巅峰,形成了以微信独大,群雄逐鹿的局面。近日易观国际旗下易观智库发布《2013年中国移动互联网统计报告》显示,截止2013年12月,中国移动互联网网民达到6.52亿,呈现爆发趋势。而其中最火爆的就属移动IM,在中国移动网民中的覆盖比例高达81.8%,居榜首。 2013年,微信和它的小伙伴们迸发出许多爱恨纠葛的事件,让业界和围观的群众看的大呼过瘾。接下来,不妨就把它们单拉出来,看看它们在2013年究竟都在自身和对手之间有着怎样的革新和斗争。 微信:独大背后的强势与纠结 微信自发布以来,增长势头一直不减,“高速”成为其专有代名词。从0到1亿用户,微信用了14个月时间;用1亿到2亿用户,微信用了6个月时间;从2亿到3亿用户,微信用了4个月时间……随后,微信用户数量稳固地以每5个月增长1亿的速度迈进。就在今年10月份,微信用户数终于突破6亿。用户数量的不断...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2全家桶,快速入门学习开发网站教程
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装