1 / 20

Parsing

Parsing. Prolog Aufbaukurs SS 2000 Heinrich-Heine-Universität Düsseldorf Christof Rumpf. Parsing. engl. to parse : „grammatisch zerlegen“ Ein Parser ist ein Automat, der einer Zeichenkette aufgrund einer Grammatik einen Syntaxbaum zuordnet. Grammatik Parser Syntaxbaum Zeichenkette. In.

hilda-haney
Download Presentation

Parsing

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Parsing • engl. to parse: „grammatisch zerlegen“ • Ein Parser ist ein Automat, der einer Zeichenkette aufgrund einer Grammatik einen Syntaxbaum zuordnet. Grammatik ParserSyntaxbaum Zeichenkette In Out Parsing

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

  4. Beispielgrammatik (CFPSG) 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). 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 1 nicht für top-down-Parser 2 nicht für bottom-up-Parser Parsing

  5. Top-Down-Traversierung top-down depth-first left-to-right S1 NP2 VP7 D3 N5 V8 NP10 D11 N13 the4 dog6 chased9 the12 cat14 Parsing

  6. 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 Parsing

  7. Problem: Linksrekursion • Top-Down-Strategie loopt bei linksrekursiven Regeln:NP  NP Conj NP • Auswege: • Linksrekursion vermeiden • Bottom-Up- oder Left-Corner-Strategie Parsing

  8. Bottom-Up-Traversierung S14 NP5 VP13 D2 N4 V7 NP12 D9 N11 the1 dog3 chased6 the8 cat10 Parsing

  9. 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. Parsing

  10. Shift-Reduce-Beispiel Parsing

  11. 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. Parsing

  12. Problem: Leere Kategorien • Bottom-Up-Strategie loopt bei leeren Kategorien.Det  . • Auswege • Leere Kategorien vermeiden. • Left-Corner-Strategie mit Linking. Parsing

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

  14. Left-Corner-Traversierung nach Covington 1994 S1 NP4 VP7/10 D3 N5 V9 NP11/14 D13 N15 the2 dog6 chased8 the12 cat16 Parsing

  15. Left-Corner-Traversierung nach Rumpf S1 NP6 VP7 D3 N4 V9 NP10 D12 N13 the2 dog5 chased8 the11 cat14 Parsing

  16. 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. Parsing

  17. 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 Parsing

  18. 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. link(np, s).link(d, np).link(d, s).link(v, vp).link(X, X). S  NP VPNP  D NVP  V NP le(np, s)le(d, np)le(v, vp) Parsing

  19. 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). Parsing

  20. 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. Parsing

More Related