微信公众平台开发模式 微信 语音识别 公众平台 消息接口 语音识别
一、申請(qǐng)微信認(rèn)證
微信認(rèn)證后將自動(dòng)開通高級(jí)接口,獲得高級(jí)接口中所有接口權(quán)限,無需二次申請(qǐng)。
高級(jí)接口含有獲取用戶基本信息、客服接口、語(yǔ)音識(shí)別等高級(jí)接口權(quán)限。
二、獲取語(yǔ)音識(shí)別結(jié)果
開通語(yǔ)音識(shí)別功能,且該功能設(shè)置處于開啟狀態(tài)的公眾帳號(hào),用戶每次發(fā)送語(yǔ)音給公眾號(hào)時(shí),微信會(huì)在推送的語(yǔ)音消息XML數(shù)據(jù)包中,增加一個(gè)Recongnition字段。
開啟語(yǔ)音識(shí)別后的語(yǔ)音XML數(shù)據(jù)包如下:
<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> 參數(shù)說明:參數(shù) 描述 ToUserName 開發(fā)者微信號(hào) FromUserName 發(fā)送方帳號(hào)(一個(gè)OpenID) CreateTime 消息創(chuàng)建時(shí)間 (整型) MsgType 語(yǔ)音為voice MediaID 語(yǔ)音消息媒體id,可以調(diào)用多媒體文件下載接口拉取該媒體 Format 語(yǔ)音格式:amr Recognition 語(yǔ)音識(shí)別結(jié)果,UTF8編碼 MsgID 消息id,64位整型三、使用中文分詞提取關(guān)鍵特征
中文分詞 (Chinese Word Segmentation) 指的是將一個(gè)漢字序列切分成一個(gè)一個(gè)單獨(dú)的詞。分詞就是將連續(xù)的字序列按照一定的規(guī)范重新組合成詞序列的過程。我們知道,在英文的行文中,單詞之間是以空格作為自然分界符的,而中文只是字、句和段能通過明顯的分界符來簡(jiǎn)單劃界,唯獨(dú)詞沒有一個(gè)形式上的分界符,雖然英文也同樣存在短語(yǔ)的劃分問題,不過在詞這一層上,中文比之英文要復(fù)雜的多、困難的多。通過分詞可以提取其中關(guān)鍵詞語(yǔ)進(jìn)行搜索。
打個(gè)比方:
例如,識(shí)別結(jié)果為”深圳天氣怎么樣”,可分詞為”深圳”,”怎么樣”,三個(gè)詞。我們提取出“天氣”作為名詞,“深圳”作為地點(diǎn)名詞,
以下是SAE上的分詞代碼示例:
<?php $str = "深圳天氣怎么樣"; $seg = new SaeSegment(); $ret = $seg->segment($str, 1);print_r($ret); //輸出if ($ret === false)var_dump($seg->errno(), $seg->errmsg()); ?>識(shí)別結(jié)果如下:
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)) //詞性對(duì)應(yīng)關(guān)系 POSTAG_ID_N = 95 (line 322) 名詞 POSTAG_ID_NS_Z = 102 (line 357) 地名(名處詞專指:“中國(guó)”) POSTAG_ID_D = 40 (line 207) 副詞三、程序?qū)崿F(xiàn)
判斷是否開啟語(yǔ)音識(shí)別
private function receiveVoice($object) {if (isset($object->Recognition) && !empty($object->Recognition)){$contentStr = "你發(fā)送的是語(yǔ)音,內(nèi)容為:".$object->Recognition;}else{$contentStr = "未開啟語(yǔ)音識(shí)別功能或者識(shí)別內(nèi)容為空";}if (is_array($contentStr)){$resultStr = $this->transmitNews($object, $contentStr);}else{$resultStr = $this->transmitText($object, $contentStr);}return $resultStr; }效果如下:
調(diào)用SAE分詞
var_dump(segment("明天長(zhǎng)沙天氣怎么樣")); 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;} }返回結(jié)果如下:
array(2) {["category"]=>string(6) "天氣"["keyword"]=>string(6) "長(zhǎng)沙" }這樣就獲知曉了用戶要查詢的功能是天氣,城市名稱是長(zhǎng)沙。
功能查詢
根據(jù)獲得的功能類別及關(guān)鍵字,我們可以查詢相應(yīng)的城市天氣預(yù)報(bào)。
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 = "不能理解你的內(nèi)容:".$content; }四、效果演示
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖
總結(jié)
以上是生活随笔為你收集整理的微信公众平台开发模式 微信 语音识别 公众平台 消息接口 语音识别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信支付是什么时候开始的
- 下一篇: [WEB API] CLIENT 指定请