Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Parsing Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf.

Ähnliche Präsentationen


Präsentation zum Thema: "Parsing Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf."—  Präsentation transkript:

1 Parsing Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf

2 17.04.2000Parsing2 engl. to parse: grammatisch zerlegen Ein Parser ist ein Automat, der einer Zeichenkette aufgrund einer Grammatik einen Syntaxbaum zuordnet. Grammatik Parser Syntaxbaum Zeichenkette InOut

3 17.04.2000Parsing3 Parsingstrategien top-down bottom-up left-corner Parsingstrategien unterscheiden sich durch die Reihenfolge, in der bei der Konstruktion des Syntaxbaums die Knoten im Baum besucht werden. depth-first breadth-first left-to-right right-to-left

4 17.04.2000Parsing4 Beispielgrammatik (CFPSG) rule(s,[np,vp]). rule(np,[d,n]). rule(np,[np,conj,np]). 1 rule(vp,[v,np]). rule(vp,[v,np,pp]). rule(pp,[p,np]). rule(d,[]). 2 word(d,the). word(conj,and). word(p,near). word(n,dog). word(n,dogs). word(n,cat). word(n,cats). word(n,elephant). word(n,elephants). word(v,chase). word(v,chases). word(v,see). word(v,sees). word(v,amuse). word(v,amuses). 1 nicht für top-down-Parser 2 nicht für bottom-up-Parser

5 17.04.2000Parsing5 Top-Down-Traversierung S 1 NP 2 VP 7 D 3 N 5 V 8 NP 10 D 11 N 13 the 4 dog 6 chased 9 the 12 cat 14 top-down depth-first left-to-right

6 17.04.2000Parsing6 Top-Down-Parser parse(C,[Word|S],S) :- word(C,Word). parse(C,S1,S) :- rule(C,Cs), daughters(Cs,S1,S). daughters([C|Cs],S1,S) :- parse(C,S1,S2), daughters(Cs,S2,S). daughters([],S,S). % Wort der Kategorie C % Lexikon-Zugriff % Phrase der Kategorie C % Regel mit Mutter C % Töchter Cs parsen % Tochter der Kategorie C % ist Mutter eines Teilbaums % Schwestern parsen % Alle Töchter verarbeitet

7 17.04.2000Parsing7 Problem: Linksrekursion Top-Down-Strategie loopt bei linksrekursiven Regeln: NP NP Conj NP Auswege: –Linksrekursion vermeiden –Bottom-Up- oder Left-Corner-Strategie

8 17.04.2000Parsing8 Bottom-Up-Traversierung S 14 NP 5 VP 13 D 2 N 4 V 7 NP 12 D 9 N 11 the 1 dog 3 chased 6 the 8 cat 10

9 17.04.2000Parsing9 Shift-Reduce-Algorithmus Shift: lege ein Wort aus der Eingabekette auf einen Stapel. Reduce: reduziere den Stapel mit Hilfe der Grammatik soweit wie möglich. Falls die Eingabekette noch Wörter enthält, gehe zu Shift, sonst halte.

10 17.04.2000Parsing10 Shift-Reduce-Beispiel

11 17.04.2000Parsing11 Shift-Reduce-Parser parse(S,Result) :- shift_reduce(S,[],Result). shift_reduce(S,Stack,Result) :- shift(Stack,S,NewStack,S1), reduce(NewStack,ReducedStack), shift_reduce(S1,ReducedStack,Result). shift_reduce([],Result,Result). shift(X,[H|Y],[H|X],Y). reduce(Stack,ReducedStack) :- brule(Stack,Stack2), reduce(Stack2,ReducedStack). reduce(Stack,Stack). brule([vp,np|X],[s|X]). brule([np,conj,np|X],[np|X]). %... brule([Word|X],[Cat|X]) :- word(Cat,Word). % S = String, Result = Stapel. % Initialisierung: leerer Stapel. % Nichtleere Eingabekette S. % Lege ein Wort auf den Stapel. % Reduziere den Stapel. % Verarbeite Rest S1. % Leere Eingabekette. % Lege ein Wort auf den Stapel. % Reduziere Stack durch Anwendung % einer Backward-Regel. % Reduziere weiter. % Keine Reduktion mehr möglich. % Backward-Regel. % Linksrekursive Backward-Regel. %...weitere Backward-Regeln. % Lexikon-Zugriff.

12 17.04.2000Parsing12 Problem: Leere Kategorien Bottom-Up-Strategie loopt bei leeren Kategorien. Det. Auswege –Leere Kategorien vermeiden. –Left-Corner-Strategie mit Linking.

13 17.04.2000Parsing13 Left-Corner-Algorithmus Um eine Konstituente von Typ C zu Parsen 1.Nimm das erste Wort der Kette mit Kategorie W. 2.Vervollständige C a)falls C=W: fertig b)sonst: i.Finde eine Regel mit W als linker Ecke (erstes Element der rechten Seite) und Mutter M. ii.Parse die Schwestern von W. iii.Ersetze W durch M und gehe zu Schritt 2.

14 17.04.2000Parsing14 Left-Corner-Traversierung S 1 NP 4 VP 7/10 D 3 N 5 V 9 NP 11/14 D 13 N 15 the 2 dog 6 chased 8 the 12 cat 16 nach Covington 1994

15 17.04.2000Parsing15 Left-Corner-Traversierung S 1 NP 6 VP 7 D 3 N 4 V 9 NP 10 D 12 N 13 the 2 dog 5 chased 8 the 11 cat 14 nach Rumpf

16 17.04.2000Parsing16 Left-Corner-Parser lcp(C,[Word|S2],S):- word(W,Word), complete(W,C,S2,S). complete(C,C,S,S). complete(W,C,S1,S):- rule(P,[W|Rest]), lc_sisters(Rest,S1,S2), complete(P,C,S2,S). lc_sisters([C|Cs],S1,S):- lcp(C,S1,S2), lc_sisters(Cs,S2,S). lc_sisters([],S,S). % Nimm erstes Wort der Kette. % Bestimme Kategorie. % Vervollständige Kette. % Akt. Kat = erwartet. % Akt. Kat \= erwartet. % Akt. Kat ist linke Ecke. % Parse LC-Schwestern. % Vervollständige Kette. % Aktuelle Schwester ist % Mutter eines Teilbaums. % Parse übrige Schwestern. % Alle Töchter geparst.

17 17.04.2000Parsing17 Problem: Leere Kategorien Erweiterung für leere Kategorien: lcp(C,S2,S):- rule(W,[]), complete(W,C,S2,S). Problem: Left-Corner-Strategie loopt beim Backtracking, da beliebig viele leere Kategorien eingebaut werden können. Ausweg: Linking

18 17.04.2000Parsing18 Linking Die Linke-Ecke-Relation bestimmt die erste Konstituente in der Expansion einer Phrase. Die Linking-Relation ist die reflexive, transitive Hülle der Linke-Ecke-Relation. S NP VP NP D N VP V NP le(np, s) le(d, np) le(v, vp) link(np, s). link(d, np). link(d, s). link(v, vp). link(X, X).

19 17.04.2000Parsing19 LC-Parser mit Linking lcp(C,[Word|S2],S):- word(W,Word), link(W,C), complete(W,C,S2,S). lcp(C,S2,S):- rule(W,[]), link(W,C), complete(W,C,S2,S).

20 17.04.2000Parsing20 Literatur Covington, Michael A. (1994): Natural Language Processing for Prolog Programmers. Chap. 6: Parsing Algorithms. Prentice-Hall. Gazdar, Gerald & Chris Mellish (1989): Natural Language Processing in Prolog. Addison Wesley.


Herunterladen ppt "Parsing Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf."

Ähnliche Präsentationen


Google-Anzeigen