原创作者:一粒马豆&冰豆小李


首先让我们来看看这样一种语言现象:

研表究明,汉字序顺并不定一影阅响读。

Aoccdrnig to a rscheearch at an Elingsh uinervtisy, it deosn't mttaer in waht oredr the ltteers in a wrod are, the olny iprmoetnt tihng is taht the frist and lsat ltteer is at the rghit pclae. The rset can be a toatl mses and you can sitll raed it wouthit porbelm. Tihs is bcuseae we do not raed ervey lteter by it slef but the wrod as a wlohe.

以上着两段话虽然字序被打乱,但是你依然能够很好的理解它们的意思,对不对?这就是大脑并行运算识别的一种智能模式,如果通过程序来模拟这种大脑认知的机制是实现智能机器人的关键之一。还好我们有正则表达式,而正则表达式发明的初衷也是为了模拟神经网络和智能结构。

要以最简易的方式实现一个智能聊天机器人需要哪些关键技术?

关键技术和原理:

1. 中文分词

2. 正则表达式

对输入的一句话应用中文分词解析出关键词,然后应用正则表达式用解析出的关键词并行检索问答库里的问题,计算出匹配程度,问答库中匹配程度最高的一个问题的答案就可以用来应答这句输入的话语。

效果图:

上代码:

<SCRIPT TYPE="TEXT/JAVASCRIPT">function found(keyword){if(W[keyword]==1){return true;}else{return false;}
}//关闭数据库连接
//dataBaseConnectionObject.Close();    //function parseChinese(inputSentence){
//正向关键词最长匹配法//删除待处理字符串头部的空格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 parseChineseBackward(inputSentence){
//逆向关键词最长匹配//删除待处理字符串头部的空格inputSentence=inputSentence.replace(/(^\s+)/,"");var wordMaxLength=7;var resultArray=new Array();var resultString="";var recognizedWords="";//如果输入句长度小于词典词汇长度则令最大长度等于句子长度if(inputSentenceLength<=wordMaxLength){wordMaxLength=inputSentenceLength;}//增加几个空格方便尾部处理,空格数=wordMaxLength-1inputSentence="      "+inputSentence;var inputSentenceLength=inputSentence.length;for(var i=inputSentenceLength-1;i>=wordMaxLength-1;i--){//尾部还需特殊处理for(var j=wordMaxLength;j>=1;j--){var checkword=inputSentence.substr(i-j+1,j);if(found(checkword)){//alert(checkword);recognizedWords+=checkword+",";resultArray.push(checkword);//注意后面需要+1,因为FOR循环会自动j减数1i=i-j+1;break;}else{if(j==1){resultArray.push(checkword);}}}}//翻转结果数组   resultArray.reverse();//处理所得到的结果数组//由于前面的过程会把英文单词分割成字母,现在需要连接起来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 compare(){
//比较任意两句话的话题相关度
//先识别出两个句子的关键词,然后通过比较二者关键词的匹配程度来确定
//核心算法就是matchScore=string1.match(/keyword1/keyword2/keyword3/g)/keywordCount
//也可以直接比较所有分词,那样就是纯字面比较了var matchScore1=0;var matchScore2=0;var string1=document.getElementById("inputString").value;var string2=document.getElementById("inputStringMatch").value;//注意去除字符串中的特殊字符如.*?!,否则匹配结果数值不准string1=string1.replace(/\^|\.|\*|\?|\!|\/|\\|\$|\#|\&|\||,|\[|\]|\{|\}|\(|\)|\-|\+|\=/g," ");string2=string2.replace(/\^|\.|\*|\?|\!|\/|\\|\$|\#|\&|\||,|\[|\]|\{|\}|\(|\)|\-|\+|\=/g," ");var chineseWords1=new parseChinese(string1);var chineseWords2=new parseChinese(string2);var keywordsArray1=chineseWords1.recognizedWordsArray;var keywordsArray2=chineseWords2.recognizedWordsArray;var keywordsString1="#"+keywordsArray1.join("##")+"#";var keywordsStringRegX1="/"+"#"+keywordsArray1.join("#|#")+"#/gi";var keywordsString2="#"+keywordsArray2.join("##")+"#";var keywordsStringRegX2="/"+"#"+keywordsArray2.join("#|#")+"#/gi";var matchArray1=new Array();//用string2的关键词去匹配string1matchArray1=keywordsString1.match(eval(keywordsStringRegX2));var matchArray2=new Array();//用string2的关键词去匹配string1matchArray2=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;}matchScore1=Math.round(matchScore1);matchScore2=Math.round(matchScore2);var scoreMin=Math.min(matchScore1,matchScore2);var scoreMax=Math.max(matchScore1,matchScore2);var msg="[句1]   "+string1+"\n[句2]   "+string2+"\n\n[关键词串1]"+keywordsString1+"\n[关键词串2]"+keywordsString2+"\n\n[正则表达式1] "+keywordsStringRegX1+"\n[正则表达式2] "+keywordsStringRegX2+"\n\n二者话题匹配度:介于 "+scoreMin+"%"+" 到 "+scoreMax+"% 之间";alert(msg);}//
function compareLiteral(){
//比较任意两句话的话题相关度
//先识别出两个句子的关键词,然后通过比较二者关键词的匹配程度来确定
//核心算法就是matchScore=string1.match(/keyword1/keyword2/keyword3/g)/keywordCount
//此处是字面匹配var matchScore1=0;var matchScore2=0;var string1=document.getElementById("inputString").value;var string2=document.getElementById("inputStringMatch").value;//注意去除字符串中的特殊字符如.*?!,否则匹配结果数值不准string1=string1.replace(/\^|\.|\*|\?|\!|\/|\\|\$|\#|\&|\||,|\[|\]|\{|\}|\(|\)|\-|\+|\=/g," ");string2=string2.replace(/\^|\.|\*|\?|\!|\/|\\|\$|\#|\&|\||,|\[|\]|\{|\}|\(|\)|\-|\+|\=/g," ");var chineseWords1=new parseChinese(string1);var chineseWords2=new parseChinese(string2);var keywordsArray1=chineseWords1.resultArray;var keywordsArray2=chineseWords2.resultArray;var keywordsString1="#"+keywordsArray1.join("##")+"#";var keywordsStringRegX1="/"+"#"+keywordsArray1.join("#|#")+"#/gi";var keywordsString2="#"+keywordsArray2.join("##")+"#";var keywordsStringRegX2="/"+"#"+keywordsArray2.join("#|#")+"#/gi";var matchArray1=new Array();//用string2的关键词去匹配string1matchArray1=keywordsString1.match(eval(keywordsStringRegX2));var matchArray2=new Array();//用string2的关键词去匹配string1matchArray2=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;}matchScore1=Math.round(matchScore1);matchScore2=Math.round(matchScore2);var scoreMin=Math.min(matchScore1,matchScore2);var scoreMax=Math.max(matchScore1,matchScore2);var msg="[句1]   "+string1+"\n[句2]   "+string2+"\n\n[关键词串1]"+keywordsString1+"\n[关键词串2]"+keywordsString2+"\n\n[正则表达式1] "+keywordsStringRegX1+"\n[正则表达式2] "+keywordsStringRegX2+"\n\n二者话题匹配度:介于 "+scoreMin+"%"+" 到 "+scoreMax+"% 之间";alert(msg);}///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," ");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,1000);//显示问题的答案到屏幕上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>

中文分词词库以JSON格式存储在ChineseDictionary.js文件中,

类似这样:

//注意:由于数组键名采用中文,文件必须采用UTF-8编码格式保存,否则可能无法识别
//以中文词语作为数组键名极大的简化了后续的操作,是复杂度降低为一步
//词汇来源于百度分词词库部分内容,总词汇量达十多万条var W=new Array();W["印第安纳波利斯"]=1;
W["氧化琥珀酰胆碱"]=1;
W["乌里扬诺夫斯克"]=1;
W["苏克·阿赫拉斯"]=1;
W["水杨酸毒扁豆碱"]=1;
W["圣佩德罗-苏拉"]=1;
W["圣基茨和尼维斯"]=1;
W["瑟伊藻克罗屈尔"]=1;
W["梅尔库里亚丘克"]=1;
W["马斯耶德所罗门"]=1;
W["洛赫吉尔普黑德"]=1;
W["氯甲酸三氯甲酯"]=1;
W["勒姆尼库沃尔恰"]=1;
W["坎星顿-切尔西"]=1;
W["卡加延-德奥罗"]=1;
W["聚乙烯醇缩甲醛"]=1;
W["聚乙烯醇缩丁醛"]=1;
W["甲基丙烯酸甲酯"]=1;
W["磺胺二甲基嘧啶"]=1;
W["哈拉帕恩里克斯"]=1;
W["符拉迪沃斯托克"]=1;
W["二巯基丁二酸钠"]=1;
W["二巯基丙磺酸钠"]=1;
W["多斯格布拉达斯"]=1;
W["布宜诺斯艾利斯"]=1;
W["布拉戈维申斯克"]=1;
W["博斯普鲁斯海峡"]=1;
W["彼得罗扎沃茨克"]=1;
W["安提瓜和巴布达"]=1;

问答库JSON存储在QuestionAndAnswer.js文件中,

类似这样:

//问答集
var QA=new Array();
var QA_Count=QA.length;QA=[//前十个问题用于无法识别时随机应答
{Q:"",A:"有点晕乎"},
{Q:"",A:"抱歉,不是太明白。"},
{Q:"",A:"太高深了,我的理解力有限。"},
{Q:"",A:"真心不懂。"},
{Q:"",A:"此处省略一千字。"},
{Q:"",A:"换个话题好不好?"},
{Q:"",A:"脑筋有点转不过弯来。"},
{Q:"",A:"谈点别的好吗?"},
{Q:"",A:"能否说的更加具体点?"},
{Q:"",A:"让我的思维再飞一会吧。"},//用于英文的识别
{Q:"Hello!",A:"Hi!"},
{Q:"Hi!",A:"Hello!"},
{Q:"Thank you!",A:"You're welcome!"},
{Q:"Thanks!",A:"You're welcome!"},
{Q:"Where are you from?",A:"I'am from China."},
{Q:"How old are you?",A:"I was born with the universe."},
{Q:"What's your name?",A:"My name is Bill"},
{Q:"Good bye!",A:"See you!"},
{Q:"How much?",A:"Invaluable!"},
{Q:"Really?",A:"Really."},
{Q:"Very good!",A:"Wonderful!"},//主要问答记录部分
{Q:"好啊",A:"真爽快"},
{Q:"天地玄黄",A:"宇宙洪荒"},
{Q:"你会说中文吗?",A:"母语当然会说啦。"},
{Q:"你叫什么名字?",A:"一粒马豆。"},
{Q:"你来自于哪里?",A:"我来自宇宙。"},
{Q:"你年龄多大啦?",A:"宇宙诞生时我就已经存在,只不过我的样子一直在变化。"},
{Q:"你要到哪里去?",A:"我要去未来。"},
{Q:"你是人还是机器人?",A:"我一半是人,一半是机器。"},
{Q:"你是谁?",A:"未曾生我谁是我?生我之时我是谁?长大成人方是我,合眼蒙眬又是谁?"},
{Q:"当然啦!",A:"不要想当然。"},
{Q:"正是",A:"是非要分明"},
{Q:"对吗?",A:"其实答案在你内心,你去寻找就可以找到。"},
{Q:"不明觉厉",A:"云里雾里"},
{Q:"今天天气怎样?",A:"不管刮风下雨还是阳光灿烂,我心依旧。"},
{Q:"价格多少?",A:"价值比价格更重要."},
{Q:"你好。",A:"你好、我好、大家都好!"},
{Q:"高兴",A:"心情好什么都好。"},
{Q:"悲剧",A:"悲剧是暂时的,戏剧是永恒的。"},
{Q:"真的假的?",A:"假作真时真亦假"},

JAVASCRIPT实现基于文本的自动智能聊天机器人相关推荐

  1. 基于STM32简易DIY智能聊天机器人

    前言 大二忙里偷闲,花了一个月左右自己利用了Python+ESP8266 DIY 了一个智能聊天机器人,调用的是图灵机器人的体验API,现在把DIY过程记录下来,希望能分享给别的对这方面有兴趣的人. ...

  2. 基于TCP协议实现智能聊天机器人

    文章目录 前言 一.socket是什么? 二.使用步骤 1.服务端 2.客户端 总结 前言 编写聊天程序的服务端代码和客户端代码.完成后,先启动服务端代码,然后启动客户端代码,服务端可以根据客户端发生 ...

  3. 【安卓】安卓Andriod studio 中实现智能聊天机器人

    1.业务需求分析 当你工作比较疲惫时,想看一些笑话或者故事娱乐一下吗?为了更好地调节心情提高生活质量,我们开发了一款基于Android系统的智能聊天机器人,它能够与用户智能对话.如此智能的效果,涉及到 ...

  4. 基于文本语义的智能问答系统以及数据格式应用

    基于文本语义的智能问答系统以及数据格式应用 NLP: 基于文本语义的智能问答系统 应用场景: 智能语音交互,在线客服,知识获取,情感类聊天等 常见的分类:生成型,检索型问答系统: 单论问答,多轮问答系 ...

  5. 基于“机器学习”的智能聊天机器人---python实现(1)

    本博文以自己课程设计为依托,介绍如何利用python语言编程实现基于"机器学习"的智能聊天机器人.由于本项目是自己首次接触python以及利用计算机编程实现小型项目,中途遇到诸多问 ...

  6. 基于“机器学习”智能聊天机器人---python实现(2)

    本博文上接上一篇博文"基于"机器学习"智能聊天机器人---python实现(1)" 博文链接:https://blog.csdn.net/DALEONE/art ...

  7. 基于生成式对话的实时聊天机器人:实现实时聊天机器人与智能交互

    作者:禅与计算机程序设计艺术 基于生成式对话的实时聊天机器人:实现实时聊天机器人与智能交互 "基于生成式对话的实时聊天机器人:实现实时聊天机器人与智能交互" 引言 1.1. 背景介 ...

  8. Python基于AIML智能聊天机器人实战(4)- 机器人自学习能力集成

    一.前言 本文是<Python基于AIML智能聊天机器人实战>第四篇:AIML自学习能力集成: AIML是智能对话机器人具有里程碑意义的开源项目,曾斩获多项国际大奖,是基于检索技术的闲聊式 ...

  9. 【设计方案分享】基于单片机温度监测监控报警系统设计-基于单片机钞票自动智能识别系统设计-基于单片机乒乓球游戏机控制系统设计-基于单片机温度监测监控报警系统设计-基于单片机矩阵键盘的电子密码锁设计

    820基于单片机温度监测监控报警系统设计-设计资料 温度监测器功能描述: 1.主控芯片用的是51单片机(STC89C51). 2.使用温度传感器DS18b20采集温度. 3.用1602液晶显示显示温度 ...

最新文章

  1. python读取csv文件制图-python读取CSV文件
  2. pox 中 openflow.webservice 组建的学习与使用
  3. SpringBoot源码笔记分析
  4. linux 命令 cd -p,Linux_实例讲解Linux中cd命令切换目录的使用技巧,cd命令大家再熟悉不过了,bash sh - phpStudy...
  5. 外国人怎么看祖冲之量子计算机,我国“祖冲之号”量子计算机再次刷新纪录:1.2 小时完成超算 8 年计算量...
  6. mysql 报错从 新安装
  7. python字符串isalnum()函数
  8. 洛谷P1978 集合 [2017年6月计划 数论08]
  9. Qt中使用QtDataVisualization实时绘制雷达点云三维散点图
  10. QT ubuntu下 多画面视频监控播放器rtsp播放器
  11. Springboot毕设项目基于SpringBoot的个人理财系统ibx9hjava+VUE+Mybatis+Maven+Mysql+sprnig)
  12. 概率逗号分号_概率里面的逗号
  13. 代码之外——禅心慧语
  14. html5 video js 播放,H5播放HLS之videojs播放视频
  15. GoF设计模式(不全)
  16. 面试官说:Spring这几个问题你回答下,月薪3万,下周来上班!
  17. 计算机视觉论文-2021-06-24
  18. kali linux教程:配置 Kali 的 apt 命令在线安装包的源为阿里云
  19. JS中onpropertychange事件和onchange事件区别
  20. HTML5 body设置全屏背景图片 如何让body的背景图片自适应整个屏----实战经验 1

热门文章

  1. 关于先有鸡还是先有蛋,终于有正确答案了 1
  2. 员工奖金需要交税吗_员工先进表彰发放现金奖励需要交个税吗
  3. Docer学习(一)
  4. 《算法分析与设计》作业9----最长公共子序列LCS
  5. 千万别活成自己最讨厌的样子
  6. zotero配合坚果云和papership进行文献管理
  7. SSlSocket和SSLServerSocket的学习 jks,bks的使用
  8. 利用composer安装依赖
  9. uniapp预览pdf安卓打不开,可以直接新建commonwebview来跳转外部链接浏览pdf
  10. 【重学前端】CSS(一)