很简易的一个智能自动问答机器人,应用了中文句子分词、多关键词句子匹配技术。

<!DOCTYPE HTML>
<HTML><HEAD><meta charset="utf-8"><TITLE>CHATTING</TITLE><STYLE TYPE="TEXT/CSS">body{background-color:#cccccc;color:#eee;text-align:center;}#dialogDisplay{position:relative;max-width:600px;height:300px;margin-left:auto;margin-right:auto;margin-top:50px;background-color:#111111;overflow:auto;padding:30px;}#question{min-width:600px;margin-left:auto;margin-right:auto;margin-top:10px;height:75px;border-radius:10px;background-color:#EEEEEE;}.questionbox{text-align:right;color:#FF0000;font-size:10px;}.answerbox{text-align:left;color:#00FF00;font-size:10px;}.speech{background-color:#333333;border-radius: 5px; font-size:18px;display:inline;padding:10px;line-height:200%;}</STYLE><SCRIPT TYPE="TEXT/JAVASCRIPT" SRC="ChineseDictionary.js"></SCRIPT><SCRIPT TYPE="TEXT/JAVASCRIPT" SRC="QuestionAndAnswer.js"></SCRIPT><SCRIPT TYPE="TEXT/JAVASCRIPT">function found(keyword){//判断关键词是否存在词典中//词典以JSON格式存储在ChineseDictionary.js文件的W对象内if(W[keyword]==1){return true;}else{return false;}
}//function parseChinese(inputSentence){//正向关键词最长匹配法分词//输入任意一句话,最终产生分词字符串resultString和分词数组resultArray//删除待处理字符串头部的空格inputSentence=inputSentence.replace(/(^\s+)/,"");var inputSentenceLength=inputSentence.length;var wordMaxLength=7;var resultArray=new Array();var resultString="";var recognizedWords="";//如果输入句长度小于词典词汇长度则令最大长度等于句子长度if(inputSentenceLength<=wordMaxLength){wordMaxLength=inputSentenceLength;}//增加三个空格方便尾部处理,空格数=wordMaxLength-1inputSentence+="      ";for(var i=0;i<inputSentenceLength;i++){//尾部还需特殊处理for(var j=wordMaxLength;j>0;j--){var checkword=inputSentence.substr(i,j);if(found(checkword)){//alert(checkword);recognizedWords+=checkword+",";resultArray.push(checkword);//注意后面需要-1,因为FOR循环会自动加1i=i+j-1;break;}else{if(j==1){resultArray.push(checkword);}}}}//处理所得到的结果数组//由于前面的过程会把英文单词分割成字母,现在需要连接起来for(var i=0;i<resultArray.length-1;i++){var regw=/\w/;if(regw.test(resultArray[i])&&regw.test(resultArray[i+1])){resultArray[i+1]=resultArray[i]+resultArray[i+1];resultArray[i]="";}}//结果数组转换成结果字符串resultString=resultArray.join(" ");//替换掉里面多余的空格resultString=resultString.replace(/\s{2,}/g," ");//替换掉多余的逗号去除尾部空元素resultString=resultString.replace(/,$/,"");//重新将字符串转换回数组//去除识别字符串里的重复元素if(resultString==""){resultArray=new Array();}else{resultArray=resultString.split(" ").reverse().join(",").match(/([^,]+)(?!.*\1)/ig).reverse(); }//本分词函数对象各个属性最终值recognizedWords=recognizedWords.replace(/,$/,"");this.recognizedWords=recognizedWords;//注意输入值为空或者不匹配的情况if(this.recognizedWords==""){this.recognizedWordsArray=new Array();}else{this.recognizedWordsArray=recognizedWords.split(",").reverse().join(",").match(/([^,]+)(?!.*\1)/ig).reverse();//ar.reverse().join(",").match(/([^,]+)(?!.*\1)/ig).reverse()//删除数组中重复元素}//将分词结果存在本对象的字符串和数组中this.resultString=resultString;this.resultArray=resultArray;
}//function matchRate(string1,string2){//任意两句话的话题匹配程度(只考虑二者的关键词)var matchScore1=0;var matchScore2=0;var chineseWords1=new parseChinese(string1);var chineseWords2=new parseChinese(string2);var keywordsArray1=chineseWords1.recognizedWordsArray;var keywordsArray2=chineseWords2.recognizedWordsArray;var keywordsString1="#"+keywordsArray1.join("##")+"#";var keywordsString2="#"+keywordsArray2.join("##")+"#";var keywordsStringRegX1="/"+"#"+keywordsArray1.join("#|#")+"#/gi";var keywordsStringRegX2="/"+"#"+keywordsArray2.join("#|#")+"#/gi";//用string2的关键词去匹配string1var matchArray1=new Array();matchArray1=keywordsString1.match(eval(keywordsStringRegX2));//用string1的关键词去匹配string2var matchArray2=new Array();matchArray2=keywordsString2.match(eval(keywordsStringRegX1));if(matchArray1!=null){matchScore1=matchArray1.length;}else{matchScore1=0;}if(keywordsArray2.length>0){matchScore1=matchScore1/keywordsArray2.length*100;}else{matchScore1=0;}if(matchArray2!=null){matchScore2=matchArray2.length;}else{matchScore2=0;}if(keywordsArray1.length>0){matchScore2=matchScore2/keywordsArray1.length*100;}else{matchScore2=0;}//取互相匹配的值的平均值为最终结果var averageScore=(matchScore1+matchScore2)*0.5;return averageScore;
}//function matchAllRate(string1,string2){
//任意两句话的话题匹配程度(只考虑二者的关键词)var matchScore1=0;var matchScore2=0;var chineseWords1=new parseChinese(string1);var chineseWords2=new parseChinese(string2);var keywordsArray1=chineseWords1.resultArray;var keywordsArray2=chineseWords2.resultArray;var keywordsString1="#"+keywordsArray1.join("##")+"#";var keywordsString2="#"+keywordsArray2.join("##")+"#";var keywordsStringRegX1="/"+"#"+keywordsArray1.join("#|#")+"#/gi";var keywordsStringRegX2="/"+"#"+keywordsArray2.join("#|#")+"#/gi";//用string2的关键词去匹配string1var matchArray1=new Array();matchArray1=keywordsString1.match(eval(keywordsStringRegX2));//用string1的关键词去匹配string2var matchArray2=new Array();matchArray2=keywordsString2.match(eval(keywordsStringRegX1));if(matchArray1!=null){matchScore1=matchArray1.length;}else{matchScore1=0;}if(keywordsArray2.length>0){matchScore1=matchScore1/keywordsArray2.length*100;}else{matchScore1=0;}if(matchArray2!=null){matchScore2=matchArray2.length;}else{matchScore2=0;}if(keywordsArray1.length>0){matchScore2=matchScore2/keywordsArray1.length*100;}else{matchScore2=0;}//取互相匹配的值的平均值为最终结果var averageScore=(matchScore1+matchScore2)*0.5;return averageScore;
}//function talk(){//智能应答对话主程序//应用了前面的分词和匹配技术var bestAnswerIndex=0;var bestMatchScore=0;var questionString=document.getElementById("question").value;document.getElementById("question").value="";var now=new Date().toLocaleTimeString();//显示问题到屏幕上var outputString="<div class='questionbox'><br />"+now+" 冰豆小李<br /><br /><div class='speech'>"+questionString+"</div><br /></div>";document.getElementById("dialogDisplay").innerHTML+=outputString;document.getElementById("dialogDisplay").scrollTop=document.getElementById("dialogDisplay").scrollHeight;//去除特殊符号以免后续匹配出错questionString=questionString.replace(/\^|\.|\*|\?|\!|\/|\\|\$|\#|\&|\||,|\[|\]|\{|\}|\(|\)|\-|\+|\=/g," ");//遍历问答库,搜寻最接近的问答for(var i=0;i<QA_Count;i++){var answerQ=QA[i].Q;answerQ=answerQ.replace(/\^|\.|\*|\?|\!|\/|\\|\$|\#|\&|\||,|\[|\]|\{|\}|\(|\)|\-|\+|\=/g," ");//matchAllRate才能匹配英文var matchScore=matchAllRate(questionString,answerQ);//优选出匹配度最高的if(matchScore>=bestMatchScore){bestMatchScore=matchScore;bestAnswerIndex=i;}//如果遇到全匹配则跳出搜索循环if(matchScore==100){break;}//如果识别率为零则生成一个随机应答索引//问答知识库头10条记录是为这种情况设定的if(bestMatchScore==0){bestAnswerIndex=Math.floor(Math.random()*10);}}//依据所获的索引号提取出问题的最佳答案var answerString=QA[bestAnswerIndex].A;//不能显示太快,否则机器人的痕迹太明显,所以要延迟显示var delayTimer=setTimeout(showAnswer,1);//显示问题的答案到屏幕上function showAnswer(){var now=new Date().toLocaleTimeString();var outputString="<div class='answerbox'><br />一粒马豆 "+now+"<br /><br /><div class='speech'>"+answerString+"</div><br /></div>";document.getElementById("dialogDisplay").innerHTML+=outputString;document.getElementById("dialogDisplay").scrollTop=document.getElementById("dialogDisplay").scrollHeight;}}</SCRIPT></HEAD><BODY><div id="dialogDisplay"></div><input id="question" type="text" οnkeypress="if(event.keyCode==13){talk()}" /></BODY></HTML>

简易智能自动问答机器人相关推荐

  1. 基于itchat的自动调查机器人

    基于itchat的自动调查机器人 最近需要做一个项目里的一个自动问答机器人的部分,需要对访谈对象做自动的访谈.需要按时进行提问,并且把采访到的数据以文本的形式进行记录.图片需要下载下来,语音也需要下载 ...

  2. 自动问答研究进展、现状及趋势

    (摘自<中文信息处理发展报告(2016)>) 1. 任务定义.目标和研究意义 自动问答(Question Answering, QA)是指利用计算机自动回答用户所提出的问题以满足用户知识需 ...

  3. 自动跟随机器人:一种简易的自动跟随方案,自动跟随小车、自动跟随平衡小车、STM32、基于超声波的自动跟随小车

    目的:一种廉价的跟随方案,让大家都能够参与进来,技术难度不大,一些人也能够DIY一些属于自己的"跟随"机器人!并不是要做工业应用什么的.只是做出来玩玩~ / 1 / 介绍 先看视频 ...

  4. python知识点智能问答_基于知识图谱的智能问答机器人

    研究背景及意义 智能问答是计算机与人类以自然语言的形式进行交流的一种方式,是人工智能研究的一个分支. 知识图谱本质上是一种语义网络,其结点代表实体(entity)或者概念(concept),边代表实体 ...

  5. 基于知识图谱的智能问答机器人

    研究背景及意义 智能问答是计算机与人类以自然语言的形式进行交流的一种方式,是人工智能研究的一个分支. 知识图谱本质上是一种语义网络,其结点代表实体(entity)或者概念(concept),边代表实体 ...

  6. 剖析腾讯知文,智能问答机器人路在何方

    近年来,智能机器人客服已经在各行各业发挥作用,替代人类更有效率地处理繁杂的事务. 但是,不可否认的是,目前市面上大多数智能客服并不能完美满足用户的需求,如难以处理未经过训练的场景问题,无法理解复杂的人 ...

  7. 七月Z星月度速览 | Milvus 源码解析重磅来袭、学术直播间开播、Milvus 社区在线答疑会重启、智能问答机器人上线……...

    #July Z星月度速览 · 小 Mil 来了!Milvus 智能问答机器人上线 · Zilliz 合伙人.工程总监栾小凡与社区分享首期 Milvus 底层源码架构解析 · Milvus 社区发起首期 ...

  8. 智能对话引擎:两天快速打造疫情问答机器人

    01 微软AI技术+开源知识库=疫情机器人 近一个月来,"新冠肺炎疫情"成了所有人的热点话题,抗击疫情的战役在全国紧张有序地进行着.随着全国各地的企业陆续复工,怎样防范.保护自己和 ...

  9. ztree在刷新时第一个父节点消失_第一个关于中式菜谱的智能问答机器人小程序正式上线啦...

    为了满足大家对菜品烹饪的各类问题能直接得到答案的需求,我开发了目前第一个真正关于菜谱的智能问答系统,并在微信小程序发布上线.这套系统支持对于8600多种菜品的问答功能,并能实现快速问答响应,整套系统后 ...

  10. Android之智能问答机器人

    本文主要利用图灵机器人的接口,所做的一个简单的智能问答机器人 实现 由于发送与接收消息都是不同的listView,所以要用有两个listVeiw的布局文件 接收消息布局文件 <?xml vers ...

最新文章

  1. oracle10gr2完全卸载,Oracle10gR2Streams删除所有配置
  2. 5. SQL Server数据库性能监控 - 当前请求
  3. mysql语法6_全面接触SQL语法(6)_mysql
  4. [Andriod官方训练教程]保存数据之保存键-值对的集合
  5. php 查看磁盘挂载,linux如何查看磁盘使用情况
  6. .NET Core 3.0中的Cookie身份验证
  7. i5功耗最低的cpu_近年最大飞跃 Intel第11代低功耗酷睿处理器官宣:集显2倍、AI乘4...
  8. 华为抓取错误日志在哪里_分析Spider抓取情况和SEO优化
  9. 一行代码下载网页视频!
  10. Chrome、FireFox浏览器新标签页打开搜索和书签
  11. 学习《医学三字经白话解》之虚劳
  12. 可位寻址与不可位寻址
  13. OBS Studio显示器黑屏
  14. 亿级流量网站架构核心技术
  15. 联想高管加盟乐视,手机市场风云突变
  16. 相干信号与非相干信号
  17. 适合Linux系统的笔记本推荐,推荐5款让你的旧电脑重获新生的Linux发行版
  18. 大数据-Hadoop(环境搭建)
  19. 实现小程序连接服务器(Java后台)发送请求,并返回响应
  20. 工业ESD防静电闸机系统帮助您实现静电监控自如!

热门文章

  1. 研发人员如何提高工作效率
  2. WinSCP(Windows与Linux文件同步工具)使用总结
  3. 什么是spurious wakeups(虚假唤醒)
  4. 如何运用dos命令进入C盘?Dos常用命令大全
  5. python的spider如何让鼠标不_【专题教学】python wooyun爬虫模拟鼠标等
  6. P1137 旅行计划
  7. html5图片高斯模糊,CSS实现图片高斯模糊但边界清楚的效果
  8. word/wps 实用技巧: 批量改大纲标题样式
  9. Cookie顶级域名、二级域名、三级域名共享
  10. globk命令帮助信息