hier hab ich einen richtigen eliza (sind zwar ein paar scriptfehler drin, die lassen sich aber einfach korrigieren)
<!doctype html public "-//W3C//DTD HTML 4.0 //EN"> <html> <head>
<title>Eliza</title>
<script language="JavaScript"> <!--
// Wird beim Laden aufgerufen. Initialisiert das Vokabular, gibt Standartmeldung aus // und gibt dem Editor den Focus.
InitVocabular() SayHello() window.document.Eliza.talkedit.focus()
// Initialisiert Vokabular
function InitVocabular() { LastReplyOn = ''"; Greetings = ['Guten Tag, mein Name ist Eliza. Wie geht es ihnen?', 'Guten Tag, ich bin Eliza. Wie fühlen sie sich?', 'Mein Name ist Eliza. Was ist ihr Problem?', 'Guten Tag, ich bin Eliza. Wie ist ihre momentane Verfassung?', 'Ich heisse Eliza. Haben sie Probleme?'] DontUnderstand = ['Könnten sie bitte etwas deutlicher reden.', 'Lauter bitte!!!', 'Ich habe sie akkustisch nicht verstanden.'] DontAsk = ['Lassen sie mich die Fragen stellen.'] Grammar = ['Können sie sich auch in ganzen Sätzen ausdrücken?'] DontRepeat = ['Sie wiederholen sich!','Das haben sie bereits gesagt!'] ComplexAnswerQ = ['Wissen sie, warum', 'Ist es nicht etwas unnatürlich, dass', 'Wollen sie sagen, dass', 'Sie glauben wirklich, dass', 'Sind sie sicher, dass'] ComplexAnswerA = ['Ich bezweifele stark, dass', 'Es kann so nicht weitergehen, dass', 'Ich verstehe nicht, warum', 'Es ist doch nicht schlimm, dass'] Intressting = ['Interresant.', 'Wirklich?', 'Ist das der wahre Grund?'] DontScream = ['Warum schreien sie denn so???', 'Beruhigen sie sich!', 'Bleiben sie ruhig!'] Possesiv = /^MEIN\b|^DEIN\b|^MEINE\b|^DEINE\b|^MEINEN\b|^DEINEN\b|^MEINEM\b|^DEINEM\b|^SEIN\b|^SEINE\b|^SEINEN\b|^SEINEM\b|^IHR\b|^IHRE\b|^IHREN\b|^IHREM\b/ Keywords = [ [ [/^WESHALB\b|^WARUM\b|^WANN\b|^WIE\b|^WIESO\b|^WER\b|^WAS\b/], ['Lassen sie mich die Fragen stellen.'],1], [ [/^VIELLEICHT\b|^JEIN\b/], ['Warum sind sie so unentschlossen?','Ja oder nein?', 'Entscheiden sie sich!'],1], [ [/^JA\b|^DOCH\b/], ['Erzählen sie mir mehr davon.'],1], [ [/^GENAU\b|^FEIN\b|^GUT\b|^OKAY\b|^GUT\b/], ['Gut. Zurück zu ihrem Problem.'],1], [ [/^NEIN\b|^NÖ+\b/], ['Warum sind sie so negativ?','Warum nicht?','Sicher?'],1], [ [/^HAHA|^HA\b|^HIHI/], ['Warum lachen sie?'],1], [ [/^WEIL\b/], ['Das ist ein Argument!','Das sehe ich ein.','Aha.', 'Ja, ich verstehe.','So?'],1], [ [/^BYE\b|^TSCHÜSS\b|^AUF WIEDERSEHEN\b|^BIS MORGEN\b/], ['Sie wollen doch nicht schon gehen?','Einen Augenblick noch.', 'Sie können noch nicht gehen.','Wollen sie nicht noch bleiben?'],1], [ [/^DARF ICH\b/], ['Nur zu.','Wenn sie wollen.','Tun sie sich keinen Zwang an.'],1], [ [/^KANN ICH\b/], ['Wollen sie es denn können?','Vielleicht willst du es gar nicht?'],1], [ [/^MUSS ICH\b/], ['Ich zwinge sie zu nichts.'],1], [ [/^HALLO\b|^HI\b|^SERVUS\b|^GUTEN TAG\b/], ['Hallo.','Hi!','Guten Tag.'],1 ], [ [/\bMEIN BRUDER\b|\bMEINE SCHWESTER\b|\bMEIN VATER\b/, /\bMEINE MUTTER\b|\bMEIN SOHN\b|\bMEINE TOCHTER\b/], ['Erzählen sie mir mehr von ihrer Familie.'],3 ], [ [/\bCOMPUTER|\bMASCHINE/], ['Beunruhigen Maschinen dich?', 'Glaubst du nicht, dass Maschinen den Menschen helfen können?'],2 ], [ [/\bNIEMAND\b/], ['Sicher niemand?', 'Überhaupt keiner?'],2 ], [ [/\bIMMER\b/], ['Wirklich immer?', 'Können sie mir ein Beispiel nennen?'],3 ], [ [/\bTRAUM\b|\bTRÄUME\b/], ['Träumen sie oft?', 'Sind die Träume der Grund für ihre Probleme?'],1] ] }
// Lässt jemanden etwas sagen und löscht ggf. obere Zeilen
function Say(Who, SayWhat) { window.document.Eliza.elizachat.value = window.document.Eliza.elizachat.value + '\n' + Who + ': ' + SayWhat window.document.Eliza.talkedit.value = ''" window.document.Eliza.talkedit.focus() while (GetLines()>20) { DeleteTopLine() } }
// Lässt Eliza auf etwas antworten
function Answer(ReplyOn) {
// ggf. "Etwas lauter bitte!!!" o.ä. ausgeben
if (ReplyOn == '') return (Eliza(DontUnderstand[Math.floor(Math.random() * DontUnderstand.length)]))
// ggf. "Warum schreien sie denn so???" o.ä. ausgeben
if (ReplyOn == ReplyOn.toUpperCase()) return (Eliza(DontScream[Math.floor(Math.random() * DontScream.length)]))
// Leerzeichen am Ende der Zeile löschen
while (ReplyOn.charAt(ReplyOn.length-1) == ' ') ReplyOn = ReplyOn.slice(0, ReplyOn.length-1)
// Leerzeichen am Anfang der Zeile löschen
while (ReplyOn.charAt(0) == ' ') ReplyOn = ReplyOn.slice(1)
// Meerfache Leerzeichen zwischen den Wörtern löschen
while (ReplyOn.search(/ /) != -1) ReplyOn = ReplyOn.replace(/ /,' ')
// Fragezeichen?
Question = 0
if (ReplyOn.search(/[?]/) != -1) Question = 1
// Satzzeichen entfernen
while (ReplyOn.search(/[!.,?;:]/) != -1) ReplyOn = ReplyOn.replace(/[!.,?;:]/,'')
// Wiederholung checken
if (ReplyOn == LastReplyOn) return (Eliza(DontRepeat[Math.floor(Math.random() * DontRepeat.length)]))
LastReplyOn = ReplyOn
// Keywords durchgehen und ggf. antworten
for(i = 0; i <= Keywords.length-1; i++) for(k = 0; k <= Keywords[i][0].length-1; k++) if (ReplyOn.toUpperCase().search(Keywords[i][0][k]) != -1) if (Math.floor(Math.random() * Keywords[i][2]) == 0) return(Eliza(Keywords[i][1][Math.floor(Math.random()*Keywords[i][1].length)]))
// ggf. "Lassen sie mich die Fragen stellen." ausgeben
if (Question == 1) return (Eliza(DontAsk[Math.floor(Math.random() * DontAsk.length)]))
// In Wörter aufteilen
temp = ReplyOn + ' ' words = [] while (temp.search(/ /) != -1) { words.push(temp.slice(0,temp.search(/ /))) temp = temp.slice(temp.search(/ /)+1) }
// ggf. "Können sie sich auch in ganzen Sätzen ausdrücken?" ausgeben
if (words.length == 1) return (Eliza(Grammar[Math.floor(Math.random() * Grammar.length)]))
// ggf. "Interessant" o.ä. ausgeben da Satz für komplexe Antwort zu kurz
if (words.length == 2) return (Eliza(Intressting[Math.floor(Math.random() * Intressting.length)]))
// /* Rountine für komplexe Antworten */ //
// ggf. Subjekt kleinschreiben wenn Artikel
if (words[0].toUpperCase() == 'ES') words[0] = words[0].toLowerCase() if (words[0].toUpperCase() == 'SIE') words[0] = words[0].toLowerCase() if (words[0].toUpperCase() == 'ER') words[0] = words[0].toLowerCase()
// Possesivpronomen kleinschreiben
if (words[0].toUpperCase().search(Possesiv) != -1) { words[0] = words[0].toLowerCase() }
if (words[0].toUpperCase() == 'ICH') { if (words[1].toUpperCase() == 'MUSS') words[1] = 'müssen'; else if (words[1].toUpperCase() == 'BIN') words[1] = 'sind'; else if (words[1].toUpperCase() == 'DARF') words[1] = 'dürfen'; else if (words[1].toUpperCase() == 'KANN') words[1] = 'können'; else if (words[1].toUpperCase() == 'MAG') words[1] = 'mögen'; else if (words[1].toUpperCase() == 'SOLL') words[1] = 'sollen'; else if (words[1].toUpperCase() == 'WILL') words[1] = 'wollen'; else if (words[1].toUpperCase().charAt(words[1].length-1) == 'E') words[1] = words[1] + 'n';
}
if (words[0].toUpperCase() == 'DU') { if (words[1].toUpperCase() == 'MUSST') words[1] = 'muss'; else if (words[1].toUpperCase() == 'BIST') words[1] = 'bin'; else if (words[1].toUpperCase() == 'HAST') words[1] = 'habe'; else if (words[1].toUpperCase() == 'MAGST') words[1] = 'mag'; else if (words[1].toUpperCase().charAt(words[1].length-2) == 'S') if (words[1].toUpperCase().charAt(words[1].length-1) == 'T') words[1] = words[1].slice(0,words[1].length-2)
}
for(i = 0; i <= words.length-1; i++) { if (words[i].toUpperCase() == 'MIR') words[i] = 'ihnen'; else if (words[i].toUpperCase() == 'DIR') words[i] = 'mir'; else if (words[i].toUpperCase() == 'ICH') words[i] = 'sie'; else if (words[i].toUpperCase() == 'DU') words[i] = 'ich'; else if (words[i].toUpperCase() == 'MEIN') words[i] = 'ihr'; else if (words[i].toUpperCase() == 'DEIN') words[i] = 'mein'; else if (words[i].toUpperCase() == 'MEINE') words[i] = 'ihre'; else if (words[i].toUpperCase() == 'DEINE') words[i] = 'meine'; else if (words[i].toUpperCase() == 'MEINEN') words[i] = 'ihren'; else if (words[i].toUpperCase() == 'DEINEN') words[i] = 'meinen'; else if (words[i].toUpperCase() == 'MEINEM') words[i] = 'ihrem'; else if (words[i].toUpperCase() == 'DEINEM') words[i] = 'meinem'; else if (words[i].toUpperCase() == 'DICH') words[i] = 'mich'; else if (words[i].toUpperCase() == 'MICH') words[i] = 'sich' }
im nächsten posting gehts weiter