eliza
Michael W.
- sonstiges
0 $xNeTworKx0 Michael W.0 Oppa0 Oppa0 $xNeTworKx
0 Cano20 FICHTL0 Cheatah
hallo
http://www.javatop.de/scripte2/eliza.htm spricht für sich.
wie funktioniert eliza ?
Danke
Hallo,
wenn du mich fragst ist das einfach ein zufälliges aufscheinen verschiedener Texte. Es antwortet dauernd mit sinnlosem Geschwafel.
$xNeTworKx.
Bei mir war das anders.
es hat sich richtig mit mir unterhalten !!
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
so hier gehts weiter:
if (words.length > 2) {
if (words[2].toUpperCase() == 'ES')
if (words[1].toUpperCase() == 'GEHT') {
s = words[2]
words[2] = words[0]
words[0] = s
}
}
if (words[0].toUpperCase().search(Possesiv) != -1) {
words[1] = words[0] + ' ' + words[1]
words.shift()
}
MakeAnAnswer = 0
if (Math.floor(Math.random() * 2) == 0)
MakeAnAnswer = 1
if (MakeAnAnswer == 0)
s = ComplexAnswerQ[Math.floor(Math.random() * ComplexAnswerQ.length)] + ' ' +
words[0] + ' '
else
s = ComplexAnswerA[Math.floor(Math.random() * ComplexAnswerA.length)] + ' ' +
words[0] + ' '
for(i = 2; i <= words.length-1; i++)
{
s = s + words[i] + ' '
}
if (MakeAnAnswer == 0)
s = s + words[1] + '?'
else
s = s + words[1] + '!'
Eliza(s)
}
// GetLines() liefert die angezeigte (!) Zeilenanzahl im Textfeld
function GetLines()
{
temp = window.document.Eliza.elizachat.value + '\n'
linescount = 0
while (temp.search(/\n/) != -1)
{
linescount = linescount + Math.floor(temp.search(/\n/) / 70)
temp = temp.slice(temp.search(/\n/)+1)
linescount = linescount + 1
}
return (linescount)
}
// Gibt eine Eingabe des Patienten aus und lässt Eliza antworten
function Patient(SayWhat)
{
Say('Du',SayWhat)
Answer(SayWhat)
}
// Löscht die oberste virtuelle (!) Zeile
function DeleteTopLine()
{
FirstBreakPos = window.document.Eliza.elizachat.value.search(/\n/);
window.document.Eliza.elizachat.value =
window.document.Eliza.elizachat.value.slice(FirstBreakPos+1)
}
// Gibt Standartmeldung aus (da erste Zeile kann Say nicht verwendet werden)
function SayHello()
{
window.document.Eliza.elizachat.value = 'Eliza: '+
Greetings[Math.floor(Math.random() * Greetings.length)];
}
// Lässt Eliza etwas sagen
function Eliza(SayWhat)
{
Say('Eliza',SayWhat)
}
//-->
</script>
</head>
<body text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000"
background="back.jpg">
<center>
<form name="Eliza" action="" method=post>
<br>
<textarea name="elizachat" cols="70" rows="20" wrap=physical></textarea><br>
<br>
<input type="Text" name="talkedit" size=60 maxlength=-1
onKeyPress="if (event.which == 13) Patient(window.document.Eliza.talkedit.value)">
<input type="Button" name="" value="Sagen" width="90"
onClick="Patient(window.document.Eliza.talkedit.value)">
</form>
</center>
</body>
</html>
dann mal fröhliche unterhaltung :-)
Hallo,
ausserdem, scheint der Macher dieser Seite genauso intelligent zu sein, wie seine Eliza. Die Seite funktioniert gerade mal im Internet Explorer. Ziemlich schwach meiner Meinung nach.
$xNeTworKx.
Wem bisher der spaß vorenthalten blieb, sich längere Zeit mit eliza zu "unterhalten", dem mag eliza tatsächlich halbwegs "inteligent" vorkommen. Tatsächlich analysiert eliza aber bloß die Syntax und reagiert auf bestimmte Wortmuster ( Hauptsächlich mit
Fragen/Gegenfragen! ). Zusätzlich werden noch bestimmte personen bezogene Schlüsselwörter ("ich", "dein", "mir", ...) durch ihr entsprechendes Gegenstück ersetzt.
Nehmen wir zum Beispiel den Satz "Ich bin böse". eliza erkennt das Wortmuster "Ich bin". Dazu wählt es zufällig aus einer Liste ein passendes Antwortfragment, wie z.B. "BEZWEIFELST DU, [...] ZU SEIN?" oder "SEIT WANN BIST DU DENN [...]" und fügt alles was auf "Ich bin" folgte ein...
Im Endeffekt ist eliza nur eine raffinierte, aber gar nicht so komplizierte Syntaxanalysator- und transformator. eliza sagt auch nie etzwas konkretes, sondern greift immer nur gesagtes auf / weicht mit gegenfragen aus.
Es lohnt sich, mal etwas mehr Zeit in eine "Konversation" mit eliza zu stecken, dann merkt man schnell, wie weit es m,it den wirklichen fähigkeiten dieses Programmes ist.
Hallo,
Es lohnt sich, mal etwas mehr Zeit in eine "Konversation" mit eliza zu stecken, dann merkt man schnell, wie weit es m,it den wirklichen fähigkeiten dieses Programmes ist.
Vor allem, wenn man beginnt, auf jede Frage eine Gegenfrage zu stellen, dann ist Eliza ziemlich rasch am Ende;-)
AFAIK ist Eliza inzwischen schon eine rüstige Dame im Alter von 50 oder so. Sie sollte eigentlich den Turing-Test bestehen, was aber irgendwie nicht so ganz klappte.
Trotzdem hat sie Weltruhm erworden, da einige Psychiater sich von ihr den Konversationsstil abgeschaut haben (oder war's doch umgekehrt *g*).
Grüße
Klaus
hallo,
ICH -> hallo
SIE -> hi
ICH -> erzähl mir etwas
SIE -> erzähl mir etwas von deiner arbeit
ICH -> nein ich meinte erzähl mir etwas von dir
SIE -> erzähl mir etwas von deiner arbeit
ICH -> ich möchte mehr über dich wissen
SIE -> erzähl weiter
ende des gesprächs, lol
na ja, etwas verschlossen die kleine, aber ich könnte
mich stndenlang mit ihr unterhalten :-)
schöne grüße
FICHTL
Hi,
wie funktioniert eliza ?
warum interessiert es Dich, wie eliza funktioniert?
Cheatah, SCNR
P.S.: Eliza ist ein absoluter Klassiker, ein erster interaktiver Sprachprozessor. Schon auf dem C-64 habe ich Tage damit verbracht, die Gesprächsqualität zu verbessern :-)