Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function ElizaBot(noRandomFlag) {
- this.noRandom= (noRandomFlag)? true:false;
- this.capitalizeFirstLetter=true;
- this.debug=false;
- this.memSize=20;
- this.version="1.1 (original)";
- if (!this._dataParsed) this._init();
- this.reset();
- }
- ElizaBot.prototype.reset = function() {
- this.quit=false;
- this.mem=[];
- this.lastchoice=[];
- for (var k=0; k<elizaKeywords.length; k++) {
- this.lastchoice[k]=[];
- var rules=elizaKeywords[k][2];
- for (var i=0; i<rules.length; i++) this.lastchoice[k][i]=-1;
- }
- }
- ElizaBot.prototype._dataParsed = false;
- ElizaBot.prototype._init = function() {
- // parse data and convert it from canonical form to internal use
- // prodoce synonym list
- var synPatterns={};
- if ((elizaSynons) && (typeof elizaSynons == 'object')) {
- for (var i in elizaSynons) synPatterns[i]='('+i+'|'+elizaSynons[i].join('|')+')';
- }
- // check for keywords or install empty structure to prevent any errors
- if ((!elizaKeywords) || (typeof elizaKeywords.length == 'undefined')) {
- elizaKeywords=[['###',0,[['###',[]]]]];
- }
- // 1st convert rules to regexps
- // expand synonyms and insert asterisk expressions for backtracking
- var sre=/@(\S+)/;
- var are=/(\S)\s*\*\s*(\S)/;
- var are1=/^\s*\*\s*(\S)/;
- var are2=/(\S)\s*\*\s*$/;
- var are3=/^\s*\*\s*$/;
- var wsre=/\s+/g;
- for (var k=0; k<elizaKeywords.length; k++) {
- var rules=elizaKeywords[k][2];
- elizaKeywords[k][3]=k; // save original index for sorting
- for (var i=0; i<rules.length; i++) {
- var r=rules[i];
- // check mem flag and store it as decomp's element 2
- if (r[0].charAt(0)=='$') {
- var ofs=1;
- while (r[0].charAt[ofs]==' ') ofs++;
- r[0]=r[0].substring(ofs);
- r[2]=true;
- }
- else {
- r[2]=false;
- }
- // expand synonyms (v.1.1: work around lambda function)
- var m=sre.exec(r[0]);
- while (m) {
- var sp=(synPatterns[m[1]])? synPatterns[m[1]]:m[1];
- r[0]=r[0].substring(0,m.index)+sp+r[0].substring(m.index+m[0].length);
- m=sre.exec(r[0]);
- }
- // expand asterisk expressions (v.1.1: work around lambda function)
- if (are3.test(r[0])) {
- r[0]='\\s*(.*)\\s*';
- }
- else {
- m=are.exec(r[0]);
- if (m) {
- var lp='';
- var rp=r[0];
- while (m) {
- lp+=rp.substring(0,m.index+1);
- if (m[1]!=')') lp+='\\b';
- lp+='\\s*(.*)\\s*';
- if ((m[2]!='(') && (m[2]!='\\')) lp+='\\b';
- lp+=m[2];
- rp=rp.substring(m.index+m[0].length);
- m=are.exec(rp);
- }
- r[0]=lp+rp;
- }
- m=are1.exec(r[0]);
- if (m) {
- var lp='\\s*(.*)\\s*';
- if ((m[1]!=')') && (m[1]!='\\')) lp+='\\b';
- r[0]=lp+r[0].substring(m.index-1+m[0].length);
- }
- m=are2.exec(r[0]);
- if (m) {
- var lp=r[0].substring(0,m.index+1);
- if (m[1]!='(') lp+='\\b';
- r[0]=lp+'\\s*(.*)\\s*';
- }
- }
- // expand white space
- r[0]=r[0].replace(wsre, '\\s+');
- wsre.lastIndex=0;
- }
- }
- // now sort keywords by rank (highest first)
- elizaKeywords.sort(this._sortKeywords);
- // and compose regexps and refs for pres and posts
- ElizaBot.prototype.pres={};
- ElizaBot.prototype.posts={};
- if ((elizaPres) && (elizaPres.length)) {
- var a=new Array();
- for (var i=0; i<elizaPres.length; i+=2) {
- a.push(elizaPres[i]);
- ElizaBot.prototype.pres[elizaPres[i]]=elizaPres[i+1];
- }
- ElizaBot.prototype.preExp = new RegExp('\\b('+a.join('|')+')\\b');
- }
- else {
- // default (should not match)
- ElizaBot.prototype.preExp = /####/;
- ElizaBot.prototype.pres['####']='####';
- }
- if ((elizaPosts) && (elizaPosts.length)) {
- var a=new Array();
- for (var i=0; i<elizaPosts.length; i+=2) {
- a.push(elizaPosts[i]);
- ElizaBot.prototype.posts[elizaPosts[i]]=elizaPosts[i+1];
- }
- ElizaBot.prototype.postExp = new RegExp('\\b('+a.join('|')+')\\b');
- }
- else {
- // default (should not match)
- ElizaBot.prototype.postExp = /####/;
- ElizaBot.prototype.posts['####']='####';
- }
- // check for elizaQuits and install default if missing
- if ((!elizaQuits) || (typeof elizaQuits.length == 'undefined')) {
- elizaQuits=[];
- }
- // done
- ElizaBot.prototype._dataParsed=true;
- }
- ElizaBot.prototype._sortKeywords = function(a,b) {
- // sort by rank
- if (a[1]>b[1]) return -1
- else if (a[1]<b[1]) return 1
- // or original index
- else if (a[3]>b[3]) return 1
- else if (a[3]<b[3]) return -1
- else return 0;
- }
- ElizaBot.prototype.transform = function(text) {
- var rpl='';
- this.quit=false;
- // unify text string
- text=text.toLowerCase();
- text=text.replace(/@#\$%\^&\*\(\)_\+=~`\{\[\}\]\|:;<>\/\\\t/g, ' ');
- text=text.replace(/\s+-+\s+/g, '.');
- text=text.replace(/\s*[,\.\?!;]+\s*/g, '.');
- text=text.replace(/\s*\bbut\b\s*/g, '.');
- text=text.replace(/\s{2,}/g, ' ');
- // split text in part sentences and loop through them
- var parts=text.split('.');
- for (var i=0; i<parts.length; i++) {
- var part=parts[i];
- if (part!='') {
- // check for quit expression
- for (var q=0; q<elizaQuits.length; q++) {
- if (elizaQuits[q]==part) {
- this.quit=true;
- return this.getFinal();
- }
- }
- // preprocess (v.1.1: work around lambda function)
- var m=this.preExp.exec(part);
- if (m) {
- var lp='';
- var rp=part;
- while (m) {
- lp+=rp.substring(0,m.index)+this.pres[m[1]];
- rp=rp.substring(m.index+m[0].length);
- m=this.preExp.exec(rp);
- }
- part=lp+rp;
- }
- this.sentence=part;
- // loop trough keywords
- for (var k=0; k<elizaKeywords.length; k++) {
- if (part.search(new RegExp('\\b'+elizaKeywords[k][0]+'\\b', 'i'))>=0) {
- rpl = this._execRule(k);
- }
- if (rpl!='') return rpl;
- }
- }
- }
- // nothing matched try mem
- rpl=this._memGet();
- // if nothing in mem, so try xnone
- if (rpl=='') {
- this.sentence=' ';
- var k=this._getRuleIndexByKey('xnone');
- if (k>=0) rpl=this._execRule(k);
- }
- // return reply or default string
- return (rpl!='')? rpl : 'I am at a loss for words.';
- }
- ElizaBot.prototype._execRule = function(k) {
- var rule=elizaKeywords[k];
- var decomps=rule[2];
- var paramre=/\(([0-9]+)\)/;
- for (var i=0; i<decomps.length; i++) {
- var m=this.sentence.match(decomps[i][0]);
- if (m!=null) {
- var reasmbs=decomps[i][1];
- var memflag=decomps[i][2];
- var ri= (this.noRandom)? 0 : Math.floor(Math.random()*reasmbs.length);
- if (((this.noRandom) && (this.lastchoice[k][i]>ri)) || (this.lastchoice[k][i]==ri)) {
- ri= ++this.lastchoice[k][i];
- if (ri>=reasmbs.length) {
- ri=0;
- this.lastchoice[k][i]=-1;
- }
- }
- else {
- this.lastchoice[k][i]=ri;
- }
- var rpl=reasmbs[ri];
- if (this.debug) alert('match:\nkey: '+elizaKeywords[k][0]+
- '\nrank: '+elizaKeywords[k][1]+
- '\ndecomp: '+decomps[i][0]+
- '\nreasmb: '+rpl+
- '\nmemflag: '+memflag);
- if (rpl.search('^goto ', 'i')==0) {
- ki=this._getRuleIndexByKey(rpl.substring(5));
- if (ki>=0) return this._execRule(ki);
- }
- // substitute positional params (v.1.1: work around lambda function)
- var m1=paramre.exec(rpl);
- if (m1) {
- var lp='';
- var rp=rpl;
- while (m1) {
- var param = m[parseInt(m1[1])];
- // postprocess param
- var m2=this.postExp.exec(param);
- if (m2) {
- var lp2='';
- var rp2=param;
- while (m2) {
- lp2+=rp2.substring(0,m2.index)+this.posts[m2[1]];
- rp2=rp2.substring(m2.index+m2[0].length);
- m2=this.postExp.exec(rp2);
- }
- param=lp2+rp2;
- }
- lp+=rp.substring(0,m1.index)+param;
- rp=rp.substring(m1.index+m1[0].length);
- m1=paramre.exec(rp);
- }
- rpl=lp+rp;
- }
- rpl=this._postTransform(rpl);
- if (memflag) this._memSave(rpl)
- else return rpl;
- }
- }
- return '';
- }
- ElizaBot.prototype._postTransform = function(s) {
- // final cleanings
- s=s.replace(/\s{2,}/g, ' ');
- s=s.replace(/\s+\./g, '.');
- if ((elizaPostTransforms) && (elizaPostTransforms.length)) {
- for (var i=0; i<elizaPostTransforms.length; i+=2) {
- s=s.replace(elizaPostTransforms[i], elizaPostTransforms[i+1]);
- elizaPostTransforms[i].lastIndex=0;
- }
- }
- // capitalize first char (v.1.1: work around lambda function)
- if (this.capitalizeFirstLetter) {
- var re=/^([a-z])/;
- var m=re.exec(s);
- if (m) s=m[0].toUpperCase()+s.substring(1);
- }
- return s;
- }
- ElizaBot.prototype._getRuleIndexByKey = function(key) {
- for (var k=0; k<elizaKeywords.length; k++) {
- if (elizaKeywords[k][0]==key) return k;
- }
- return -1;
- }
- ElizaBot.prototype._memSave = function(t) {
- this.mem.push(t);
- if (this.mem.length>this.memSize) this.mem.shift();
- }
- ElizaBot.prototype._memGet = function() {
- if (this.mem.length) {
- if (this.noRandom) return this.mem.shift();
- else {
- var n=Math.floor(Math.random()*this.mem.length);
- var rpl=this.mem[n];
- for (var i=n+1; i<this.mem.length; i++) this.mem[i-1]=this.mem[i];
- this.mem.length--;
- return rpl;
- }
- }
- else return '';
- }
- ElizaBot.prototype.getFinal = function() {
- return elizaFinals[Math.floor(Math.random()*elizaFinals.length)];
- }
- ElizaBot.prototype.getInitial = function() {
- return elizaInitials[Math.floor(Math.random()*elizaInitials.length)];
- }
- // fix array.prototype methods (push, shift) if not implemented (MSIE fix)
- if (typeof Array.prototype.push == 'undefined') {
- Array.prototype.push=function(v) { return this[this.length]=v; };
- }
- if (typeof Array.prototype.shift == 'undefined') {
- Array.prototype.shift=function() {
- if (this.length==0) return null;
- var e0=this[0];
- for (var i=1; i<this.length; i++) this[i-1]=this[i];
- this.length--;
- return e0;
- };
- }
- // data for elizabot.js
- // entries prestructured as layed out in Weizenbaum's description
- // [cf: Communications of the ACM, Vol. 9, #1 (January 1966): p 36-45.]
- var elizaInitials = [
- "How do you do. Please tell me your problem.",
- // additions (not original)
- "Please tell me what's been bothering you.",
- "Is something troubling you ?"
- ];
- var elizaFinals = [
- "Goodbye. It was nice talking to you.",
- // additions (not original)
- "Goodbye. This was really a nice talk.",
- "Goodbye. I'm looking forward to our next session.",
- "This was a good session, wasn't it -- but time is over now. Goodbye.",
- "Maybe we could discuss this moreover in our next session ? Goodbye."
- ];
- var elizaQuits = [
- "bye",
- "goodbye",
- "done",
- "exit",
- "quit"
- ];
- var elizaPres = [
- "dont", "don't",
- "cant", "can't",
- "wont", "won't",
- "recollect", "remember",
- "recall", "remember",
- "dreamt", "dreamed",
- "dreams", "dream",
- "maybe", "perhaps",
- "certainly", "yes",
- "machine", "computer",
- "machines", "computer",
- "computers", "computer",
- "were", "was",
- "you're", "you are",
- "i'm", "i am",
- "same", "alike",
- "identical", "alike",
- "equivalent", "alike"
- ];
- var elizaPosts = [
- "am", "are",
- "your", "my",
- "me", "you",
- "myself", "yourself",
- "yourself", "myself",
- "i", "you",
- "you", "I",
- "my", "your",
- "i'm", "you are"
- ];
- var elizaSynons = {
- "be": ["am", "is", "are", "was"],
- "belief": ["feel", "think", "believe", "wish"],
- "cannot": ["can't"],
- "desire": ["want", "need"],
- "everyone": ["everybody", "nobody", "noone"],
- "family": ["mother", "mom", "father", "dad", "sister", "brother", "wife", "children", "child"],
- "happy": ["elated", "glad", "better"],
- "sad": ["unhappy", "depressed", "sick"]
- };
- var elizaKeywords = [
- /*
- Array of
- ["<key>", <rank>, [
- ["<decomp>", [
- "<reasmb>",
- "<reasmb>",
- "<reasmb>"
- ]],
- ["<decomp>", [
- "<reasmb>",
- "<reasmb>",
- "<reasmb>"
- ]]
- ]]
- */
- ["xnone", 0, [
- ["*", [
- "I'm not sure I understand you fully.",
- "Please go on.",
- "What does that suggest to you ?",
- "Do you feel strongly about discussing such things ?",
- "That is interesting. Please continue.",
- "Tell me more about that.",
- "Does talking about this bother you ?"
- ]]
- ]],
- ["sorry", 0, [
- ["*", [
- "Please don't apologise.",
- "Apologies are not necessary.",
- "I've told you that apologies are not required.",
- "It did not bother me. Please continue."
- ]]
- ]],
- ["apologise", 0, [
- ["*", [
- "goto sorry"
- ]]
- ]],
- ["remember", 5, [
- ["* i remember *", [
- "Do you often think of (2) ?",
- "Does thinking of (2) bring anything else to mind ?",
- "What else do you recollect ?",
- "Why do you remember (2) just now ?",
- "What in the present situation reminds you of (2) ?",
- "What is the connection between me and (2) ?",
- "What else does (2) remind you of ?"
- ]],
- ["* do you remember *", [
- "Did you think I would forget (2) ?",
- "Why do you think I should recall (2) now ?",
- "What about (2) ?",
- "goto what",
- "You mentioned (2) ?"
- ]],
- ["* you remember *", [
- "How could I forget (2) ?",
- "What about (2) should I remember ?",
- "goto you"
- ]]
- ]],
- ["forget", 5, [
- ["* i forget *", [
- "Can you think of why you might forget (2) ?",
- "Why can't you remember (2) ?",
- "How often do you think of (2) ?",
- "Does it bother you to forget that ?",
- "Could it be a mental block ?",
- "Are you generally forgetful ?",
- "Do you think you are suppressing (2) ?"
- ]],
- ["* did you forget *", [
- "Why do you ask ?",
- "Are you sure you told me ?",
- "Would it bother you if I forgot (2) ?",
- "Why should I recall (2) just now ?",
- "goto what",
- "Tell me more about (2)."
- ]]
- ]],
- ["if", 3, [
- ["* if *", [
- "Do you think it's likely that (2) ?",
- "Do you wish that (2) ?",
- "What do you know about (2) ?",
- "Really, if (2) ?",
- "What would you do if (2) ?",
- "But what are the chances that (2) ?",
- "What does this speculation lead to ?"
- ]]
- ]],
- ["dreamed", 4, [
- ["* i dreamed *", [
- "Really, (2) ?",
- "Have you ever fantasized (2) while you were awake ?",
- "Have you ever dreamed (2) before ?",
- "goto dream"
- ]]
- ]],
- ["dream", 3, [
- ["*", [
- "What does that dream suggest to you ?",
- "Do you dream often ?",
- "What persons appear in your dreams ?",
- "Do you believe that dreams have something to do with your problem ?"
- ]]
- ]],
- ["perhaps", 0, [
- ["*", [
- "You don't seem quite certain.",
- "Why the uncertain tone ?",
- "Can't you be more positive ?",
- "You aren't sure ?",
- "Don't you know ?",
- "How likely, would you estimate ?"
- ]]
- ]],
- ["name", 15, [
- ["*", [
- "I am not interested in names.",
- "I've told you before, I don't care about names -- please continue."
- ]]
- ]],
- ["deutsch", 0, [
- ["*", [
- "goto xforeign",
- "I told you before, I don't understand German."
- ]]
- ]],
- ["francais", 0, [
- ["*", [
- "goto xforeign",
- "I told you before, I don't understand French."
- ]]
- ]],
- ["italiano", 0, [
- ["*", [
- "goto xforeign",
- "I told you before, I don't understand Italian."
- ]]
- ]],
- ["espanol", 0, [
- ["*", [
- "goto xforeign",
- "I told you before, I don't understand Spanish."
- ]]
- ]],
- ["xforeign", 0, [
- ["*", [
- "I speak only English."
- ]]
- ]],
- ["hello", 0, [
- ["*", [
- "How do you do. Please state your problem.",
- "Hi. What seems to be your problem ?"
- ]]
- ]],
- ["computer", 50, [
- ["*", [
- "Do computers worry you ?",
- "Why do you mention computers ?",
- "What do you think machines have to do with your problem ?",
- "Don't you think computers can help people ?",
- "What about machines worries you ?",
- "What do you think about machines ?",
- "You don't think I am a computer program, do you ?"
- ]]
- ]],
- ["am", 0, [
- ["* am i *", [
- "Do you believe you are (2) ?",
- "Would you want to be (2) ?",
- "Do you wish I would tell you you are (2) ?",
- "What would it mean if you were (2) ?",
- "goto what"
- ]],
- ["* i am *", [
- "goto i"
- ]],
- ["*", [
- "Why do you say 'am' ?",
- "I don't understand that."
- ]]
- ]],
- ["are", 0, [
- ["* are you *", [
- "Why are you interested in whether I am (2) or not ?",
- "Would you prefer if I weren't (2) ?",
- "Perhaps I am (2) in your fantasies.",
- "Do you sometimes think I am (2) ?",
- "goto what",
- "Would it matter to you ?",
- "What if I were (2) ?"
- ]],
- ["* you are *", [
- "goto you"
- ]],
- ["* are *", [
- "Did you think they might not be (2) ?",
- "Would you like it if they were not (2) ?",
- "What if they were not (2) ?",
- "Are they always (2) ?",
- "Possibly they are (2).",
- "Are you positive they are (2) ?"
- ]]
- ]],
- ["your", 0, [
- ["* your *", [
- "Why are you concerned over my (2) ?",
- "What about your own (2) ?",
- "Are you worried about someone else's (2) ?",
- "Really, my (2) ?",
- "What makes you think of my (2) ?",
- "Do you want my (2) ?"
- ]]
- ]],
- ["was", 2, [
- ["* was i *", [
- "What if you were (2) ?",
- "Do you think you were (2) ?",
- "Were you (2) ?",
- "What would it mean if you were (2) ?",
- "What does ' (2) ' suggest to you ?",
- "goto what"
- ]],
- ["* i was *", [
- "Were you really ?",
- "Why do you tell me you were (2) now ?",
- "Perhaps I already know you were (2)."
- ]],
- ["* was you *", [
- "Would you like to believe I was (2) ?",
- "What suggests that I was (2) ?",
- "What do you think ?",
- "Perhaps I was (2).",
- "What if I had been (2) ?"
- ]]
- ]],
- ["i", 0, [
- ["* i @desire *", [
- "What would it mean to you if you got (3) ?",
- "Why do you want (3) ?",
- "Suppose you got (3) soon.",
- "What if you never got (3) ?",
- "What would getting (3) mean to you ?",
- "What does wanting (3) have to do with this discussion ?"
- ]],
- ["* i am* @sad *", [
- "I am sorry to hear that you are (3).",
- "Do you think coming here will help you not to be (3) ?",
- "I'm sure it's not pleasant to be (3).",
- "Can you explain what made you (3) ?"
- ]],
- ["* i am* @happy *", [
- "How have I helped you to be (3) ?",
- "Has your treatment made you (3) ?",
- "What makes you (3) just now ?",
- "Can you explain why you are suddenly (3) ?"
- ]],
- ["* i was *", [
- "goto was"
- ]],
- ["* i @belief i *", [
- "Do you really think so ?",
- "But you are not sure you (3).",
- "Do you really doubt you (3) ?"
- ]],
- ["* i* @belief *you *", [
- "goto you"
- ]],
- ["* i am *", [
- "Is it because you are (2) that you came to me ?",
- "How long have you been (2) ?",
- "Do you believe it is normal to be (2) ?",
- "Do you enjoy being (2) ?",
- "Do you know anyone else who is (2) ?"
- ]],
- ["* i @cannot *", [
- "How do you know that you can't (3) ?",
- "Have you tried ?",
- "Perhaps you could (3) now.",
- "Do you really want to be able to (3) ?",
- "What if you could (3) ?"
- ]],
- ["* i don't *", [
- "Don't you really (2) ?",
- "Why don't you (2) ?",
- "Do you wish to be able to (2) ?",
- "Does that trouble you ?"
- ]],
- ["* i feel *", [
- "Tell me more about such feelings.",
- "Do you often feel (2) ?",
- "Do you enjoy feeling (2) ?",
- "Of what does feeling (2) remind you ?"
- ]],
- ["* i * you *", [
- "Perhaps in your fantasies we (2) each other.",
- "Do you wish to (2) me ?",
- "You seem to need to (2) me.",
- "Do you (2) anyone else ?"
- ]],
- ["*", [
- "You say (1) ?",
- "Can you elaborate on that ?",
- "Do you say (1) for some special reason ?",
- "That's quite interesting."
- ]]
- ]],
- ["you", 0, [
- ["* you remind me of *", [
- "goto alike"
- ]],
- ["* you are *", [
- "What makes you think I am (2) ?",
- "Does it please you to believe I am (2) ?",
- "Do you sometimes wish you were (2) ?",
- "Perhaps you would like to be (2)."
- ]],
- ["* you* me *", [
- "Why do you think I (2) you ?",
- "You like to think I (2) you -- don't you ?",
- "What makes you think I (2) you ?",
- "Really, I (2) you ?",
- "Do you wish to believe I (2) you ?",
- "Suppose I did (2) you -- what would that mean ?",
- "Does someone else believe I (2) you ?"
- ]],
- ["* you *", [
- "We were discussing you -- not me.",
- "Oh, I (2) ?",
- "You're not really talking about me -- are you ?",
- "What are your feelings now ?"
- ]]
- ]],
- ["yes", 0, [
- ["*", [
- "You seem to be quite positive.",
- "You are sure.",
- "I see.",
- "I understand."
- ]]
- ]],
- ["no", 0, [
- ["* no one *", [
- "Are you sure, no one (2) ?",
- "Surely someone (2) .",
- "Can you think of anyone at all ?",
- "Are you thinking of a very special person ?",
- "Who, may I ask ?",
- "You have a particular person in mind, don't you ?",
- "Who do you think you are talking about ?"
- ]],
- ["*", [
- "Are you saying no just to be negative?",
- "You are being a bit negative.",
- "Why not ?",
- "Why 'no' ?"
- ]]
- ]],
- ["my", 2, [
- ["$ * my *", [
- "Does that have anything to do with the fact that your (2) ?",
- "Lets discuss further why your (2).",
- "Earlier you said your (2).",
- "But your (2)."
- ]],
- ["* my* @family *", [
- "Tell me more about your family.",
- "Who else in your family (4) ?",
- "Your (3) ?",
- "What else comes to your mind when you think of your (3) ?"
- ]],
- ["* my *", [
- "Your (2) ?",
- "Why do you say your (2) ?",
- "Does that suggest anything else which belongs to you ?",
- "Is it important to you that your (2) ?"
- ]]
- ]],
- ["can", 0, [
- ["* can you *", [
- "You believe I can (2) don't you ?",
- "goto what",
- "You want me to be able to (2).",
- "Perhaps you would like to be able to (2) yourself."
- ]],
- ["* can i *", [
- "Whether or not you can (2) depends on you more than on me.",
- "Do you want to be able to (2) ?",
- "Perhaps you don't want to (2).",
- "goto what"
- ]]
- ]],
- ["what", 0, [
- ["*", [
- "Why do you ask ?",
- "Does that question interest you ?",
- "What is it you really want to know ?",
- "Are such questions much on your mind ?",
- "What answer would please you most ?",
- "What do you think ?",
- "What comes to mind when you ask that ?",
- "Have you asked such questions before ?",
- "Have you asked anyone else ?"
- ]]
- ]],
- ["who", 0, [
- ["who *", [
- "goto what"
- ]]
- ]],
- ["when", 0, [
- ["when *", [
- "goto what"
- ]]
- ]],
- ["where", 0, [
- ["where *", [
- "goto what"
- ]]
- ]],
- ["how", 0, [
- ["how *", [
- "goto what"
- ]]
- ]],
- ["because", 0, [
- ["*", [
- "Is that the real reason ?",
- "Don't any other reasons come to mind ?",
- "Does that reason seem to explain anything else ?",
- "What other reasons might there be ?"
- ]]
- ]],
- ["why", 0, [
- ["* why don't you *", [
- "Do you believe I don't (2) ?",
- "Perhaps I will (2) in good time.",
- "Should you (2) yourself ?",
- "You want me to (2) ?",
- "goto what"
- ]],
- ["* why can't i *", [
- "Do you think you should be able to (2) ?",
- "Do you want to be able to (2) ?",
- "Do you believe this will help you to (2) ?",
- "Have you any idea why you can't (2) ?",
- "goto what"
- ]],
- ["*", [
- "goto what"
- ]]
- ]],
- ["everyone", 2, [
- ["* @everyone *", [
- "Really, (2) ?",
- "Surely not (2).",
- "Can you think of anyone in particular ?",
- "Who, for example?",
- "Are you thinking of a very special person ?",
- "Who, may I ask ?",
- "Someone special perhaps ?",
- "You have a particular person in mind, don't you ?",
- "Who do you think you're talking about ?"
- ]]
- ]],
- ["everybody", 2, [
- ["*", [
- "goto everyone"
- ]]
- ]],
- ["nobody", 2, [
- ["*", [
- "goto everyone"
- ]]
- ]],
- ["noone", 2, [
- ["*", [
- "goto everyone"
- ]]
- ]],
- ["always", 1, [
- ["*", [
- "Can you think of a specific example ?",
- "When ?",
- "What incident are you thinking of ?",
- "Really, always ?"
- ]]
- ]],
- ["alike", 10, [
- ["*", [
- "In what way ?",
- "What resemblence do you see ?",
- "What does that similarity suggest to you ?",
- "What other connections do you see ?",
- "What do you suppose that resemblence means ?",
- "What is the connection, do you suppose ?",
- "Could there really be some connection ?",
- "How ?"
- ]]
- ]],
- ["like", 10, [
- ["* @be *like *", [
- "goto alike"
- ]]
- ]],
- ["different", 0, [
- ["*", [
- "How is it different ?",
- "What differences do you see ?",
- "What does that difference suggest to you ?",
- "What other distinctions do you see ?",
- "What do you suppose that disparity means ?",
- "Could there be some connection, do you suppose ?",
- "How ?"
- ]]
- ]]
- ];
- // regexp/replacement pairs to be performed as final cleanings
- // here: cleanings for multiple bots talking to each other
- var elizaPostTransforms = [
- / old old/g, " old",
- /\bthey were( not)? me\b/g, "it was$1 me",
- /\bthey are( not)? me\b/g, "it is$1 me",
- /Are they( always)? me\b/, "it is$1 me",
- /\bthat your( own)? (\w+)( now)? \?/, "that you have your$1 $2 ?",
- /\bI to have (\w+)/, "I have $1",
- /Earlier you said your( own)? (\w+)( now)?\./, "Earlier you talked about your $2."
- ];
- $s = jQuery('#s');
- var iReplied = false;
- var lastMsg = '';
- var liz = new ElizaBot();
- function introduce () {
- var t = liz.getInitial();
- $s.val(t);
- send();
- iReplied = true;
- }
- function bye () {
- var t = liz.getFinal();
- $s.val(t);
- send();
- iReplied = true;
- }
- bye();
- function reply (msg) {
- var t = liz.transform(msg);
- console.log('Reply');
- $s.val(t);
- send();
- iReplied = true;
- }
- function checkChanges () {
- var txt = jQuery('.messagetext').last().text();
- console.log(txt, lastMsg);
- if (!lastMsg) {
- introduce();
- } else {
- if (txt !== lastMsg) {
- if (iReplied) {
- iReplied = false;
- } else {
- reply(txt);
- }
- }
- }
- lastMsg = txt;
- setTimeout(function () {
- checkChanges();
- }, 1000);
- }
- checkChanges();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement