Lösungsblatt 6

Lösungen zum Aufgabenblatt 6
Syntax natürlicher Sprachen
Universität München, CIS, WS 2015/16
H. Leiß
Abgabetermin: Mi, 2.12.2015
Mit np.pl ist vorläufig np.folien.pl gemeint.
Aufgabe 6.1 Erweitere das Lexikon lexikon np.pl und die Grammatik np.pl so, daß auch
(einfache) interrogative Nominalphrasen erkannt werden.
(a) Füge zu den Pronomina auch Lexikoneinträge für das Interrogativpronomen wer, was
(einfach als pron([],[Pers,Gen,Num,Kas])) und für interrogative Demonstrativpronomen
(als art([Dekl,Num],[Gen,Kas])) welcher, welche, welches hinzu.
Wie muß man das Artmerkmal zu Adjektivdeklination wählen, damit
welcher alte Mann,
welche alte Frau,
welches alte Kind
erkannt werden?
Wenn Sie für (definite und interrogative) Demonstrativpronomen lieber (weil genauer) eine
eigene Wortart dem([Dekl,Num],[Gen,Kas]) einführen wollen, welche Lexikoneinträge
und welche Änderung der NP-Regeln brauchen Sie dann, damit die obigen Beispiele und
dieser alte Mann,
diese alte Frau,
dieses alte Kind
erkannt werden?
(b) Angenommen, wir wollen bei den Nominalphrasen zwischen den bisherigen (in) definiten“
”
Nominalphrasen und den durch die vorigen Erweiterungen erlaubten interrogativen“ Nom”
inalphrasen unterscheiden.
In welchen Kategorien und Regeln muß man dazu ein Artmerkmal Definitheit“ mit Wert
”
def für (in)definite und qu für interrogative Ausdrücke einbauen, damit z.B.
er,
sie,
es,
der Mann,
eine Frau,
dieses Kind
als definite Nominalphrase erkannt werden, aber
wer,
was,
welcher Mann,
welche Frau,
als interrogative Nominalphrase?
Lösung von Aufgabe 6.1
1
welches Kind
(a) Für das Interrogativpronomen genügen die Einträge
% Interrogativpronomen (Interrogatives Personalpronomen)
pron([],[3,mask,sg,nom])
pron([],[3,mask,sg,gen])
pron([],[3,mask,sg,dat])
pron([],[3,mask,sg,akk])
-->
-->
-->
-->
[wer].
[wessen].
[wem].
[wen].
pron([],[3,neut,sg,nom])
pron([],[3,neut,sg,gen])
pron([],[3,neut,sg,dat])
pron([],[3,neut,sg,akk])
-->
-->
-->
-->
[was].
[wessen].
[wem].
[was].
% Interrogative Demonstrativpronomen/Artikel:
art([sw,sg],[mask,nom])
art([sw,sg],[mask,gen])
art([sw,sg],[mask,dat])
art([sw,sg],[mask,akk])
art([sw,sg],[fem,nom])
art([sw,sg],[fem,gen])
art([sw,sg],[fem,dat])
art([sw,sg],[fem,akk])
-->
-->
-->
-->
-->
-->
-->
-->
art([sw,sg],[neut,nom])
art([sw,sg],[neut,gen])
art([sw,sg],[neut,dat])
art([sw,sg],[neut,akk])
art([sw,pl],[-,nom])
art([sw,pl],[-,gen])
art([sw,pl],[-,dat])
art([sw,pl],[-,akk])
-->
-->
-->
-->
-->
-->
-->
-->
[welcher].
[welches].
[welchem].
[welchen].
[welche].
[welcher].
[welcher].
[welche].
[welches].
[welches] ; [welchen]. % ?
[welchem].
[welches].
[welche].
[welcher].
[welchen].
[welche].
% Demonstrativpronomen (als art([ADekl,Num],[Gen,Kas]))
art([sw,sg],[mask,nom])
art([sw,sg],[mask,gen])
art([sw,sg],[mask,dat])
art([sw,sg],[mask,akk])
art([sw,sg],[fem,nom])
art([sw,sg],[fem,gen])
art([sw,sg],[fem,dat])
art([sw,sg],[fem,akk])
-->
-->
-->
-->
-->
-->
-->
-->
[dieser].
[dieses].
[diesem].
[diesen].
[diese].
[dieser].
[dieser].
[diese].
2
art([sw,sg],[neut,nom])
art([sw,sg],[neut,gen])
art([sw,sg],[neut,dat])
art([sw,sg],[neut,akk])
art([sw,pl],[-,nom])
art([sw,pl],[-,gen])
art([sw,pl],[-,dat])
art([sw,pl],[-,akk])
-->
-->
-->
-->
-->
-->
-->
-->
[dieses].
[dieses].
[diesem].
[dieses].
[diese].
[dieser].
[diesen].
[diese].
Man könnte die Kategorie dem([ADekl,Num],[Gen,Kas]) bei den obigen Einträgen für
welcher/dieser verwenden und müßte dann eine Regel
det([Pers,Num,Dekl],[Gen,Kas]) -->
dem([Dekl,Num],[Gen,Num,Kas]), {Pers=3}.
% dieser, welcher
einfügen. Vorausgesetzt wird, daß die Adjektivdeklination in den Lexikoneinträgen auf
Dekl=sw gesetzt ist.
(b) Wenn man definite und indefinite Nominalphrasen von interrogativen durch ein Artmerkmal unterscheiden will, sollten die Kategorien so aussehen:
definitheit(def).% definit oder indefinit
definitheit(qu). % interrogativ
Die Kategorien sollten zu
pron([Def],[Pers,Gen,Num,Kas]),
art([Def,ADekl,Num],[Gen,Kas]),
np([Def],[Pers,Gen,Num,Kas])
angepaßt werden, natürlich auch in den Regeln.
Es ist sinnvoll, von den in/definiten und interrogativen noch die relativierenden Nominalphrasen wie die, deren Kind abzugrenzen. Dann sollte man mindestens
definitheit(rel).% relativierend
ergänzen; besser wäre aber, wenn man das Genus und den Numerus der Nomen, an die
man den Relativsatz anschließen kann, im Definitheitsmerkmal der Nominalphrase mit
angibt, also
definitheit(rel(Gen,Num)). %
relativierend zu Nomen mit Gen,Num
und dann bei Sätzen ebenfalls zwischen definiten = Aussagesätzen, interrogativen =
Fragesätzen, und relativierenden = Relativsätzen mit einem Artmerkmal Def = def|qu|rel
in der Kategorie s([Def,...],Form) unterscheidet.
Natürlich müßte man die Regeln von np.pl auch diesbezüglich entsprechend anpassen!
Das wird in np2.pl und lexikon np2.pl aber nicht gemacht:
?- parse.
Beende die Eingabe mit <Punkt><Return>
|: welche Frau.
3
Aufruf: np([_, _, _], [_], _, [welche, ’Frau’], []).
Baum:
np([3, fem, sg], [nom])
det([3, sg, sw], [fem, nom])
art([sw, sg], [fem, nom]) welche
n1([fem], [sw, sg, nom])
n([[], fem], [sg, nom])
cn([fem], [sg, nom]) ’Frau’
Baum:
np([3, fem, sg], [akk])
det([3, sg, sw], [fem, akk])
art([sw, sg], [fem, akk]) welche
n1([fem], [sw, sg, akk])
n([[], fem], [sg, akk])
cn([fem], [sg, akk]) ’Frau’
Aufgabe 6.2 Die Regeln der Nominalphrasengrammatik np.folien.pl enthielten keine vorangestellten Genitiv-NPs als Determinatoren und keine Regeln zur Koordination von Nominalphrasen mit und und oder. Der Grund war, daß der Prolog-Parser bei linksrekursiven“
”
Regeln wie np --> np, [und], np. oder np --> np ap n, wo die linke Regelseite als linke
Konstituente auf der rechten Regelseite auftritt, in eine endlose Suche gerät.
In der letzten Übungsstunde und auf dem Lösungsblatt 5 hatten wir vorangestellte Nominalphrasen im Genitiv durch eine Regel
% NP mit vorangestellter Genitiv-NP statt Determinator
np([3,Gen,Num],[Kas]) -->
{ member(Kas,[nom,dat,akk]) }, % gen ausschließen wg. Linksrekursion
np([Per1,Gen1,Num1],[gen]),
{ Dekl = ge },
n1([Gen],[Dekl,Num,Kas]).
teilweise“ erlaubt: nur Nominalphrasen im Nominativ, Dativ oder Akkusativ dürfen danach
”
mit einer Nominalphrase im Genitiv beginnen. Das erlaubt (vgl. Aufgabenblatt 5) des Autors
Vorliebe –statt die Vorliebe des Autors–, aber nicht im Genitiv. (Wir erlauben also: des
Autors Vorliebe kennen wir, aber verbieten: des Autors Vorliebe erinnern wir uns.)
Schreiben Sie analog Regeln, die koordinierte Nominalphrasen teilweise“ erlauben.
”
• Am einfachsten ist, für das Genusmerkmal bei der koordinierten Nominalphrase den Wert
Gen=(-) zu verlangen, aber für die linke Konstituente einen echten Genuswert. Damit
sollten Beispiele wie er und sie, die Kinder und die Frauen, die Kinder oder ich
erkannt werden (ohne daß Prolog divergiert).
• Mit der obigen Lösung werden aber Beispiele wie ich und die Kinder oder uns und
sie nicht erkannt, weil wir bei den Nominalphrasen der ersten Person das Genus Gen=(-)
vergeben haben.
4
Wie könnte man die Koordinationsregeln durch Beschränkung der Merkmale formulieren,
daß auch einige Fälle, wo die linke Nominalphrase in erster Person ist, erkannt werden?
Also die beiden genannten Beispiele, oder sogar ich und wir (aber nicht mehr: ich und
ich, was ja auch kaum gebraucht wird).
Tip: es könnte nützlich sein, die Merkmal vererbung“ abzuschwächen mit
”
% agreeOrNone(+X,+Y,?Z)
agreeOrNone(X,Y,Z) :( (X = Y, Z = X) ; % gleichen Wert X,Y an Z vererben
(X \= Y, Z = (-)) % sonst an Z den Default - vergeben
).
Das ist für Nebenbedingungen { ... } gedacht, die nach den Konstituenten kommt, in
denen die Merkmale X,Y belegt werden (Wenn es man es vor den Konstituenten benutzt,
scheitert X \= Y immer, und man erzwingt X = Y = Z.)
Achtung: Wenn Prolog in eine Schleife gerät, müssen Sie die abbrechen mit Strg C oder Prolog
stoppen mit Strg D.
Lösung von Aufgabe 6.2
% harmlose NP-Koordination, weil linke Konstituente keine NP:
np([Per,Gen,pl],[Kas]) -->
[sowohl], np([Per1,Gen1,Num1],[Kas]),
[als], [auch], np([Per2,Gen2,Num2],[Kas]),
{ agreeOrNone(Per1,Per2,Per),
agreeOrNone(Gen1,Gen2,Gen) }.
% Verhinderung von Linksrekursion durch Merkmalbeschränkung
np([Per,-,pl],[Kas]) -->
{ member(Gen1,[mask,fem,neut]) % linke NP hat echtes Genus,
; Gen1=(-), Per1=1, Per=(-) }, % oder: falls linke NP 1.Person,
np([Per1,Gen1,Num1],[Kas]),
% soll die gesamte NP Person - haben
[und], ([auch];[]),
np([Per2,Gen2,Num2],[Kas]),
{ agreeOrNone(Per1,Per2,Per) }.
np([Per,-,Num],[Kas]) -->
{ member(Gen1,[mask,fem,neut])
; Gen1=(-), Per1=1, Per=(-) },
np([Per1,Gen1,Num1],[Kas]),
[oder], ([auch];[]),
np([Per2,Gen2,Num2],[Kas]),
{ agreeOrNone(Per1,Per2,Per),
agreeOrNone(Num1,Num2,Num) }.
%
% agreeOrNone(+X,+Y,?Z)
agreeOrNone(X,Y,Z) :5
( (X = Y, Z = X) ;
(X \= Y, Z = (-))
).
Diese Lösung lehnt Koordinationen wie mich und uns ab.
Es kann auch nützlich sein, Hilfsprädikate wie
% agree(+X,+Y,-Z)
agree(X,Y,Z) :ground(X), ground(Y), % X,Y müssen belegt sein,
X = Y,
% denselben Wert haben,
Z = X.
% und Z erbt diesen Wert.
% almostAgree(?X,?Y,?Z)
almostAgree(X,Y,Z) :( agree(X,Y,Z)
; X =(-), Y = Z
; Y =(-), X = Z
; X =(-), Y =(-)
).
zu verwenden, um Merkmalvererbung bzw. -vergleich zu erleichtern. Damit kann man z.B. bei
np([Pers,Gen,Num],[Kas]) -->
det([Pers,Num,Dekl],[GenD,Kas]),
n1([Gen],[Dekl1,Num,Kas]),
{ almostAgree(Dekl1,-,Dekl),
almostAgree(GenD,Gen,Gen) }.
sagen, daß der im Lexikoneintrag des det festgelegte Wert Dekl die Adjektivdeklination Dekl1
der n1 vorgibt oder dort der Wert - erlaubt ist, d.h. die n1 kein Adjektiv hat; analog sagt man,
daß die das Genus beim det entweder mit dem bei n1 übereinstimmt oder undefiniert, d.h. -,
ist.
6