Künstliche Intelligenz und Prolog
Copyright © 2019 Jiri Kriz, www.nosco.ch

14Natürliche Sprachen I

Lösungen

14.1Natürlich­sprachliche Abfragen zu Datenbanken

Schreiben Sie ein einfaches ad hoc Front-End für natürlichsprachliche Abfragen zu relationalen Datenbanken. Als konkretes Beispiel können Sie Staaten (und Städte) in Europa nehmen, z.B.:

/* state( Name, Population, Area, Capital). */
state( switzerland, 6, 41, bern). /* etc. */

/* city( Name, In_state, Population */
city( zurich, switzerland, 0.5). /* etc. */

Folgende Abfragen sollten möglich sein:

Hinweise:

Lösung 14.1

14.2Tokenizer

Schreiben Sie einen Tokenizer, der aus einer Liste von Buchstaben eine Liste von Wörtern erzeugt, z.B.

?- tokenize( "the man arrived", L). 
 ⇒  L = [ the, man, arrived]

Mit Hilfe von tokenize implementieren Sie eine interaktive Shell talk, die Sätze des Benutzers einliest, verarbeitet und das Resultat ausschreibt. Als Beispiel für die Verarbeitung wird der Satz wiederholt und dahinter die Anzahl Wörter geschrieben:

?- talk.
> the man arrived
the man arrived /3 
> bla blabla 
bla blabla /2
> bye
?- …

Hinweise:

Lösung 14.2

14.3ELIZA

Simulieren Sie einen Psychiater nach der Art von ELIZA. Die folgende Konversation sollte möglich sein:

> i am very unhappy 
How long have you been very unhappy ?  
> six months. 
Please go on. 
> can you help me? 
What makes you think I can help you ?  
> you remind me of my father 
Please tell me more about father .  
> i like teasing father 
Does anyone else in your family like teasing father ? 
> no, only me
Please go on. 
> bye
Goodby. I hope I have helped you. 

Das Programm versucht die Eingabe mit Patterns (Templates) der Form

pattern( [i, am, 1], ['How long have you been', 1, ?])

zu matchen, um die passende Anwort zu finden. Die Zahl 1 ist ein Platzhalter, der für beliebig viele Wörter steht.

Lösung 14.3