zoukankan      html  css  js  c++  java
  • 微信公众平台开发模式 微信 语音识别 公众平台 消息接口 语音识别

    一、申请微信认证

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

    二、获取语音识别结果

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

     

    四、效果演示

  • 相关阅读:
    Django-下载文件设置响应头和兼容中文
    django-strftime日期格式化问题
    API集成管理平台YAPI的搭建和使用
    dubbo 的 spi 思想是什么?
    关于
    Python接口自动化之unittest单元测试
    Python接口自动化之requests请求封装
    Python接口自动化之Token详解及应用
    Python接口自动化之cookie、session应用
    Python接口自动化-requests模块之post请求
  • 原文地址:https://www.cnblogs.com/soundcode/p/4906860.html
Copyright © 2011-2022 走看看