Computerlinguistik II: Satzgliedstellung

Fragestellung: Wie bekommen können wir folgende Sätze mit einer einzelnen Regel abdecken
Die Astronomin schenkt dem Studenten den Planeten
Die Astronomin schenkt den Planeten dem Studenten
Den Planeten schenkt die Astronomin dem Studenten
Den Planeten schenkt dem Studenten die Astronomin
Dem Studenten schenkt die Astronomin den Planeten
Dem Studenten schenkt den Planeten die Astronomin

Lösung: wir kodieren den Verbrahmen als Liste

Einfache Lösung

%Regeln
s -->
    np(Kasus1),
    v3(Rahmen),
    {permutation(Rahmen,[Kasus1,Kasus2,Kasus3])},
    np(Kasus2),
    np(Kasus3).

%Geschweifte Klammern=normaler Prologaufruf: ausgeschrieben war das:
/*
s(L1,Ende) :-
    np(Kasus1,L1,L2),
    v3(Rahmen,L2,L3),
    permutation(Rahmen,[Kasus1,Kasus2,Kasus3]),
    np(Kasus2,L3,L4),
    np(Kasus3,L4,Ende).
*/


np(Kasus) --> art(Kasus,Genus), n(Kasus,Genus).

%lexikonregeln

v3([nom,dat,akk]) --> [schenkt].

art(nom,mask) --> [der].
art(akk,mask) --> [den].
art(dat,mask) --> [dem].

art(nom,fem) --> [die].
art(akk,fem) --> [die].

art(nom,neut) --> [das].
art(akk,neut) --> [das].


n(nom,mask) --> [student].
n(dat,mask) --> [studenten].
n(nom,mask) --> [planet].
n(akk,mask) --> [planeten].
n(dat,mask) --> [planeten].
n(nom,neut) --> [gestirn].
n(akk,neut) --> [gestirn].
n(nom,fem) --> [astronomin].
n(akk,fem) --> [astronomin].


Mit Numeruskongruenz

Wir wollen jetzt noch erreichen, dass Verb und Nominativ-NP im Numerus kongruieren. Dazu kodieren wir die NP-Merkmale als Liste. Wenn ein Hilfsverb vorhanden ist, muss das Hilfsverb im Numerus mit der Nominativ-NP kongruieren, doch der Rahmen kommt vom Vollverb.

%Regeln
s -->
    np(MM1),
    v3(finit,_,Rahmen),
    {permutation(Rahmen,[MM1,MM2,MM3])},
    np(MM2),
    np(MM3).

s -->
    np(MM1),
    hv(Num),
    np(MM2),
    np(MM3).
    v3(partizip,Num,Rahmen).
    {permutation(Rahmen,[MM1,MM2,MM3])},


np(MM) --> art(MM), n(MM).

%lexikonregeln

%Der Verbrahmen enthält die Liste der Merkmale, wobei nur der Kasus relevant ist
% bei den Merkmalen für die Nominativ-NP wird auch der Numerus spezifiziert.
v3(finit,sing,[[nom,sing|_],[dat|_],[akk|_]]) --> [schenkt].

%Kopiere den Numerus in den Verbrahmen
v3(partizip,Num,[[nom,Num|_],[dat|_],[akk|_]]) --> [geschenkt].

hv(sing) --> hat. hv(plu) --> haben.
art([nom,sing,mask|_]) --> [der].
art([akk,sing,mask|_]) --> [den].
art([dat,sing,mask|_]) --> [dem].

art([nom,sing,fem|_]) --> [die].
art([akk,sing,fem|_]) --> [die].

art([nom,sing,neut|_]) --> [das].
art([akk,sing,neut|_]) --> [das].


art([nom,plu|_]) --> [die].
art([akk,plu|_]) --> [die].
art([dat,plu|_]) --> [den].


n([nom,sing,mask|_]) --> [student].
n([dat,sing,mask|_]) --> [studenten].
n([nom,plu,mask|_]) --> [studenten].
n([dat,plu,mask|_]) --> [studenten].
n([nom,sing,mask|_]) --> [planet].
n([akk,sing,mask|_]) --> [planeten].
n([akk,plu,mask|_]) --> [planeten].
n([dat,sing,mask|_]) --> [planeten].
n([nom,sing,neut|_]) --> [gestirn].
n([akk,sing,neut|_]) --> [gestirn].
n([nom,sing,fem|_]) --> [astronomin].
n([akk,sing,fem|_]) --> [astronomin].


%Hilfsprädikate
permutation([],[]).
permutation(L,[K|R]) :-
    streiche(K,L,L1),
    permutation(L1,R).

streiche(Kopf,[Kopf|Rest],Rest).

streiche(X,[Kopf|Rest],[Kopf|Rest1]) :-
    streiche(X,Rest,Rest1).

Kurs-Startseite
Übersicht Begleitmaterial