Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Prolog Grundkurs WS 99/00 Christof Rumpf

Ähnliche Präsentationen


Präsentation zum Thema: "Prolog Grundkurs WS 99/00 Christof Rumpf"—  Präsentation transkript:

1 Prolog Grundkurs WS 99/00 Christof Rumpf rumpf@uni-duesseldorf.de
Parsing mit DCGs Prolog Grundkurs WS 99/00 Christof Rumpf

2 Sprachen und Grammatiken
Eine Sprache kann als eine Menge endlicher Ketten von Wörtern, Morphemen, Phonemen ect. angesehen werden. Nicht jede mögliche Kette dieser Einheiten gehört zu der Sprache. Wir unterscheiden zwischen grammatischen und ungrammatischen Ketten. Eine Grammatik ist eine Menge von Regeln, die die Teilmenge der grammatischen Ketten einer Sprache beschreiben. GK Prolog - Parsing mit DCGs

3 GK Prolog - Parsing mit DCGs
Sprachen A sei eine endliche Menge, genannt Alphabet oder Vokabular. Eine Kette  über A ist eine endliche Sequenz von Elementen aus A. A* ist die Menge aller Ketten über A. Eine Sprache ist eine Menge L  A*.  ist die leere Kette. A = {a,b,c}  = abca A* = {,a,b,c, aa,ab,ac,ba, bb,bc,...} GK Prolog - Parsing mit DCGs

4 GK Prolog - Parsing mit DCGs
Grammatiken Eine Grammatik ist ein Tupel <VT, VN, S, R>. VT ist eine Menge von Terminalsymbolen. VN ist eine Menge von Nichtterminalsymbolen. S  VN wird Startsymbol genannt. R  * VN * × * ist eine endliche Menge von Ersetzungsregeln, mit  = VT  VN. GK Prolog - Parsing mit DCGs

5 GK Prolog - Parsing mit DCGs
Ersetzungsregeln Eine Grammatik ist ein deduktives System von Axiomen und Inferenzregeln, das die Ketten einer Sprache als Theoreme generiert. Seien ,,  *, dann kann durch Anwendung der Regel    jedes Vorkommen der Teilkette  in  durch  ersetzt werden. Mit der Regel AB  CDA können wir z.B. aus der Kette EBABCC die Kette EBCDACC ableiten. GK Prolog - Parsing mit DCGs

6 GK Prolog - Parsing mit DCGs
Chomsky-Hierarchie Die Chomsky-Hierarchie klassifiziert vier Typen von Grammatiken gemäß der Form ihrer Regeln. 0: * VN * × * rekursiv aufzählbar 1: * VN * × * *,  *- kontextsensitiv 2: VN × * kontextfrei 3: VN × VT VN  VN × VT regulär  ist die leere Kette. GK Prolog - Parsing mit DCGs

7 GK Prolog - Parsing mit DCGs
Sprachklassen Jedem Typ der Chomsky-Hierarchie entspricht entspricht eine Sprachklasse. rekursiv aufzählbare Sprachen kontextsensitive Sprachen anbncn kontextfreie Sprachen anbn reguläre Sprachen a*b* GK Prolog - Parsing mit DCGs

8 GK Prolog - Parsing mit DCGs
Automaten Den Grammatiktypen der Chomsky-Hierarchie entsprechen jeweils Typen von Automaten, die die Grammatiken interpretieren können: 0: Turing Maschine 1: Indexierte/linear gebundene Automaten 2: Kellerautomaten (Stack) 3: Endliche Automaten GK Prolog - Parsing mit DCGs

9 Parser Ein Parser ist ein Automat, der auf Basis einer Grammatik für eine Kette einen Ableitungsbaum (parse tree) erzeugt. S NP VP Det N V NP Jeder Mann liebt Det N eine Frau Grammatik & „Jeder Mann liebt eine Frau“ GK Prolog - Parsing mit DCGs

10 GK Prolog - Parsing mit DCGs
Kontextfreie PSGs Kontextfreie Phrasenstrukturgrammatiken entsprechen den Typ-2-Grammatiken der Chomsky-Hierachie, d.h. die Regeln sind durch das Muster VN × * beschränkt: Auf der linken Seite steht genau ein Nichtterminalsymbol. Auf der rechten Seite steht eine beliebige Verkettung von Terminal- und Nichtterminalsymbolen. GK Prolog - Parsing mit DCGs

11 GK Prolog - Parsing mit DCGs
Definite Clause Grammars in Prolog entsprechen in ihrer Form den kontextfreien Phrasenstrukturregeln. KF-PSG DCG S  NP VP s --> np, vp. VP  V NP vp --> v, np. V  klaut v --> [klaut]. NP  paul np --> [paul]. NP  bananen np --> [bananen]. GK Prolog - Parsing mit DCGs

12 Externe vs. interne Notation
DCGs werden beim Laden (consult) eines Prolog-Programms mit Differenzlisten annotiert. Editor (extern) Datenbasis (intern) s --> np, vp. s(A,C):- np(A,B), vp(B,C). vp --> v, np. vp(A,C):- v(A,B), np(B,C). v --> [klaut]. v([klaut|T],T). np --> [paul]. np([paul|T],T). np --> [bananen]. np([bananen|T],T). GK Prolog - Parsing mit DCGs

13 Vergleiche DCGs mit append_dl/3
s(A,C):- np(A,B), vp(B,C). append_dl((A,B), (B,C), (A,C)). Präfix Suffix Konkatenation GK Prolog - Parsing mit DCGs

14 Konkatenation von Diff-Listen
append_dl((A,B),(B,C),(A,C)). ?- D1 = ([1,2,3|T1],T1), D2 = ([4,5,6|T2],T2), append_dl(D1,D2,D3). D1 = ([1,2,3,4,5,6|T2],[4,5,6|T2]) (A,B) D2 = ([4,5,6|T2],T2]) (B,C) D3 = ([1,2,3,4,5,6|T2],T2) (A,C) T1 = [4,5,6|T2] B T2 = _1 C GK Prolog - Parsing mit DCGs

15 Ableitung „Paul klaut Bananen“
?- s([paul,klaut,bananen],[]). A C C s([paul,klaut,bananen|[]],[]) A B B C np([paul|[klaut,bananen]], vp([klaut,bananen|[]], [klaut,bananen]) []) B D D C v([klaut|[bananen]], np([bananen|[]], [bananen]) []) GK Prolog - Parsing mit DCGs

16 GK Prolog - Parsing mit DCGs
DCGs zu Klauseln p1 --> p2,...,pn. p1(V1,Vn) --> p2(V1,V2),...,pn(Vn-1,Vn). p --> [Atom]. p([Atom|T],T). GK Prolog - Parsing mit DCGs

17 GK Prolog - Parsing mit DCGs
transDCG/2 transDCG((L1-->R1),(L2:-R2)):- transDCG(L1,X,Y,L2), transDCG(R1,X,Y,R2). transDCG((C11,C12),X,Z,(C21,C22)):- transDCG(C11,X,Y,C21), transDCG(C12,Y,Z,C22). transDCG(C1,X,Y,C2):- C1 =.. [C1], % Test C2 =.. [C1,X,Y]. transDCG([Lex],[Lex|T],T,true). GK Prolog - Parsing mit DCGs

18 GK Prolog - Parsing mit DCGs
Anfragen an transDCG/2 ?- transDCG((s --> np, vp),X). X = s(A,C):- np(A,B), vp(B,C) yes ?- transDCG((v --> [klaut]),X). X = v([klaut|T],T):- true ?- transDCG((np --> np, [und], np),X). X = np(A,C):- np(A,[und|B]), true, np(B,C) GK Prolog - Parsing mit DCGs

19 Evolution unserer Grammatiken
1 2 3 s(NP1,V,NP2):- np(NP1), vp(V,NP). v(klaut). s(S):- np(NP), vp(VP), append(NP,VP,S). v([klaut]). s --> np, vp. v --> [klaut]. GK Prolog - Parsing mit DCGs

20 GK Prolog - Parsing mit DCGs
Rekursive Regeln „der schöne schöne ... schöne Frosch“ np --> det, adjs, n. adjs --> []. adjs --> adj, adjs. adj --> [schöne]. det --> [der]. n --> [frosch]. GK Prolog - Parsing mit DCGs

21 GK Prolog - Parsing mit DCGs
Linksrekursion „Klaus und Maria und ... und Dieter“ np --> np, [und], np. np --> [klaus]. np --> [maria]. ... np --> [dieter]. loopt immer np --> [klaus]. np --> [maria]. ... np --> [dieter]. np --> np, [und], np. loopt bei ungrammatischen NPs GK Prolog - Parsing mit DCGs

22 Umgang mit Linksrekursion
Die Terminations-Probleme bei Linksrekursion liegen im top-down-depth-first-Verfahren des Prolog-Interpreters begründet. Lösungen: Linksrekursion vermeiden. Bottom-up oder left-corner-Interpreter verwenden. Left-corner-transform auf die Regeln anwenden. GK Prolog - Parsing mit DCGs

23 GK Prolog - Parsing mit DCGs
Parametrisierte DCGs p1(P11,...,P1i) --> p2(P21,...,P2j), ..., pn(Pn1,...,Pnk). p1(P11,...,P1i,V1,Vn):- p2(P21,...,P2j,V1,V2), ..., pn(Pn1,...,Pnk,Vn-1,Vn). GK Prolog - Parsing mit DCGs

24 GK Prolog - Parsing mit DCGs
Agreement np(Agr) --> det(Agr), n(Agr). det(agr(nom,sg,masc))--> [der]. det(agr(dat,sg, fem))--> [der]. det(agr(nom,sg, fem))--> [die]. det(agr(dat,sg,masc))--> [dem]. det(agr(acc, _,masc))--> [den]. n( agr( _,sg,masc))--> [mann]. n( agr( _,sg, fem))--> [frau]. n( agr(acc,pl,masc))--> [männern]. GK Prolog - Parsing mit DCGs

25 GK Prolog - Parsing mit DCGs
Seiteneffekte det(agr(K,N,G)) --> [der], {N=sg, ((K = nom, G = masc); (K = dat, G = fem ))}. det(agr(K,N,G),[der|T],T):- N=sg, ((K = nom, G = masc); (K = dat, G = fem )). GK Prolog - Parsing mit DCGs


Herunterladen ppt "Prolog Grundkurs WS 99/00 Christof Rumpf"

Ähnliche Präsentationen


Google-Anzeigen