且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

微信公众平台开发模式 微信 语音识别 公众平台 消息接口 语音识别

更新时间:2022-09-20 19:58:23

一、申请微信认证

微信公众平台开发模式 微信 语音识别 公众平台 消息接口 语音识别

微信认证后将自动开通高级接口,获得高级接口中所有接口权限,无需二次申请。
高级接口含有获取用户基本信息、客服接口、语音识别等高级接口权限。

 

二、获取语音识别结果

开通语音识别功能,且该功能设置处于开启状态的公众帐号,用户每次发送语音给公众号时,微信会在推送的语音消息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
        )

)
微信公众平台开发模式 微信 语音识别 公众平台 消息接口 语音识别
微信公众平台开发模式 微信 语音识别 公众平台 消息接口 语音识别
微信公众平台开发模式 微信 语音识别 公众平台 消息接口 语音识别
微信公众平台开发模式 微信 语音识别 公众平台 消息接口 语音识别
//词性对应关系
POSTAG_ID_N = 95 (line 322) 
名词
POSTAG_ID_NS_Z = 102 (line 357) 
地名(名处词专指:“中国”)
POSTAG_ID_D = 40 (line 207) 
副词
微信公众平台开发模式 微信 语音识别 公众平台 消息接口 语音识别
微信公众平台开发模式 微信 语音识别 公众平台 消息接口 语音识别

 

 

三、程序实现

判断是否开启语音识别

微信公众平台开发模式 微信 语音识别 公众平台 消息接口 语音识别
微信公众平台开发模式 微信 语音识别 公众平台 消息接口 语音识别
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;
        case "空气":
            $url = "http://api100.duapp.com/airquality/?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;
}
微信公众平台开发模式 微信 语音识别 公众平台 消息接口 语音识别
微信公众平台开发模式 微信 语音识别 公众平台 消息接口 语音识别

 

 

四、效果演示

微信公众平台开发模式 微信 语音识别 公众平台 消息接口 语音识别微信公众平台开发模式 微信 语音识别 公众平台 消息接口 语音识别微信公众平台开发模式 微信 语音识别 公众平台 消息接口 语音识别

本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/p/4906860.html,如需转载请自行联系原作者