微信公众平台开发(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;
}

 

四、效果演示

时间: 2024-09-23 22:28:19

微信公众平台开发(75) 语音识别的相关文章

微信公众平台开发之语音识别.Net代码解析_实用技巧

语音识别这个功能属于高级功能,必须微信实名认证后才能实现,认证费用300元/年,如果你作为开发者可以申请测试帐号,也是可以的.首先建立一个微信消息类,这个类比之前多了一个属性. class wxmessage { public string FromUserName { get; set; } public string ToUserName { get; set; } public string MsgType { get; set; } public string EventName { g

微信公众平台开发教程

本系列微信公众平台教程以PHP+MySQL为开发环境,介绍了微信公众平台开发模式下基础接口.自定义菜单.高级接口.WeiXin JS接口.微信支付等接口以及在此基础上的功能或应用开发的方法及技巧,案例极具实用价值,是学习微信公众平台开发实战的经典教材.   配套书籍 <微信公众平台开发最佳实践> 由方倍工作室编写,覆盖基础接口.自定义菜单.高级接口.微信支付.转发分享等五大接口,包含近30个案例及技巧,已成功帮助无数人进入微信开发领域. 购买地址        准备工作 微信公众平台的注册 介

微信公众平台开发(82) 天气预报

在这篇教程中,我们将介绍如何在微信公众平台上开发天气预报功能.我们将使用中国天气网的气象数据接口来获取天气信息. 这篇教程将介绍以下内容: 获取中国天气网的气象数据 在微信公众平台中回复天气   一.中国天气网 中国天气网提供了丰富的气象数据接口.下面我们介绍主要的几个: 国家根节点接口: http://flash.weather.com.cn/wmaps/xml/china.xml 该接口以XML格式列出所有的省(自治区.直辖市)的中文名称(quName)和拼音名称(pyName)及省会城市的

《微信公众平台开发最佳实践》——导读

前 言 出版说明 自从方倍工作室在博客园推出微信公众平台开发系列教程后,受到广大微信开发人员及爱好者的热情关注,相关文章的日访问量高达2万人次,而<微信公众平台开发入门教程>的阅读量超过50万,博客访问量总计超过500万,成为微信公众平台开发更新最快,传播最广.受众最多.资料最全的博客,很多博文被许多有影响力的网站转载,并被各大搜索引擎收录且排名靠前,这些是我们始料未及的. 然而更让人高兴的是,很多开发者通过学习我们的教程掌握了微信公众平台开发技术,并且通过微信开发赚到了钱.2013年10月1

java-寻求微信公众平台开发“公众号暂时无法提供服务,请稍后再试”的解决方案

问题描述 寻求微信公众平台开发"公众号暂时无法提供服务,请稍后再试"的解决方案 项目部署在SAE上,日志截取到了 140.207.54.75 [16/Apr/2015:21:53:17 +0800] JAVA_Notice: <![CDATA[gh_83f240695490]]><![CDATA[o-poDs-3jbAA_EXFwy9IcuwFFa1E]]><![CDATA[1429192397721]]><![CDATA[text]]>

微信公众平台开发最佳实践(第2版)

  <微信公众平台开发最佳实践 第2版>微信公众平台开发经典之作全新改版,精心挑选最经典的商业项目开发,成千上万人次微信公众平台开发者从中受益 方倍工作室已出版本书的第3版电子版,内容更多,价格更优惠,欢迎查看购买,地址:http://www.cnblogs.com/txw1958/p/buy-ebook.html       前言 出版说明 自从方倍工作室在博客园推出微信公众平台开发系列教程后,受到广大微信开发人员及爱好者的热情关注,相关文章的日访问量高达2万人次,而<微信公众平台开发

微信公众平台开发最佳实践

<微信公众平台开发最佳实践>共分10章,案例程序采用广泛流行的PHP.MySQL.XML.CSS.JavaScript.HTML5等程序语言及数据库实现.系统完整地介绍微信公众平台基础接口.自定义菜单.高级接口.微信支付.分享转发等所有相关技术,以生活类.娱乐类.企业类微信开发为切入点,讲解了30多个功能或应用案例. 前言 自从方倍工作室在博客园推出微信公众平台开发系列教程后,受到广大微信开发人员及爱好者的热情关注,相头文章的日访问量高达上万人次,而<微信公众平台开发入门教程>一门

微信公众平台开发(89) 高级群发接口

 在这篇微信公众平台高级接口开发教程中我们将介绍如何使用接口实现微信公众平台群发功能. 本文分为以下四个部分 准备群发内容 选择群发对象 执行群发 接收群发结果   一.准备群发内容 群发内容可以是文本.图片.语音.视频.图文.群发文本只需要文本内容其他内容需要获得相应的media_id. 1. 文本内容 文本内容就是一段文字比如"微信公众平台开发最佳实践" 2. 图片.语音.视频 要求如下 图片image: 128K支持JPG格式 语音voice256K播放长度不超过60s支持AMR

微信公众平台开发(66)人品计算

微信公众平台开发 微信公众平台开发模式 企业微信公众平台 人品计算作者:方倍工作室 地址:http://www.cnblogs.com/txw1958/p/weixin66-moral.html     人品计算器是一个测试游戏玩家人品的工具,最简单的是将各字符的ASCII或Unicode码相加,取其和再取余(通常mod 100)求出"人品值".   实现方法: 获得人品 function getMoralInfo($name) { $name = str_replace("