文章列表

AIML应答机器人(一)aiml简介

AIML应答机器人(二)java实现

想做一款和上图一样的自动应答机器人吗,跟着博客,咱们一步步实现,现在开始第二个内容,开始做一个java版的聊天程序

本文源码地址:https://github.com/xvshu/alice_bot

源码入口:

AIML工厂:AliceBotMother

/*
Copyleft (C) 2005 Hélio Perroni Filho
xperroni@yahoo.com
ICQ: 2490863This file is part of ChatterBean.ChatterBean is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.ChatterBean is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.You should have received a copy of the GNU General Public License along with ChatterBean (look at the Documents/ directory); if not, either write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA, or visit (http://www.gnu.org/licenses/gpl.txt).
*/package bitoflife.chatterbean;import bitoflife.chatterbean.parser.AliceBotParser;
import bitoflife.chatterbean.util.Searcher;import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;public class AliceBotMother
{/*Attribute Section*/private ByteArrayOutputStream gossip;/*Event Section*/public void setUp(){gossip = new ByteArrayOutputStream();}/*Method Section*/public String gossip(){return gossip.toString();}public AliceBot newInstance() throws Exception{Searcher searcher = new Searcher();AliceBotParser parser = new AliceBotParser();AliceBot bot = parser.parse(getClass().getResourceAsStream("/conf/context.xml"),getClass().getResourceAsStream("/conf/splitters.xml"),getClass().getResourceAsStream("/conf/substitutions.xml"),searcher.search(getClass().getResource("/Corpus/Chinese").toString().substring(5), ".*\\.xml"));Context context = bot.getContext(); context.outputStream(gossip);return bot;}
}

web入口AskServlet

package com.web;import com.context.ChartManager;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;public class AskServlet extends HttpServlet {private ChartManager chartManager = null;public AskServlet() {super();chartManager = ChartManager.getInstance();}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String askWord=request.getParameter("askWord");String outWord=chartManager.response(askWord);response.setContentType("text/html");response.getWriter().println(outWord);}@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws javax.servlet.ServletException, IOException {request.setCharacterEncoding("UTF-8");String askWord=request.getParameter("askWord");System.out.println("askWord:"+String.valueOf(askWord));String outWord=chartManager.response(askWord);System.out.println("outWord:"+String.valueOf(outWord));response.setContentType("text/html;charset=UTF-8");response.getWriter().println(outWord);}
}

html页面

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>客服小A</title><script src='js/jquery-1.8.3.min.js'></script><script>$(function(){document.onkeydown = function(e){var ev = document.all ? window.event : e;if(ev.keyCode==13) {takeMsg();}}});</script><style type="text/css">.talk_con{width:600px;height:530px;border:1px solid #666;margin:50px auto 0;background:#f9f9f9;border-radius:10px 10px 10px 10px;}.talk_show{width:580px;height:420px;border:1px solid #666;background:#fff;margin:10px auto 0;overflow:auto;}.talk_input{width:580px;margin:10px auto 0;}.whotalk{width:80px;height:30px;float:left;outline:none;}.talk_word{width:500px;height:26px;padding:0px;float:left;margin-left:10px;outline:none;text-indent:10px;}        .talk_sub{width:56px;height:30px;float:left;margin-left:10px;}.atalk{margin:10px auto;}.atalk span{display:inline-block;background:#0181cc;border-radius:10px;color:#fff;padding:5px 10px;margin:1px auto;}.btalk{margin:10px auto;text-align:right;}.btalk span{display:inline-block;background:#ef8201;border-radius:10px;color:#fff;padding:5px 10px;margin:1px auto;}iframe html body{zoom: 60%;}</style><script type="text/javascript">      //var count_msg=1;window.onload = function(){var Words = document.getElementById("words");var TalkWords = document.getElementById("talkwords");var TalkSub = document.getElementById("talksub");TalkSub.onclick = function(){takeMsg();}}function takeMsg(){Words = document.getElementById("words");TalkWords = document.getElementById("talkwords");TalkSub = document.getElementById("talksub");count_msg=count_msg+1;//定义空字符串var str = "";if(TalkWords.value == ""){// 消息为空时弹窗alert("消息不能为空");return;}//提问str = '<div id="msgtext_'+count_msg+'" class="btalk"><img style="width: 45px;" src="img/user.png"></img><span>' + TalkWords.value +'</span></div>' ;Words.innerHTML = Words.innerHTML + str;document.getElementById("msgtext_"+count_msg).scrollIntoView();count_msg=count_msg+1;$.get("/ask",{askWord:TalkWords.value},function(data){//ajax应答if(data.indexOf("url:")!=-1){str = '<div id="msgtext_'+count_msg+'" class="atalk"><img style="width: 45px;" src="img/kf.png"></img><span><iframe style="height: 550px;width: 380px;"  scrolling="no" src="'+data.substring(4)+'"></iframe></span></div>';}else{str = '<div id="msgtext_'+count_msg+'" class="atalk"><img style="width: 45px;" src="img/kf.png"></img><span>' + data +'</span></div>';}Words.innerHTML = Words.innerHTML + str;document.getElementById("msgtext_"+count_msg).scrollIntoView();count_msg=count_msg+1;});}</script>
</head>
<body><div class="talk_con"><div class="talk_input"><span >AIML应答机器人--小A</span></div><div class="talk_show" id="words"><div class="atalk"><img style="width: 45px;" src="img/kf.png"></img><span id="asay">您好,很高兴为您服务,请问有什么可以帮助您?</span></div></div><div class="talk_input"><input type="text" class="talk_word" id="talkwords"><input type="button" value="发送" class="talk_sub" id="talksub"></div></div>
</body>
</html>

实现效果:

是不是非常简单,只需要将git代码clone到本地,初始化mysql(备用,扩展以后人工录入),编写自己公司的xml应答文件,我这里给公司大米时代(北京)编写了一份,请大家参考:

<?xml version="1.0" encoding="UTF-8"?>
<aiml><category><pattern>*米老师*</pattern><template><srai>米老师</srai></template></category><category><pattern>*米新江*</pattern><template><srai>米老师</srai></template></category><category><pattern>*新江*</pattern><template><srai>米老师</srai></template></category><category><pattern>*大米时代*创*人*</pattern><template><srai>米老师</srai></template></category><category><pattern>*提高班*创*人*</pattern><template><srai>米老师</srai></template></category><category><pattern>*米老师*语录*</pattern><template><srai>米老师语录</srai></template></category><category><pattern>*米新江*语录*</pattern><template><srai>米老师语录</srai></template></category><category><pattern>*新江*语录*</pattern><template><srai>米老师语录</srai></template></category><category><pattern>*新江*话*</pattern><template><srai>米老师语录</srai></template></category><category><pattern>*米老师*话*</pattern><template><srai>米老师语录</srai></template></category><category><pattern>*米教授*话*</pattern><template><srai>米老师语录</srai></template></category><category><pattern>*米教授*语录*</pattern><template><srai>米老师语录</srai></template></category><category><pattern>*入*大米时代*</pattern><template><srai>报名大米时代</srai></template></category><category><pattern>*进*大米时代*</pattern><template><srai>报名大米时代</srai></template></category><category><pattern>*加*大米时代*</pattern><template><srai>报名大米时代</srai></template></category><category><pattern>*入*提高班*</pattern><template><srai>报名大米时代</srai></template></category><category><pattern>*进*提高班*</pattern><template><srai>报名大米时代</srai></template></category><category><pattern>*加*提高班*</pattern><template><srai>报名大米时代</srai></template></category><category><pattern>*大米时代*</pattern><template><srai>大米时代</srai></template></category><category><pattern>*提高班*</pattern><template><srai>大米时代</srai></template></category><category><pattern>大米时代</pattern><template>大米时代(北京)教育科技有限公司,前身为廊坊师范学院信息技术提高班,始于1993年,创建者为米新江教授。大米时代以“授之以欲、受之以愉、渔之于渔”为教育理念,主张“把错误放在现在,把成功放在未来”。大米时代总部位于北京市海淀区,现正在北京、广州、珠海、鄂尔多斯、廊坊、衡水、张家口、三河等地陆续开设分校或运营中心。详情请访问大米时代官网:http://www.dmsdbj.com/</template></category><category><pattern>报名大米时代</pattern><template>座机:010-51292788 或者 0316-5552070, 手机(微信):1583163905,邮箱:3460307818@qq.com,地址:廊坊市广阳区文明路与永丰道交叉口志晟创客中心四楼,我们期待您的来访!详情请访问大米时代官网:http://www.dmsdbj.com/</template></category><category><pattern>米老师</pattern><template>米新江教授。任职于廊坊师范学院,至今从业近三十载。2001年创建了廊坊师范学院信息技术提高班,以独特的教学方法和教育理念培养出一群“狼”一样的学生,得到社会的广泛认可。为教育界和IT界做出了突出贡献。颇具社会影响力。2011年12月,清华大学计算机杂志社主编和多所名校(北京大学、天津师范大学、清华大学、北京交通大学等)的专家教授来信息技术提高班观摩指导,对米新江教授的信息技术提高班教学理念和教育模式给予了肯定。其后,众多知名杂志周刊、新闻网站对米新江教授及信息技术提高班的报道,引发了社会的高度关注。详情请访问大米时代官网:http://www.dmsdbj.com/</template></category><category><pattern>米老师语录</pattern><template>你应该看看这个哦:<random><li>多一个朋友,多一条路;多一个仇人,多一堵墙。 </li><li>对我越是不喜欢的人,我越是客气。    </li><li>对待生活,合适的编码很重要。  </li><li>我在乎的不是你心里怎么想我的;我在乎的是你怎么对我的。 </li><li>你有什么理由不积极主动?    </li><li>别人心里喜不喜欢你,对你一点也不重要,重要的是别人怎么对你。   </li><li>在你不喜欢一个人的时候,你可以试着对这个人好。如果这样,慢慢你就会发现那个你不喜欢的人其实也挺好。    </li><li>学习是终生的,你什么时候停止学习,你什么时候就被淘汰。  </li><li>这个时代,赋予我们两种选择:要么被信息大潮吞没;要么站在潮头做弄潮儿!    </li><li>我只不过是一座桥梁,一座横跨世界的桥梁。    </li><li>郭靖有两个东西:一个使拥有很多师父;另一个是在实战中磨练。所以华山论剑,郭靖天下第一。   </li><li>授之以欲,受之以愉,渔之以鱼。  </li><li>变是永远不变的。   </li><li>不怕不知道,就怕不知道。    </li><li>光低头学习就是一傻帽。    </li><li>不谋全局者不足谋一域,不谋万世者不足谋一时。  </li><li>还有比不要脸更薄的脸吗?    </li><li>学多少都没用,不学更没用!    </li><li>困难是进步的阶梯   </li><li>多看帮助,少走弯路   </li><li>站在巨人的肩膀上   </li><li>教育是一门艺术    </li><li>学无止境   </li><li>一个讲一百个函数的老师是个神经病,但是一个“傻瓜”学生想要质变就必须首先听这个神经病老师的课,达到他的水平再去听好老师的课,否则将一团雾水听不明白最后只等于浪费生命......  </li><li>学习一种思想,逻辑思想,只有有了正确的思想才能准确而有效率的做事,建立一种全面的思考方式,基础要明白,原理要明白,才会学会学习。合理安排时间,集中精力!   </li><li>自己的兴趣才是动力,自控能力至关重要!倘若正当学习的时候没有学,会后悔的!  </li><li>一边体会精彩,一边学会如何体会。    </li><li>倘若你不会表达,就是说明你思考得不成熟。    </li><li>问题是解决问题的开始。    </li><li>现在就要想:将来做一个怎样的人。一分耕耘一分收获。   </li><li>做人要明白,要有很高的业务水平和超强的自我控制能力、学习能力。 </li><li>做人就要做一个:高品德,对事物有正确认识,才会有高素质,才会有高才能 </li><li>学会去爱每一个人,为了国家为了民族的需要而活着! </li><li>要想成功,就要具备超常的耐力、毅力、动力!另外还有创新能力。   </li><li>要有坚定的信念,坚定的信念,没有抱负哪有成功?   </li><li>遇到困难的时候就是进步的时候,但前提是你必须知道或者明白如何把困难变成机会!   </li><li>前途是光明的,道路是曲折的,面对坚信怎么办:要有毅力!    </li><li>越早强大起来生存机会就越大!  </li><li>美是需要共享的,你的美得不到大家的认同,只有你自己享受,那就不能再叫作美了 </li><li>自信越用越多 </li><li>如果放弃一次,那么碰到下一个挫折时我就会继续放弃;如果坚持而成功那么碰到下一个挑战时我会激励自己再取成功。    </li><li>别着急,别怕刚开始的时候慢…… </li><li>现在的大学教育是大众教育不是精英教育,你上大学了,最多说明你是一个大众人,找不到工作或者说毕业了不知道自己学了什么都挺正常的,因为你只是一个大众人。想做杰出的人,就要做精英,而精英不是上天给的,都是自己努力的,outstanding!为什么?因为你站在巨人的肩上了,可是怎么才能爬到巨人的肩上呢?那就是hardwork。   </li><li>和你有关系吗? </li><li>办法总比困难多    </li></random>详情请访问大米时代官网:http://www.dmsdbj.com/</template></category></aiml>

效果:

使用tomcat启动,设置utf-8编码支持中文

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8" />

AIML应答机器人(二)java实现相关推荐

  1. 人工智能标记语言AIML聊天机器人:…

    人工智能标记语言AIML聊天机器人:产生.种类.应用.实例.AIML概述.知识库.公司.业界(20k字经典收藏版) 秦陇纪10译编 聊天机器人(chatterbot)是一个用来模拟人类对话或聊天的程序 ...

  2. 人工智能标记语言AIML聊天机器人:产生、种类、应用、实例、AIML概述、知识库、公司、业界(20k字经典收藏版)...

    目录 一.聊天机器人(chatbots)的产生.盛行.中文版 二.聊天机器人种类及应用场景简介 三.聊天机器人相关疑问与常见实例 四.人工智能标记语言(AIML)概述(Dr.理查德S.华勒斯Richa ...

  3. 20175333曹雅坤 实验二 Java面向对象程序设计

    实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...

  4. java基本语句回文数实验_实验二 java基本数据类型与把持语句.doc

    实验二 java基本数据类型与把持语句.doc 还剩 4页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: 5System.out.println(num ...

  5. 创建线程方式二 java 1615474026

    创建线程方式二 java 1615474026 实现Runnable接口方式创建线程 演练 定义一个类,实现接口 测试类

  6. 二-Java基础-作业-基础语法

    文章目录 前言 二-Java基础-环境搭建-Eclipse下载步骤和安装步骤2 二-Java基础-环境搭建-创建工程3 Java-环境搭建 总结 前言 # 二-Java基础-环境搭建-JDK-11.0 ...

  7. Java图形编程实验总结_实验二java图形界面编程2015级.doc

    实验二java图形界面编程2015级.doc 实验二JAVA图形界面编程一.实验目的熟悉JAVA运行环境,编程掌握JAVASWING组件的图形界面编程.二.实验环境微机,软件MYECLIPSE,JDK ...

  8. 面试题汇总二 Java 多线程篇

    前言 题目汇总来源 史上最全各类面试题汇总,没有之一,不接受反驳 面试题汇总一 Java 语言基础篇 面试题汇总二 Java 多线程篇 面试题汇总三 Java 集合篇 面试题汇总四 JVM 篇 面试题 ...

  9. java面向对象实验结论及心得_20162305 实验二 Java面向对象程序设计 实验报告

    20162305 实验二 Java面向对象程序设计 实验报告 实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承.多态 3.初步掌握UML建模 4.熟悉S.O.L.I.D ...

  10. JVM进阶(十二)——JAVA 可视化分析工具

    JVM进阶(十二)--JAVA 可视化分析工具   经过前几篇博文对堆内存以及垃圾收集机制的学习,相信小伙伴们已经建立了一套比较完整的理论体系!本篇博客就根据已有的理论知识,通过可视化工具来实践一番. ...

最新文章

  1. 【商务智能】数据预处理
  2. [ATF]-ATF的RT_SVC的详解(runtime service)
  3. LeetCode 552. 学生出勤记录 II(动态规划)
  4. 互联网产品一网易网站设计(思想)
  5. 软件测试人员如何在“金三银四”跳槽季找到理想工作?
  6. 最好用的 网络神偷V10.7
  7. C语言——是否为闰年的判断
  8. 手机可以连上wifi,电脑连不上怎么办?
  9. push msg php_php进程通信-消息队列
  10. 电脑如何打开虚拟化设置?
  11. 编写一个函数,简单模拟微信发红包算法。
  12. HBuilderXHBuilder连接雷电模拟器“未检测到手机或模拟器” ---- 问题解决
  13. 在 Kubernetes 集群中使用 MetalLB 作为 LoadBalancer(下)- BGP
  14. 静态编译,动态编译,静态库,动态库的区别
  15. Unity实现边缘轮廓高亮
  16. c++ 从入门到放弃
  17. Centos网络操作之IP、网关、路由、防火墙
  18. 解决eclipse控制台不能正常输入问题的心路历程
  19. 支付宝 错误信息对照表
  20. 浅谈三次数学危机——费马大定理

热门文章

  1. 怎样在VMWare虚拟机中的Windows系统使用U盘启动盘进入PE环境
  2. 浅析智能视频分析技术及其作用
  3. 7代cpu能装虚拟xp系统吗_【精选】减少DCS系统故障的实例与措施
  4. vim插件-对齐插件tabular
  5. AI圣经!《深度学习》中文版隆重上市!美国亚马逊AI领域排名第一畅销书!
  6. DevCpp 如何进行调试
  7. 创建可维护的自动化验收测试
  8. linux获取weblogic版本,LINUX查看JDK和Weblogic版本命令
  9. 工程物料管理信息化建设(一)——什么是工程物料管理系统
  10. 简明Python教程第二部分7-9