Diese Einführung in die Syntax behandelt Grundbegriffe der Grammatik (wie
Kongruenz, Rektion und Valenz) und wesentliche syntaktische Konstruktionen
des Deutschen im Hinblick auf eine Verwendung in der maschinellen
Sprachverarbeitung. Dazu werden die Klassifizierungen von Phrasen, ihre
innere Struktur und die zu ihrer Beschreibung verwendeten technischen Hilfsmittel (Formate von
Grammatikregeln, Merkmalstrukturen) erklärt und deren Grenzen
diskutiert.
In den Übungen soll unter anderem eine Grammatik für deutsche
Nominalphrasen und einfache Aussagesätze (mit Objektsätzen) implementiert
werden. Dazu wird die symbolische Programmiersprache PROLOG mit dem eingebauten
Grammatikformat ,,Definite Clause Grammars'' verwendet.
Vorlesungsfolien:
Aufgabenblatt 3
(Lösungsblatt 3)
Siehe Unterverzeichnis Beispiele/testgrammatik*.pl/txt für die
Lösung und Beispiele, die in der Übungstunde vom 23.11. erarbeitet wurde.
Abgabe von Lösungen: jeweils in der folgenden Übungsstunde
Prolog-Programmierung (auch: ,,Symbolisches Programmieren'', ,,Logisches Programmieren'')
Wir verwenden die Programmiersprache Prolog, weil Prolog kontextfreie
Grammatiken (bzw. eine Verallgemeinerung davon) in ausführbare Programme
übersetzt, sodaß wir Grammatikregeln schreiben und Beispiele syntaktisch
analysieren können. (SWI-Prolog, ist in Linux-Distributionen meistens
enthalten, aber auch für Windows frei verfügbar, siehe
http://www.swi-prolog.org. Über diese Seite findet man auch einen
Online-Kurs ,,Learn Prolog Now!'' zum Einarbeiten in Prolog.)
Anzeige des Suchbaums: graphviz_hl,
Neue Version graphviz_hl_v2 von
F.Uvarov, die unter Linux die .ps-Datei mit xdg-open anzeigt,
falls gv nicht installiert ist.
Unter Windows kann man die .ps-Datei mit dem Suchbaum mit cmd /C
start sld.ps anzeigen.
Beispiele für Programme (z.T. aus den Übungsstunden)
alle Dateien als Archiv: DCGparser.tgz;
auspacken mit: tar -xvfz DCGparser.tgz, im CIP-Raum evtl. mit
tar -xvf DCGparser.tgz.
Umrechnung von DCG-Regeln in Prolog-Klauseln: Prolog hat eine solche
Umwandlung eingebaut, die jede n-stellige Kategorie der DCG in ein
n+2-stelliges Prädikat umwandelt, z.B. np(Kasus) in np(Kasus,I,J).
Damit kann man zwar feststellen, ob die Grammatik einen
Ausdruck erkennt, z.B. mit ?- np(Kas,[den,alten,'Baum'],J).,
bekommt aber keine Syntaxanalyse.
Ich habe in den von DCGparser/parser.pl automatisch geladenen Dateien
eine andere Umwandlung eingebaut, die jede n-stellige Kategorie der DCG in ein
n+3-stelliges Prädikat umwandelt, z.B. np(Kasus) in
np(Kasus,Syntaxbaum,I,J).
Man muß DCGparser/parser.pl laden, bevor man die DCG lädt.
Dann funktioniert (auch in Prolog 7.2) die Umwandlung mit
Baumausgabe in Textform, d.h. mit ?- parse.
Wenn man eine DCG lädt, bevor man DCGparser/parser.pl lädt,
wird die in Prolog eingebaute Umwandlung benuzt, mit der parse/0
nicht funktioniert. (Man bekommt dann eine Fehlermeldung, daß z.B. ein
Prädikat np/3 definiert sei, aber nicht np/4. In dem Fall
sollte man erst DCGparser/parser.pl und dann seine DCG nochmal laden.)
Tokenizer: In DCGparser/tokenizer.mini.pl ist neben
parse/0 ein parse/1 auf Toplevel verfügbar, mit dem man eine Datei von
Testbeispielen durch z.B. ?- parse('np.testbeispiele.txt'). lesen und
syntaktisch analysieren lassen kann. (Man kann sich die Analysen in eine Datei
schreiben lassen, wenn man in tokenizer.mini.pl bei der Klausel für
parse/1 die drei auskommentierten Zeilen aktiviert.)
Nominalphrasengrammatik:
Die Datei np.folien.pl lädt DCGparser/parser.pl und
lexikon_np.pl selbständig, Sie brauchen in Prolog nur ?-
['np.folien.pl']. oder ?- consult('np.folien.pl'). und dann
?- parse. | : das Kind.<Return> zu sagen.
Nachtrag 25.11.2016, 28.11.: ich habe ein paar Änderungen für Nomen mit
Argumenten im Lexikon und in den Grammatikregeln gemacht und weitere
Lexikoneinträge (damit bei den Hausaufgaben mehr erkannt wird).
In DCGparser.tgz ist ein parsed(+Datei) eingebaut, das alle
Beispiele aus der Datei analysiert, in syntaxbaeume.tmp.dot/ps schreibt und graphisch anzeigt.
(automatisch erzeugt durch die Ladedatei wird: saetze.pl)
Man sollte bei den Metaregeln die rahmenauswahl klein halten, damit
nicht Satzregeln für zu viele Verbarten -also eine zu große Grammatik- erzeugt werden.
File translated from
TEX
by
TTH,
version 3.67. On 8 Mar 2017, 19:15.