欢迎关注我的微信公众账号“APP每日推荐

推荐一些精彩手机应用,互联网行业资讯~

<!--题外话  :做这样一个系列的原因在于,这个微信公众平台算的上是我解除编程一来开发的第一个有实际用途的东西,在这之中有很多体会,不敢说讲给大家听,只是同大家分享一下,作为学计算机的,因为专科学的是网络,所以编程解除的并不深,现在开始从新开始学习编程。这里面的代码可能写的不是很规范,还请您指出,我会继续修改的。-->

言归正传,这次分享的Siri功能实际上提供的是一种智能助手,其作用是用户回复想了解的问题,可以是词语或者是句子,系统会自动回复所有可能的答案如图所示:

这个的先说一下这个功能现有的问题,只能匹配提问的语句中所有的名词词语,例如本例中提问的语句“学校怎么去火车站”,这句话中的名词有两个:“学校”,“火车站”所有就把有关这两个名词的答案全部列出。并不能像搜索引擎一样,“理解“这句话的含义,这个是我现在没有办法解决的。

下面开始分析设计思路。首先,这个功能的回复信息采用的“无图”的多条图文信息,官方提供的消息格式为

$textPicTpl = " <xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content><ArticleCount>1</ArticleCount><Articles><item><Title><![CDATA[%s]]></Title><Description><![CDATA[%s]]></Description><PicUrl><![CDATA[%s]]></PicUrl><Url><![CDATA[%s]]></Url></item></Articles><FuncFlag>0</FuncFlag></xml> ";

其中<ArticleCount>这个标签中的数值为图文信息的条数。如果不为1,那么只需要把<item></item>之间的代码重复即可,如果不想要图片,可以在回复的代码中把标签<PicUrl>中的变量置为空即可。由于微信官方提供的多条图文信息最多只支持10条信息。所以需要在回复信息格式的位置,事先把1-10的图文消息格式全部预制。

下一步便是整个功能的实现部分,先用一个流程图解释一下:

1.sae的分词功能:

sae中提供了这个服务官方给了一段demo如下:

<?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] => 132 [index] => 0 ) [1] => Array ( [word] => 星期天 [word_tag] => 132 [index] => 1 ) )

其中word字段为分词后的词语,word_tag字段为词性代号(代号所表示的词性请见API:http://apidoc.sinaapp.com/sae/SaeSegment.html),index字段为编号。这里我们主要使用前两个字段。因为我还没有办法真正通过分词等技术实现彻底理解用户提问的意图,所以只好采用提取句子中的名词和一部分动词来作为可能的关键字,因为在通常情况下,名词和动词就是内容的关键。所以我们根据word_tag字段,分辨出所有的名词提取到数组$keywd_arr中,这个数组是一个一维数组,只存储了关键字。

2.数据库匹配关键字

我们需要预定义一个数据库,数据库结构为:SiriTable(id,title,keyword,content)其中id为主键,并且是自动编号,title用于显示在回复格式中的title,例如第一幅图中的“学校宿舍情况”“学校附近的商场”等标题文字。keyword用于存储这条记录可能的所有关键字,例如:title为“火车站公交路线”的keyword为“火车站”,“公交车”,"青岛站",这样,用户所输入的问题中凡是带有这3个关键字时,这条title为“火车站公交路线”的记录便会被取出。

通过自定义的方法,将第一个关键字与数据库匹配,取出匹配成功记录中的“title”“id”字段内容,因为一个关键字可能对应多条记录,所以结果存储到一个二维数组中,之后再用同样的方法匹配第二个关键字,将所有关键字匹配结束后,我们得到了很多个长度不同的二维数组,组成一个三维数组,这里为了输出方便,我做了一个调整,把这个三维数组转换为一个二维数组并输出。转换的原因,在后面提到。这里我先画一个示意图把上面的过程图示一下:

3.整合输出,这里需要处理的就是将所得到的信息以格式化的形式返回给用户,部分代码如下:

switch ($text_type_num) {                 //$text_type_num为返回的结果数量case"0":$msgType = "text";$contentStr = "*琴院助手*
*未查到相关数据*
*将进行有道翻译*
" . language($keyword);$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);……case"2":                            //查询结果为2条记录$s_textPicTpl = $textPicTpl2;$url = "http://1.testqdc.sinaapp.com/siri_pro.php?way=" . $kwd_re_arr[0][1];  //第一条记录的跳转地址,其中$kwd_re_arr[0][1]为第一条记录的id值,以get方式传递到显示页面$url1 = "http://1.testqdc.sinaapp.com/siri_pro.php?way=" . $kwd_re_arr[1][1]; //第二条记录的跳转地址$title = $kwd_re_arr[0][0];     //第一条记录标题$title1 = $kwd_re_arr[1][0];    //第二条记录标题$description = "";          //消息描述定义为空$picurl = "";               //图片url定义为空$resultStr = sprintf($s_textPicTpl, $fromUsername, $toUsername, $time, $msgType, $title, $description, $picurl, $url, $title1, $description, $picurl, $url1);break;……}

上面是以返回2条记录为例说明。

之后就是跳转的显示页面了,很简单,直接看代码吧:

<!DOCTYPE html>
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title></title></head><body bgcolor="#9dd6f4" text="#011126"><style>body{font-size:55px;text-align:center}</style><?php// put your code here$id=$_GET["way"];$con = mysql_connect(SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS); mysql_select_db("数据库名称", $con);$sql1="select * from 数据表名称 where id=".$id;$result11=mysql_query($sql1,$con); $info= mysql_fetch_assoc($result11);echo "<br><br>**琴院Siri助手**<br>".$info['content'];mysql_close($con);?></body>
</html>

以上就是这个功能的开发过程。

微信公众平台开发实例(琴岛学院校园之声) PHP开发 代码挂载SAE平台(五)琴院Siri功能相关推荐

  1. php 微信解析xml数据,微信公众平台开发实例 PHP开发 代码挂载SAE平台(六)星座物语 php解析xml文件...

    今天带来的是查询每日星座运势的功能,这个功能非常简单,在微信平台上输入星座名称加一个标识符(例如"+"号),后台程序匹配这个标识符调用相应的功能. 具体流程上:1.使用字符串分割函 ...

  2. 琴岛学院java书_​师生共品书 传承优秀传统文化 琴岛学院第十三届金秋读书节开幕...

    半岛网10月23日讯 "共看明月应垂泪,一夜乡心五处同""海上生明月,天涯共此时",一首首经典的唐诗在琴岛学院图书馆二楼被高声吟诵,一场别开生面的金秋诗会&qu ...

  3. 琴岛学院计算机应用技术,我院计算机工程系成功晋级“中国高校计算机大赛-网络技术挑战赛”全国总决赛...

    2017年7月22日,由教育部高等学校计算机类专业教学指导委员会.教育部高等学校软件工程专业教学指导委员会.教育部高等学校大学计算机课程教学指导委员会和全国高等学校计算机教育研究会联合主办的" ...

  4. 青岛琴岛学院计算机系的教师有哪些,2016山东青岛理工大学琴岛学院计算机实训教师引进公告...

    青岛理工大学琴岛学院位于青岛市城阳区东部,的崂山风景区西麓,占地1060亩,校舍建筑面积52万平方米,学院现有全日制本专科在校生16500余人,设有本科专业32个.专科专业21个,涵盖工.管.文.经. ...

  5. php微信公众号支付实例教程,php微信支付之公众号支付功能

    这篇文章主要为大家详细介绍了php微信支付之公众号支付功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 网上的很多PHP微信扫码支付接入教程都颇为复杂,且需要配置和引入较多的文件,本人通过整理后 ...

  6. php微信公众号支付实例教程,PHP微信公众号支付教程(含图文)

    PHP微信公众号支付教程(含图文) 开发前的配置 微信公众号后台的网页授权域名和js接口安全域名 这两个域名一般做微信公众号网页开发是必须配置的,那么他们的主要作用是什么呢?js接口安全域名是为了验证 ...

  7. php微信公众号支付实例教程,微信支付PHP SDK之微信公众号支付代码详解_php实例...

    这里假设你已经申请完微信支付 1. 微信后台配置 如图 我们先进行测试,所以先把测试授权目录和 测试白名单添加上.测试授权目录是你要发起微信请求的哪个文件所在的目录. 例如jsapi 发起请求一般是j ...

  8. php 微信公众号跳转小程序,微信公众号菜单添加小程序miniprogrampagepath参数详解php开发公众号-小程序怎么放到公众号菜单里-公众号菜单链接小程序...

    1. 随着微信小程序功能的开发,2. 已经可以跟公众号打通了,3. 主要有两种方式:4. 1)在公众号文章中插入小程序5. 2)在公众号菜单中添加小程序6. 第一种方式,7. 子恒老师在前面的课程已经 ...

  9. java查看附近门店_微信公众号获取用户地理位置并列出附近的门店的示例代码...

    思路分析: 1.在微信公众号内获取用户地理位置 需要js-sdk签名包(关于如何获取文档有介绍) 2.根据获取的地理位置ajax去后台请求,通过sql语句,查询中距离最近的门店(sql语句在网上搜的, ...

最新文章

  1. oracle如何添加非空约束,oracle 怎么用sql删除非空约束?
  2. python字典实现关键字检索_如何实现搜索框的关键词提示功能
  3. C#之windows桌面软件第三课:完整的串口调试助手
  4. java下载pdf6_疯狂java讲义第6版 电子版(pdf格式)
  5. js获取checkbox值的方法
  6. 华师大数据科学考研_华东师范大学数据科学与工程需要复习哪些内容?
  7. ubuntu14.10环境下Apeach的安装配置
  8. Mysql 查询当月时间数据
  9. 扩展ExtJs的编辑器(HtmlEditor):插入图片
  10. MFC Windows 程序设计(二)-初尝禁果
  11. Spring注解-@DependsOn
  12. 打开计算机文件反应慢怎么解决方法,word文档打开速度慢的几个原因和有效解决方法...
  13. MTK平台双击Power打开Camera的简单流程
  14. 去除带下划线的word文档答案
  15. Nasdaq股票代码表 zt
  16. 快递与电商的恩怨纠纷
  17. 预见未来: 微软亚洲研究院看下一个二十年
  18. 远程连接mysql出现ERROR 1130 (HY000): Host ‘xxx.xxx.xxx.xxx’ is not allowed to connect to this MySQL server
  19. 知识图谱初探(二)三体人物关系图谱构建
  20. 大数据培训机构水有多深?

热门文章

  1. android l风格cm10主题,Android 4.3的CM10.2
  2. 计算机python指什么_系统学习python-1.1什么是计算机
  3. 3、组推荐系统及其应用研究---张玉洁(2016)
  4. 第四章 进程同步与互斥
  5. Cesium中的相机—HeadingPitchRoll
  6. Linux 命令学习_无名小仙男
  7. 2021年编程列入高考_什么是2021年最佳的后端编程语言?
  8. 微信商城店铺怎么开通
  9. linux开启审计进程,系统运维|Auditd-Linux 服务器安全审计工具
  10. 【Java基础系列教程】第十五章 Java 正则表达式详解