本文介绍如何使用微信公众平台高级接口中的语音识别功能,做出一个语音版的天气预报查询功能。根据这个模型,你可以扩展到所有的语音查询。

一、接收语音识别结果

开通语音识别功能以后,用户每次发送语音给公众号时,微信会在推送的语音消息XML数据包中,增加一个Recongnition字段。该字段为语音识别出的文本内容。

用户发送语音:

语音XML数据包如下

toUser

fromUser

1357290913

voice

media_id

Format

深圳天气怎么样

1234567890123456

参数说明:

参数

描述

ToUserName

接收方微信号

FromUserName

发送方帐号(一个OpenID)

CreateTime

消息创建时间 (整型)

MsgType

语音为voice

MediaID

语音消息媒体id,可以调用多媒体文件下载接口拉取该媒体

Format

语音格式:amr

Recognition

语音识别结果,UTF8编码

MsgID

消息id,64位整型

二、中文分词

中文分词 (Chinese Word Segmentation) 指的是将一个汉字序列切分成一个一个单独的词。分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。我们知道,在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字、句和段能通过明显的分界符来简单划界,唯独词没有一个形式上的分界符,虽然英文也同样存在短语的划分问题,不过在词这一层上,中文比之英文要复杂的多、困难的多。通过分词可以提取其中关键词语进行搜索。

打个比方:“深圳天气怎么样”,这句话中可分词为“深圳”,“天气”,“怎么样”三个词。其中“天气”为名词,“深圳”为地点名词。

以下是SAE上的分词代码示例:

<?php$str = "深圳天气怎么样";$seg = newSaeSegment();$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 = newSaeSegment();$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;

}

四、效果演示

微信公众平台开发(75) 语音识别相关推荐

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

    在这篇教程中,我们将介绍如何在微信公众平台上开发天气预报功能.我们将使用中国天气网的气象数据接口来获取天气信息. 这篇教程将介绍以下内容: 获取中国天气网的气象数据 在微信公众平台中回复天气 一.中国 ...

  2. 微信公众平台开发----天气预报

    在这篇教程中,我们将介绍如何在微信公众平台上开发天气预报功能.我们将使用中国天气网的气象数据接口来获取天气信息. 这篇教程将介绍以下内容: 获取中国天气网的气象数据 在微信公众平台中回复天气 一.中国 ...

  3. 微信公众平台开发中-SAE不支持XStream框架的解决方案

    问题描述 最近几天(2014年8月20日之后),突然有不少网友反应,柳峰博客中的微信公众平台开发代码在SAE上运行会报错,或者是能正常部署,但向公众号发消息没反应.以前也有一些初学者质疑过我博客中的代 ...

  4. 《微信公众平台开发:从零基础到ThinkPHP5高性能框架实践》——3.3 微信开发者中心...

    本节书摘来自华章计算机<微信公众平台开发:从零基础到ThinkPHP5高性能框架实践>一书中的第3章,第3.3节,作者 方倍工作室,更多章节内容可以访问云栖社区"华章计算机&qu ...

  5. 第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装...

    微信服务器和第三方服务器之间究竟是通过什么方式进行对话的? 下面,我们先看下图: 其实我们可以简单的理解: (1)首先,用户向微信服务器发送消息: (2)微信服务器接收到用户的消息处理之后,通过开发者 ...

  6. 第一篇:微信公众平台开发实战Java版之了解微信公众平台基础知识以及资料准备...

    相信很多人或多或少听说了微信公众平台的火热.但是开发还是有一点门槛,鉴于挺多朋友问我怎么开发,问多了,自己平时也进行以下总结. 所以下面给大家分享一下我的经验: 第一部分   介绍微信公众号的一些简单 ...

  7. 微信公众平台开发入门教程(图文)

    关键字:微信公众平台开发入门 作者:贝创工作室 原文: http://www.cnblogs.com/imaker/p/5491433.html 背景知识:微信公众平台的开发需要有一定的PHP基础知识 ...

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

    <微信公众平台开发最佳实践 第2版> 微信公众平台开发经典之作全新改版,精心挑选最经典的商业项目开发,成千上万人次微信公众平台开发者从中受益 前言 出版说明 自从方倍工作室在博客园推出微信 ...

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

    <微信公众平台开发最佳实践>共分10章,案例程序采用广泛流行的PHP.MySQL.XML.CSS.JavaScript.HTML5等程序语言及数据库实现.系统完整地介绍微信公众平台基础接口 ...

最新文章

  1. Anaconda使用
  2. 2013汇总计算 广联达gcl_36h就可成造价高手:广联达GTJ2018实操指导手册,实用
  3. 查看linux java home_查看Linux中自带的jdk,设置JAVA_HOME
  4. vue2.0读书笔记2-进阶
  5. 谈谈集群NAS在VDI存储中的应用
  6. Oracle Exadata迈入十年将助企业迈向数位转型之路
  7. Spring Boot + 微信小程序——登录凭证校验DEMO
  8. boost::log::string_literal用法的测试程序
  9. leetcode104. 二叉树的最大深度(层序遍历09)
  10. 7-20 表达式转换 (25 分)(代码详解+题目分析)
  11. Linux系统中的load average
  12. 数组正遍历,数组倒遍历
  13. 千博企业网站管理系统源码 支持电脑和手机版
  14. linux mv命令改名,Linux mv命令:移动文件或改名
  15. 万字图文 | 学会Java中的线程池,这一篇也许就够了!
  16. java main 静态代码_java中没有main方法怎么怎么执行静态块中的内容
  17. VBA_自定义对数函数
  18. 存储基础知识学习(12月)
  19. 计算机无法连接路由器上网,为什么路由器无法连接到网络,但是路由器无法连接到互联网!...
  20. 2022盘点工作室常用的API数据接口开发平台

热门文章

  1. 知识点笔记(二维数组排序、统计数组重复个数、)
  2. 关于java的回调方法
  3. 15/7/2017 暑期第一次集训小总结
  4. 【JS笔记】5.1 Object类型
  5. 微信支付开发(3) 对账单
  6. NUC1399 Sum It Up【DFS】
  7. LeetCode —— 链表相关(206、141)
  8. 概率编程语言(Probabilistic Programming Languages)库 —— edward
  9. python opencv —— io(帧、图像、视频的读取与保存)
  10. 【读书笔记】 —— 金融