来源:自学PHP网 时间:2015-04-14 12:58 作者: 阅读:次
[导读] 本文介绍如何使用微信公众平台高级接口中的语音识别功能,做出一个语音版的天气预报查询功能。根据这个模型,你可以扩展到所有的语音查询。一、接收语音识别结果开通语音识别...
|
本文介绍如何使用微信公众平台高级接口中的语音识别功能,做出一个语音版的天气预报查询功能。根据这个模型,你可以扩展到所有的语音查询。
一、接收语音识别结果 开通语音识别功能以后,用户每次发送语音给公众号时,微信会在推送的语音消息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> 参数说明:
二、中文分词 中文分词 (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;
}
四、效果演示
|
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com