PROBEKLAUSUR: Damit Sie eine Vorstellung davon bekommen, welche Art Fragen gestellt werden und damit Sie probieren koennen, wievie Zeit Sie brauchen, stelle ich hier eine alte Klausur vom WS 05/06 zur Verfügung. H.L. Proseminar Computerlinguistik II, WS 2005/06 H.Leiss, CIS -------------------------------------------- Klausur: Samstag, 1.2.2006, 10-12 Uhr, Oettingenstr.67, Raum 1.13 ------------------------------------------------------------------------- Aufgabe 1 (Satzende-Erkenner) --------- Wir hatten ein Praedikat read_sentence/3 durch read_sentence(Stream,Sentence,Seen) :- get0(Stream,Char), read_sentence(Stream,Sentence,Char,Seen). geschrieben, mit dem von einem Zeichenstrom ein Satz gelesen wird. Erklaeren Sie, was das Hilfspraedikat read_sentence/4 tut: read_sentence(Stream,Sentence,Char,Seen) :- ( Char = -1 -> reverse(Seen,Sentence) ; (Seen = [32|Cs], (Char = 32 ; Char = 10)) -> read_sentence(Stream,Sentence,Seen) ; (Seen = [C|Cs], satzende([C,Char])) -> reverse(Cs,Sentence) ; Char = 10 -> read_sentence(Stream,Sentence,[32|Seen]) ; read_sentence(Stream,Sentence,[Char|Seen])). (Bedeutung der Ascii-Nummern: 32 = Leerzeichens, 10 = Zeilenumbruchs, -1 = Dateiende.) a) Was ist die Rolle (Ein- oder Ausgabe?) der einzelnen Argumente Stream: Sentence: Char: Seen: 2 Punkte b) Wozu dienen die einzelnen Faelle in read_sentence/4 oben? 1. 1 Punkt 2. 2 Punkte 3. 1 Punkt 4. 1 Punkt 5. 1 Punkt Aufgabe 2 (DCG -> Prolog) --------- Angenommen, Sie haben eine DCG-Datei mit folgender Regel geschrieben: s([def],[vz,Temp]) --> np([Gen],[Num,nom]), { Temp = praes ; Temp = praet }, v([nom],[Temp]). a) Wie sieht die Prolog-Klausel aus, die beim Laden der Datei aus dieser Regel gemacht wird? 4 Punkte b) Wie sieht der Aufruf in Prolog aus, mit dem man pruefen wuerde, ob das Beispiel das Programm funktioniert ein Satz im Sinn der Grammatik ist? ?- 2 Punkte Aufgabe 3 (Teilaufgaben der NL->PL-Uebersetzung) --------- a) Was ist die Aufgabe der Tokenisierung und welche (feststehenden) Daten braucht sie dazu (im Unterschied zu den variierenden Eingaben) ? 3 Punkte Eingabe: Ausgabe: Erforderliche Daten: b) Ebenso: Was ist die Aufgabe der Syntaxanalyse ? 3 Punkte Eingabe: Ausgabe: Erforderliche Daten: c) Ebenso: Was ist die Aufgabe der semantischen Analyse (sem/2) ? 3 Punkte Eingabe: Ausgabe: Erforderliche Daten: d) Geben Sie einen Ausdruck der natuerlichen Sprache an, dessen Bedeutung man weder durch einen Individuenterm noch durch eine Formel der Praedikatenlogik wiedergeben kann: 2 Punkte Aufgabe 4 (Lambda-Terme) --------- a) Fuehren Sie die Einsetzung t[X/s] fuer folgende Terme aus: t := (X * lam(Y,X*lam(X,Y*X))) s := (Y*X) t[X/s] = Welche Variablen muessen bei einer Einsetzung t[X/s] umbenannt werden? 3 Punkte b) Vereinfachen Sie den folgenden Lambda-Term: (lam(N,lam(P, all(X,N*X => P*X))) * lam(Z,astronom(Z))) * lam(X,beobachtet(Y,X)) 3 Punkte Aufgabe 5 (Neu: Semantik von Plural und Reziprokpronomen) --------- In vielen Faellen kann man Aussagen mit Pluralsubjekt (der 3.Person) dieselbe Bedeutung geben wir den entsprechenden Aussagen mit Singularsubjekt, etwa Alle Planeten umkreisen die Sonne. ~ Jeder Planet umkreist die Sonne. Einige Monde umkreisen den Uranus. ~ Ein Mond umkreist den Uranus. Das geht aber nicht bei Aussagen wie Einige Planeten umkreisen einander. Alle Astronomen kennen einander. oder: Karl und Maria heiraten (einander). Karl und Maria sind Arbeitskollegen. Angenommen, die Beispielgrammatik des Kurses soll um Nominalphrasen der 3.Person Plural und entsprechende Aussagen erweitert werden. Dafuer soll die Bedeutung entsprechend dem folgendem Beispiel entstehen: (Einige N) umkreisen einander |--> es gibt x,y aus N ((x =|= y) /\ umkreist(x,y) /\ umkreist(y,x)) (1) (Alle N) umkreisen einander |--> fuer alle x,y aus N ((x =|= y) --> (umkreist(x,y) /\ umkreist(y,x))) a) Geben Sie die Lambda-Terme an, mit der die Bedeutungen einige = mindestens zwei bzw. mindestens ein Paar alle = je zwei bzw. jedes Paar formuliert werden: 6 Punkte sem( [det([indef],[_Gen,pl,_Kas]), einige], ...................................................). sem( [det([quant],[_Gen,pl,_Kas]), alle], ...................................................). (Nehmen Sie ein Praedikat neq/2 fuer die Verschiedenheit =|= an.) Bei n([Gen],[pl,Kas]) soll dieselbe Bedeutung wie bei n([Gen],[sg,Kas]) angenommen werden, sodass fuer Nominalphrasen die Auswertung mit (2) sem( [np([indef,3,Gen],[Num,Kas]), [det([indef],[Gen,Num,Kas]),_Einige], [n([Gen],[Num,Kas]),N] ], SemNP ) :- sem( [det([indef],[Gen,Num,Kas]),_Einige], SemDet), sem( [n([Gen],[Num,Kas]),N], SemN ), normalize( SemDet * SemN, SemNP ). unabhaengig vom Numerus erfolgt. b) Berechnen Sie mit a) den Lamda-Term, der die Bedeutung des folgenden Ausdrucks wiedergibt, indem Sie bei [....] die fehlenden Lambda-Terme einsetzen: 4 Punkte np([indef,3,mask],[pl,nom]) (2) [ .........................................................] / \ det([indef],[mask,pl,nom]), n([mask],[pl,nom]) a) [......................................] [..............................] | | einige Sterne c) Wie kann man die Bedeutung des Reziprokpronomens 'einander' definieren, damit es aus einem transitiven Verb wie 'umkreisen' mit *einer* (Individuen-)Subjekt- und einer Objektstelle ein 'symmetrisches' Verb wie 'einander umkreisen' mit *zwei* Subjekt- aber keiner Objektstelle macht? Schlagen Sie bei einen Lambda-Term SemEinander := ......................................... fuer die Bedeutung sem( [pron([rezi],[_Gen,pl,akk]), einander], SemEinander ). vor, sodass fuer den Fall SemTV = lam(X,lam(Y,umkreist(X,Y))) und die Bedeutung (2) die Anwendung SemNP * (SemEinander * SemTV) insgesamt die gewuenschten Formeln aus (1) ergibt?? (Platz zum Probieren:) 4 Punkte Aufgabe 6 --------- Wir haben das Einlesen einer DCG-Grammatik so veraendert, dass bei der Analyse einer Eingabe der Syntaxbaum aufgebaut wird. Dazu haben wir die Grammatikregeln mit Hilfe von translate((L --> R),(Ltr --> Rtr)) :- translate1(L,Ltr,Baum), translate2(R,Rtr,Baumliste), Baum = [L|Baumliste]). uebersetzt (und anschliessend weiter veraendert). a) Dabei fuegt translate1(+Kategorie,-KategorieTr,-Baum) an eine Kategorie der Form (,) ein weiteres Argument an, die Ausgabevariable . Wie lautet die Prolog-Klausel, die das leistet? translate1(Kat,KatTr,Baum) :- Beschreiben Sie in Worten, was die einzelnen Programmzeilen tun! 3 Punkte b) Zwei Klauseln von translate2/3 lauten: translate2((A,B),((Atr,Btr),{Code}),Baeume) :- !, translate2(A,Atr,BaeumeA), translate2(B,Btr,BaeumeB), Code = append(BaeumeA,BaeumeB,Baeume). ... translate2(Cat, CatTr,[Baum]) :- translate1(Cat,CatTr,Baum). Wie genau sieht das Ergebnis beim Aufruf mit folgender Regel aus? ?- translate((np(Kas) --> det(Kas), n(Kas)), Ergebnis). 3 Punkte Ergebnis = Viel Erfolg! H.L