Vor nunmehr 40 Jahren schrieb Joseph Weizenbaum ein simples Programm namens ELIZA, welches nichts mehr tat, als vom Benutzer eingegebene Sätze in Fragen umzuwandeln und auf gewisse Schlüsselwörter mit passenden Kommentaren zu reagieren.
Weizenbaum war überrascht, wie leicht seine Testpersonen auf die Illusion hereinfielen, es handele sich um einen menschlichen Gesprächspartner. Selbst Psychiater glaubten, mit einem solchen Programm Therapien automatisieren zu können.
Wir wollen ELIZA in einfacher Form nachimplementieren, so dass wir uns (auf Englisch) mit ihr unterhalten können, etwa so:
Gesteuert wird ELIZA von Regeln, die aus einer Textdatei rules.txt (bzw. rules-simple.txt) eingelesen werden. Ein Beispiel daraus:
Die Regeln werden von oben nach unten abgearbeitet. Die erste, bei der eine Phrase in der Benutzereingabe auftaucht, bestimmt ELIZAs Antwort. Dabei wird für jede Regel ein Zähler geführt, der die Antworten dieser Regel reihum auswählt; nach der letzten natürlich wieder die erste. So könnte obige Regel für folgende Konversation sorgen:
Implementieren Sie ein Programm, welches Regeln aus einer Datei in obigem Format in den Hauptspeicher liest. Dann soll es in einer Schleife an der Standardeingabe Zeilen vom Benutzer entgegennehmen und anhand der Regeln eine passende Antwort ausgeben. Das Programm soll mit Control-D beendet werden können.
Verwenden Sie zur Repräsentation der Zeichenketten hier nun den Typ stralloc mitsamt den zugehörigen Funktionen aus der Bibliothek libowfat (siehe unten).
Um das Programm übersichtlich zu halten, lohnt sich auch hier eine Aufteilung auf mehrere Quelltextdateien und damit die Erstellung eines Makefiles.
Noch ist ELIZA nicht wirklich überzeugend. Das wird deutlich besser, wenn wir sie in die Lage versetzen, Teile der Benutzeraussagen aufzugreifen.
Zu diesem Zweck enthalten etliche Antworten der Regeldatei ein ,,*``, beispielsweise:
Auf den Rechnern der SAI sollte diese Bibliothek unter /usr/local/diet installiert sein. Sollten Sie sie (beispielsweise auf Ihrem Heimrechner) nicht vorfinden, können Sie sie aus dem Beispielverzeichnis der Vorlesung herunterladen und wie folgt bauen:
Die Pfade auf das zugehörige Include- bzw. Bibliotheksverzeichnis müssen Sie dann an der gcc-Kommandozeile mit angeben:
Beachten Sie, dass diese Bibliothek unter MS Windows/cygwin nicht compiliert. Sollten Sie nicht umhin kommen, weiterhin unter MS Windows zu programmieren, können Sie durch Editieren des Makefiles weiterkommen. Insbesondere muss die Variable ALL_OBJS geändert werden:
Viel Erfolg!