Computerlinguistik II, WS 2004/05 Aufgabenblatt 3 -------------------------------------------------------------- Ausgabe: Do, 22.11.05 Abgabe: Mi, 30.11.05 Aufgabe 4: --------- Die Grammatik in Beispiele/programmierer.pl berücksichtigt die im Deutschen notwendige Kongruenz morphologischer Merkmale nicht. Dann hatten wir diese Grammatik um eininge Merkmale erweitert: % ----------Beispiele/dcg.merkmale.pl------------------------- % Nur Pers = 3, daher ignoriert. startsymbol(s([_Temp])). % für später s([Temp]) --> np([_Gen],[Num,nom]), vp([Temp,Num]). np([Gen],[Num,Kas]) --> det([Gen,Num,Kas]), n([Gen],[Num,Kas]). vp([Temp,Num]) --> ( v([Temp,Num]) ; v([Temp,Num]), np([_Gen],[Num,akk]) ). det([Gen,sg,Kas]) --> ( [der], { Gen = mask, Kas = nom } ; [das], { Gen = neut, (Kas = nom; Kas = akk) } ). n([mask],[Num,Kas]) --> ['Programmierer'], { (Num = sg ; Num = pl), (Kas = nom; Kas = akk) }. n([neut],[sg,Kas]) --> ['Programm'], { (Kas = nom; Kas = akk) }. v([praes,sg]) --> [steht]. v([praet,sg]) --> [schrieb]. % ------------------------------------------------------------ a) Ergänze eine Regel für den Artikel 'die' im Plural, die alle korrekten Genus- und Kasusmöglichkeiten erfaßt, und eine Regel für die Verbform 'schrieben' (ohne Pers-Merkmal). (Punkte 3) b) Ergänze die Kategorie v um ein Merkmal zur Unterscheidung von Verbarten (durch die Angabe der Komplementrahmen [nom] bei intransitiven bzw. [nom,akk] bei transitiven Verben). Passe die v-Regeln und die vp-Regel so an, daß intransitive Verben nur ohne Objekt-np und transitive nur mit Akkusativ-Objekt verwendbar sind (Punkte 3) c) Geben Sie die Prolog-Klausel an, in die die vp-Regel beim Einlesen der Datei (nach Laden von Parser/term_expansion.pl) übersetzt wird. (Punkte 3) d) Geben Sie die Ausgabe (Aufruf und Syntaxbaum) an, die durch tokenizer:parse/0 für die Eingaben die Programmierer schrieben das Programm. das Programm schrieben die Programmierer. erzeugt wird. (Punkte 4) Aufgabe 5: --------- Wie kann man das Programm read_sentence/3 aus Parser/tokenizer.pl so ändern, daß beim Lesen der Eingabe a) Zeilenumbrüche (Tippen von newline/return/enter) -bis auf das- jenige am Ende der Eingabe- wie ein Leerzeichen behandelt werden, (4 Punkte) b) Leerzeichen, die direkt auf ein Leerzeichen folgen, ignoriert werden? (4 Punkte) c) (Freiwillig) Analog zu b) kann man beim Lesen der Zeichen alle Kommata ignorieren und dann in tokenize/2 auf das Prädikat entferne_komma/2 verzichten. (2 Punkte) Hinweis: (i) Ermitteln Sie die Code-Nummern des Zeilenumbruch- und des Leerzeichens mit ?- "Zeichenreihe" = Nummernliste. (ii) Für a) müssen Sie sich beim Sammeln der gesehenen Zeichen statt der Nummer des Umbruchs die Nummer des Leerzeichens merken, für b) die nachfolgenden Leerzeichen einfach nicht sammeln.