Computerlinguistik II, WS 2004/05 Aufgabenblatt 5 -------------------------------------------------------------- Ausgabe: Mi, 13.12.06 Abgabe: Di, 19.12.06 Aufgabe 9 (Generierung von natürlichsprachlichen Ausdrücken) --------- Nach [[?- consult(grammatik)]] können wir (außer mit unserem [[parse/0]]) auch mit ?- np([Def,Pers,Gen],[Num,Kas],Baum,+Atomliste,[]). Prolog auffordern, zu einer *gegebenen* Atomliste eine Analyse als Nominalphrase zu suchen. Wir wollen aber auch umgekehrt testen können, welche Nominalphrasen die Grammatik *erzeugen* kann. Da die Grammatik unendlich viele Nominal- phrasen erkennt, kann man nicht alle erzeugen lassen a) Welche Regeln der Grammatik führen dazu, daß es unendlich viele Nominalphrasen gibt? (Genauer: was ist die kleinste Menge von Regeln, die man weglassen muß, damit die Grammatik nur endlich viele Nominalphrasen erkennt?) Punkte 3 b) Wie muß man np/5 aufrufen, damit Prolog eine Atomliste ausgibt, die eine definite Nominalphrase im Nominativ aus zwei Wörtern ist? Punkte 2 Wenn man das testet, erhält man nach einer Reihe von Lösungen eine Fehlermeldung. Welche Grammatikregel verursacht diese Fehlermeldung? Punkte 1 c) Kommentiere diese Grammatikregel nach b) aus und lade mit ?- [grammatik]. alles neu. Schreibe ein Prolog-Programm erzeuge_np/1, das zu einer Zahl N > 0 alle Nominalphrasen (im Nominativ) der Länge N erzeugt, indem es - zuerst eine Atomliste der Länge N erzeugt, die eine Nominalphrase bildet, - dann diese Atome mit Leerzeichen zu einem langen Atom verbindet, - dieses Atom in eine neue Zeile schreibt, - und das solange wiederholt, bis alle Nominalphrasen der Länge N ausgegeben sind. Teste das Programm für kleine N (N=1,2,3,4). Punkte 6 Hinweis: Mache es erst für festes N, sagen wir N=3. Mit length(-Liste,+N) bekommt man eine Liste von N unbelegten Variablen. d) Schreibe ein Programm, das alle Aussagesätze (= definite Sätze in Verbzweitstellung) mit einem Vollverb und Satzlänge 5 erzeugt. Punkte 6 Hinweis: der Unterschied zu c) ist, daß nicht mehr alle Satzregeln durchlaufen werden dürfen. Wie sieht die Struktur der gesuchten Sätze aus, und wie kann man Prolog dazu bringen, nur Sätze mit dieser Struktur zu erzeugen? Aufgabe 10 (freiwillig, über die Weihnachtsferien) ---------- Wie kann man alle Ausdrücke der Grammatik erzeugen, die zu einem vom Benutzer eingegebenen Ausdruck ähnlich sind, d.h. denselben Syntaxbaum haben, nur mit anderen Blättern? Hinweis: Modifiziere parse/0, um den Syntaxbaum der Benutzereingabe zu bekommen, ersetze darin die Blätter durch Variable zu einem 'Musterbaum', und lasse dann die Ausdrücke (der Länge der Benutzereingabe) erzeugen, deren Analyse eine Belegung des Musterbaums ist. Punkte 10 Bem. Es ist nicht gerade effizient, erst zum Schluß die Baumstruktur zu vergleichen, aber es geht. Neben Dingen aus Aufgabe 9 und Änderungen von parse/0 muß man die Ersetzung der Blätter eines Baums durch Variable selbst machen.