Transcript Tokenizer

Vorschau
Prolog Aufbaukurs SS 2003
Heinrich-Heine-Universität Düsseldorf
Christof Rumpf
Tokenizer
• Ein Tokenizer ist ein Programm, das
beliebigen Zeicheninput in eine Liste von
Tokens umwandelt.
• Ziel ist die Verarbeitung von Daten, die
nicht in Prolog-Syntax vorliegen.
• Quelle der Daten kann die Tastatur oder
eine Datei sein.
22.04.2003
Vorschau Prolog Aufbaukurs
2/46
Tokens
• Ein Token ist ein Intervall in einer
Zeichenfolge, der per Konvention als nicht
weiter zerlegbar gilt.
• Z.B. sind die Wörter dieser Präsentation
durch Leerzeichen getrennte Tokens.
• Zeichen wie Punkt, Komma und
Zeilenwechsel können ebenfalls Trenner
sein oder auch selbständige Tokens bilden.
22.04.2003
Vorschau Prolog Aufbaukurs
3/46
Anwendungen
• Natürlichsprachlicher Input
– Umwandeln einer Zeichenfolge in eine
Wortliste.
• Compilerbau
– Übergabe einer Tokenliste an einen Compiler.
• Datenbanken
– Import von Daten aus einer externen
Datenbank.
22.04.2003
Vorschau Prolog Aufbaukurs
4/46
Literatur
• O‘Keefe, Richard A. (1990): The Craft of
Prolog. Chap. 10: Writing Tokenizers in
Prolog. MIT Press.
22.04.2003
Vorschau Prolog Aufbaukurs
5/46
Parsing
• engl. to parse: „grammatisch zerlegen“
• Ein Parser ist ein Automat, der einer
Zeichenkette aufgrund einer Grammatik
einen Syntaxbaum zuordnet.
Grammatik
In
Parser
Out
Syntaxbaum
Zeichenkette
22.04.2003
Vorschau Prolog Aufbaukurs
6/46
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
22.04.2003
• depth-first
• breadth-first
Vorschau Prolog Aufbaukurs
• left-to-right
• right-to-left
7/46
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
1 nicht für top-down-Parser
2 nicht für bottom-up-Parser
22.04.2003
Vorschau Prolog Aufbaukurs
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).
8/46
Top-Down-Traversierung
top-down depth-first left-to-right
S1
NP2
D3
the4
22.04.2003
VP7
N5
dog6
V8
chased9
Vorschau Prolog Aufbaukurs
NP10
D11
N13
the12
cat14
9/46
Top-Down-Parser
parse(C,[Word|S],S) :word(C,Word).
% Wort der Kategorie C
% Lexikon-Zugriff
parse(C,S1,S) :rule(C,Cs),
daughters(Cs,S1,S).
% Phrase der Kategorie C
% Regel mit Mutter C
% Töchter Cs parsen
daughters([C|Cs],S1,S) :parse(C,S1,S2),
daughters(Cs,S2,S).
% Tochter der Kategorie C
% ist Mutter eines Teilbaums
% Schwestern parsen
daughters([],S,S).
% Alle Töchter verarbeitet
22.04.2003
Vorschau Prolog Aufbaukurs
10/46
Bottom-Up-Traversierung
S14
NP5
D2
the1
22.04.2003
VP13
N4
dog3
V7
chased6
Vorschau Prolog Aufbaukurs
NP12
D9
N11
the8
cat10
11/46
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.
22.04.2003
Vorschau Prolog Aufbaukurs
12/46
Left-Corner-Traversierung
nach Rumpf
S1
NP6
D3
the2
22.04.2003
VP7
N4
dog5
V9
chased8
Vorschau Prolog Aufbaukurs
NP10
D12
N13
the11
cat14
13/46
Chart-Parser
• Ein Chart-Parser speichert Information über
bereits geparste Teilstrukturen in einer
Tabelle (Chart).
• Bereits geleistete Arbeit kann beim
Backtracking aus der Tabelle gelesen
werden.
22.04.2003
Vorschau Prolog Aufbaukurs
14/46
Motivation: trashing
VP
V
NP
PP
VP  V NP
D
VP  V NP PP
chased
22.04.2003
the
N
cat
Vorschau Prolog Aufbaukurs
P
into
NP
D
N
the
garden
15/46
Chart
• In der Tabelle wird für jede Konstituente ein
Eintrag gespeichert:
– Name der Konstituente
– wo sie beginnt
– wo sie endet
• Beispiel
chart(np,[the,cat,into,the,garden],[into,the,garden]).
22.04.2003
Vorschau Prolog Aufbaukurs
16/46
Earley-Chart: the dog chases the cat
chart(start,[the,dog,chases,the,cat],[s],
[the,dog,chases,the,cat]).
chart(s,
[the,dog,chases,the,cat],[np,vp],[the,dog,chases,the,cat]).
chart(np,
[the,dog,chases,the,cat],[d,n], [the,dog,chases,the,cat]).
chart(np,
[the,dog,chases,the,cat],[n],
[dog,chases,the,cat]).
chart(np,
[the,dog,chases,the,cat],[],
[chases,the,cat]).
chart(s,
[the,dog,chases,the,cat],[vp],
[chases,the,cat]).
chart(vp,
[chases,the,cat],[v,np],
[chases,the,cat]).
chart(vp,
[chases,the,cat],[v,np,pp],
[chases,the,cat]).
chart(vp,
[chases,the,cat],[np],
[the,cat]).
chart(vp,
[chases,the,cat],[np,pp],
[the,cat]).
chart(np,
[the,cat],[d,n],
[the,cat]).
chart(np,
[the,cat],[n],
[cat]).
chart(np,
[the,cat],[],
[]).
chart(vp,
[chases,the,cat],[],
[]).
chart(s,
[the,dog,chases,the,cat],[],
[]).
chart(start,[the,dog,chases,the,cat],[],
[]).
chart(vp,
[chases,the,cat],[pp],
[]).
22.04.2003
Vorschau Prolog Aufbaukurs
17/46
Performance
Parser
DCG
Top-Down
Bottom-Up
Left-Corner ohne Linking
Left-Corner mit Linking
Chart ohne Completeness-Check
Chart mit Completeness-Check
Chart mit Subsumptions-Check
Earley ohne Subsumptions-Check
Earley mit Subsumptions-Check
22.04.2003
ALS Prolog
Quintus Prolog
20 MHz 80386 Sparcstation 1+
3,4
0,3
6,0
1,2
38,3
8,4
12,7
2,6
12,0
2,5
47,2
20,5
59,3
27,3
71,3
32,2
320,3
144,5
989,8
172,0
Vorschau Prolog Aufbaukurs
18/46
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.
22.04.2003
Vorschau Prolog Aufbaukurs
19/46
PATR II
Interpreter
Prolog Aufbaukurs SS 2000
Heinrich-Heine-Universität Düsseldorf
Christof Rumpf
Grammatik-Formalismen
• Grammatikformalismen sind Sprachen zur
Beschreibung von Sprachen.
– Metasprache (Formalismus: Beschreibungsebene)
– Objektsprache (natürliche Sprache: Objektebene)
• Anwendungszweck von Formalismen:
– Werkzeug-orientiert (PATR II, ALE, QType, ...)
– Theorie-orientiert (LFG, GPSG, HPSG, ...)
22.04.2003
Vorschau Prolog Aufbaukurs
21/46
PATR-Design-Entscheidungen
• Oberflächenbasiert (vs. transformationiell)
• Informationstragend (linguistisches Wissen)
• Induktiv (Berechnung der
Informationskombination)
• Deklarativ (was vs. wie wird berechnet)
• Merkmalsbasiert bzw. Constraintbasiert
(komplexe Merkmalsstrukturen)
22.04.2003
Vorschau Prolog Aufbaukurs
22/46
Abdeckung theoretischer
Frameworks
•
•
•
•
•
•
•
CG
GPSG
HPSG
LFG
FUG
DCG
...
22.04.2003
categorial grammar
generalized phrase structure grammar
head driven phrase structure grammar
lexical functional grammar
functional unification grammar
definite clause grammar
Vorschau Prolog Aufbaukurs
23/46
PATR Basisoperationen
• Konkatenation
– String-Kombination auf Basis eines
kontextfreien Phrasenstrukturgerüst. Jeder
(Teil-)String wird mit einer Merkmalsstruktur
assoziiert.
• Unifikation
– Informations-Kombination durch monotone
Unifikation von Merkmalsstrukturen.
22.04.2003
Vorschau Prolog Aufbaukurs
24/46
Merkmalsstrukturen
• Seien F (features) und V (values) Mengen.
Dann ist FS (feature structures) eine Menge von
partiellen Funktionen F  V mit V  FS1.
 num : sing
 pers : 3 


 cat : NP



num
:
sing


 agr :
 pers : 3  



1: Bzw. V ohne atomare Werte.
22.04.2003
Vorschau Prolog Aufbaukurs
25/46
Unifikation
• Die Unifikation FS1  FS2 = FS0 ist die allgemeinste
Merkmalsstruktur FS0, so dass FS1  FS0 und FS2  FS0.
• Falls FS0 nicht existiert, scheitert die Unifikation.

agr :  num : sing ò agr :  pers : 3 = agr :

 num : sing  
 pers : 3  


agr : num : sing ò agr : num : plur  = fail
22.04.2003
Vorschau Prolog Aufbaukurs
26/46
PATR II Merkmalslogik
• Eine Merkmalslogik ist eine Beschreibungssprache für Merkmalsstrukturen.
• Ein Ausdruck Li  L der PATR II-Merkmalslogik
L ist eine Abbildung Li  FS (vs. Li  (FS) mit
Negation und Disjunktion).
• Bestandteile der PATR II-Merkmalslogik sind
– Pfadgleichungen P
– Makros M
– Konjunktion
22.04.2003
L = (P  M)*
Vorschau Prolog Aufbaukurs
27/46
Pfadgleichungen
• Seien FSi  FS, Fj  F, AVk  AV (atomare Werte),
mit AV  V und sei P die Menge der Pfade
<FSi Fj*>, dann ist G die Menge der
Pfadgleichungen mit Pi = AVk  Pi = Pj.
• Originalnotation:
– <S head> = <VP head>
– <NP head agr num> = sg
• Prolog-Notation:
– S:head === VP:head
– NP:head:agr:num === sg
22.04.2003
Vorschau Prolog Aufbaukurs
:- op(510,xfy, : ).
:- op(600,xfx,===).
28/46
Parsing-Session
22.04.2003
Vorschau Prolog Aufbaukurs
29/46
PATR II Compiler
Prolog Aufbaukurs SS 2000
Heinrich-Heine-Universität Düsseldorf
Christof Rumpf
3 Compiler-Komponenten
• Tokenizer
– Input: PATR II-Grammatik
– Output: Token-Zeilen
• Präprozessor
– Input: Token-Zeilen
– Output: Token-Sätze
• Syntax-Compiler
compile_grammar(File):clear_grammar,
tokenize_file(File),
read_sentences,
compile_sentences.
– Input: Token-Sätze
– Output: Prolog-Klauseln
22.04.2003
Vorschau Prolog Aufbaukurs
31/46
Tokenizer-Input
; Shieb1.ptr
; Sample grammar one from Shieber 1986
; Grammar Rules
; ------------------------------------------------------------
; Lexicon
; ----------------------------------------------------------------
Rule {sentence formation}
S --> NP VP:
<S head> = <VP head>
<VP head subject> = <NP head>.
Word uther:
<cat> = NP
<head agreement gender> = masculine
<head agreement person> third
<head agreement number> = singular.
Rule {trivial verb phrase}
VP --> V:
<VP head> = <V head>.
22.04.2003
Vorschau Prolog Aufbaukurs
32/46
Tokenizer Output = Präprozessor Input
line(1,[o($;$),b(1),u($Shieb1$),o($.$),l($ptr$)]).
line(2,[o($;$),b(1),u($Sample$),b(1),l($grammar$),b(1),l($one$),b(1),l($from$),b(1), ...
line(3,[ ]).
line(4,[ ]).
line(5,[o($;$),b(1),u($Grammar$),b(1),u($Rules$)]).
line(6,[o($;$),b(1),o($-$),o($-$),o($-$),o($-$),o($-$),o($-$),o($-$),o($-$),o($-$),o($-$), ...
line(7,[ ]).
line(8,[u($Rule$),b(1),o(${$),l($sentence$),b(1),l($formation$),o($}$)]).
line(9,[b(2),u($S$),b(1),o($-$),o($-$),o($>$),b(1),u($NP$),b(1),u($VP$),o($:$)]).
line(10,[b(1),o($<$),u($S$),b(1),l($head$),o($>$),b(1),o($=$),b(1),o($<$),u($VP$),b(1), ...
line(11,[b(1),o($<$),u($VP$),b(1),l($head$),b(1),l($subject$),o($>$),b(1),o($=$),b(1), ...
line(12,[b(1)]).
line(13,[u($Rule$),b(1),o(${$),l($trivial$),b(1),l($verb$),b(1),l($phrase$),o($}$)]).
line(14,[b(2),u($VP$),b(1),o($-$),o($-$),o($>$),b(1),u($V$),o($:$)]).
line(15,[b(1),o($<$),u($VP$),b(1),l($head$),o($>$),b(1),o($=$),b(1),o($<$),u($V$),b(1),...
...
line(41,[b(1),o($<$),l($head$),b(1),l($subject$),b(1),l($agreement$),b(1),l($number$),...
line(42,[eof]).
22.04.2003
Vorschau Prolog Aufbaukurs
33/46
Präprozessor Output = Compiler Input
Der Präprozessor entfernt Kommentare und Leerzeichen und
fasst mit einem Punkt terminierte Sätze aus mehreren Zeilen
zusammen. Der eigentliche Compiler kann sich dann auf das
wesentliche konzentrieren.
sentence( 1,11,[u($Rule$),o(${$),l($sentence$),l($formation$),o($}$),...
sentence(12,15,[u($Rule$),o(${$),l($trivial$),l($verb$),l($phrase$),o($}$),...
sentence(16,24,[u($Word$),l($uther$),o($:$),o($<$),l($cat$),o($>$),o($=$),...
sentence(25,30,[u($Word$),l($knights$),o($:$),o($<$),l($cat$),o($>$),o($=$),...
sentence(31,36,[u($Word$),l($sleeps$),o($:$),o($<$),l($cat$),o($>$),o($=$),...
sentence(37,41,[u($Word$),l($sleep$),o($:$),o($<$),l($cat$),o($>$),o($=$),...
sentence(42,42,[eof]).
22.04.2003
Vorschau Prolog Aufbaukurs
34/46
Compiler Output
A ---> B , C ::
A : cat === 'S',
B : cat === 'NP',
C : cat === 'VP',
A : head === C : head,
C : head : subject === B : head.
A ---> uther ::
A : cat === 'NP',
A : head : agreement : gender === masculine,
A : head : agreement : person === third,
A : head : agreement : number === singular.
22.04.2003
Vorschau Prolog Aufbaukurs
35/46
Literatur
• Shieber, Stuart (1986): An Introduction to
Unification-based Approaches to Grammar. CSLI
Lecture Notes.
• Gazdar, Gerald & Chris Mellish (1989): Natural
Language Processing in Prolog. Addison Wesley.
• Covington, Michael A. (1994): Natural Language
Processing for Prolog Programmers. Chap. 6:
Parsing Algorithms. Prentice-Hall.
22.04.2003
Vorschau Prolog Aufbaukurs
36/46
Typinferenz
Prolog Aufbaukurs SS 2000
Heinrich-Heine-Universität Düsseldorf
Christof Rumpf
Hintergrund
• Getypte Merkmalsstrukturen sind von
Bedeutung insbesondere für die HPSG.
• Implementierte Systeme zur Verarbeitung
getypter Merkmalsstrukturen sind u.a. ALE,
CUF, LKB, TFS, TROLL, ...
• Die nachfolgenden Definitionen liegen dem
Düsseldorfer System QType zugrunde, das
sich seit 1997 in Entwicklung befindet.
22.04.2003
Vorschau Prolog Aufbaukurs
38/46
Getypte Merkmalsstrukturen
• Sind Mengen von Attribut-Wert-Paaren.
• Jede Merkmalsstruktur hat einen Typ.
• Jeder Wert eines Attributs ist eine getypte
Merkmalsstruktur.
• Die Typen sind in einer Vererbungshierarchie
(Summenhalbverband) angeordnet, innerhalb der AttributWert-Paare top-down vererbt werden.
• Die Vererbungshierarchie wird durch eine Typensignatur
etabliert, in der Klassen von Merkmalsstrukturen definiert
werden.
22.04.2003
Vorschau Prolog Aufbaukurs
39/46
Typensignatur - Syntax
• 2 Mengen: Types, Features
• 2 Relationen:
– unmittelbarer Subtyp
– Appropriateness
>>
::
• Typdefinition
Supertyp
>> Subtyp1, ..., Subtypn
:: Feature1:Typ1, ...,Featurem:Typm.
22.04.2003
Vorschau Prolog Aufbaukurs
40/46
Typhierarchie
top
featval
category
verbal
np
v vp s
vform
num
gen
masc fem neut
22.04.2003
sing plur
head
finite base
vhead nhead
Vorschau Prolog Aufbaukurs
agr
pers
first second third
41/46
FS zu Typ s in ‚Shieber 1‘
s
 HEAD : vhead


 np

 HEAD : nhead
SUBJECT
:







 AGREEMENT :







 FORM : vform
22.04.2003






 agr

 NUMBER : num   


 PERSON : pers   


 GENDER : gen   


Vorschau Prolog Aufbaukurs
42/46
Typensignatur-Interpreter
• type(?Type)
• immediate_subtype(?ImmediateSubType,?Type)
• subtype(?SubType,?Type)
• immediate_supertype(?SuperType,?Type)
• supertype(?SuperType,?Type)
• lb(?Type1,?Type2,?Type3)
lower bound
• glb(?Type1,?Type2,?Type3)
greatest lower bound
• ub(?Type1,?Type2,?Type3)
upper bound
• lub(?Type1,?Type2,?Type3)
least upper bound
• complement(?Type,-Complement)
22.04.2003
Vorschau Prolog Aufbaukurs
43/46
Interpretieren vs. Kompilieren
• Eine Typensignatur enthält implizit viele
Relationen.
• Ein Interpreter macht diese Relationen explizit.
– Laufzeit-, Runtime-, bzw. Online-Berechnung
• Ein Compiler berechnet (alle) Relationen
vollständig und liefert das Ergebnis der
Berechnung zum direkten Zugriff.
– Kompilezeit-, Compiletime-, bzw. Offline-Berechnung
22.04.2003
Vorschau Prolog Aufbaukurs
44/46
Merkmalslogik
• Eine Merkmalslogik definiert eine Beschreibungssprache
für Merkmalsstrukturen.
• Die Semantik eines Ausdrucks in unserer Merkmalslogik
wird durch die partielle Funktion mgu definiert:
mgu: Descr  2FSs
• Partiell: nicht alle Beschreibungen haben Lösungen.
• Potenzmenge: manche Beschreibungen haben mehrere
Lösungen, da durch Disjunktion und Negation ein
Nichtdeterminismus eingebracht wird.
22.04.2003
Vorschau Prolog Aufbaukurs
45/46
Bestandteile der Logik
•
•
•
•
•
•
•
Variablen
•
Typen
•
Attribut-Wert-Paare •
Konjunktion
•
Disjunktion
•
Negation
•
Makros
•
22.04.2003
PrologVar  DESCR
Type  DESCR
F:DESCR  DESCR
DESCR, DESCR  DESCR
DESCR; DESCR  DESCR
- DESCR  DESCR
@MacroHead  DESCR
Vorschau Prolog Aufbaukurs
46/46
mgu/1
agr
mgu(Descr):mgu(Descr,top, FS),
print_fs(FS).
 agr

 cas : cas 


 num : num 


gen
:
gen


22.04.2003
Vorschau Prolog Aufbaukurs
(_1,agr,
[
cas:(_2,cas,[]),
num:(_3,num,[]),
gen:(_4,gen,[])])
47/46