WAS MAN ALLES FALSCH MACHEN KANN, WIE MAN ES HERAUSFINDET, UND WIE MAN ES REPARIERT!
Wie bei natürlichen Sprachen unterscheidet man auch bei formalen Sprachen und Programmiersprachen zwischen der Syntax und der Semantik von Ausdrücken (Sätzen, Texten, Programmen). Die Syntax einer Sprache legt durch die Regeln fest, wie die Ausdrücke der Sprache gebildet werden können. Die Semantik legt die Bedeutung oder Funktion der Ausdrücke fest.
Voraussetzung für die sinnvolle Verarbeitung eines Programmes ist seine syntaktische Korrektheit. Falls ein Ausdruck gegen eine Regel oder mehrere Regeln verstößt, kann er nicht weiterverarbeitet werden, d.h. ihm kann keine Bedeutung oder Funktion zugeordnet werden. Dies gilt für natürliche Sprachen wie Englisch oder Deutsch genauso wie für formale, z.B. für die Prädikatenlogik erster Stufe oder für PATR-Grammatiken.
Ein Programm (eine Grammatik) ist semantisch korrekt, wenn es das tut, was es tun soll. Die syntaktische Korrektheit ist eine notwendige jedoch keine hinreichende Bedingung für die semantische Korrektheit eines Programmes (einer Grammatik). Mit anderen Worten, ein syntaktisch korrektes Programm kann semantisch abweichend sein.
Die syntaktische Korrektheit von
Grammatikdateien wird bereits beim Laden überprüft. Weist eine Grammatikdatei
einen syntaktischen Fehler auf, erscheint die nebenstehende Fehlermeldung. Man
erhält jedoch keinen Hinweis darüber, wo der Fehler zu suchen ist oder von welcher
Art er ist. Fehler können unter Umständen von sehr subtiler Art sein.
Syntaktisch fehlerhafte Lexikondateien
werden problemlos geöffnet, die Fehler machen sich daher erst bei der Anwendung
bemerkbar. Öffnen Sie zusätzlich zur inzwischen korrigierten Grammatikdatei
f01.grm die Lexikondatei f01.lex. Versuchen Sie jetzt den Satz the boy
cried zu analysieren. Es erscheint die nebenstehende Fehlermeldung. Sie
kommt immer dann, wenn ein Wort in der Eingabekette im Lexikon nicht gefunden
wird. Überprüfen Sie die Lexikon auf Fehler und nehmen Sie die notwendigen
Korrekturen vor, solange bis der Eingabesatz korrekt analysiert wird. Überprüfen
Sie auch den Satz John cried.Die einzelnen Elemente einer Grammatik (Schlüsselwörter, Symbole wie S, NP, VP, der Pfeil -> etc.) müssen durch Leerzeilen, Leerzeichen, oder Tabulatoren voneinander getrennt werden (engl. white space). Diese Trennzeichen werden ansonsten aber ignoriert. Wenn man zwischen vor oder nach dem Pfeil -> das Trennzeichen vergißt, wird es zum Bestandteil des vorangehenden oder nachfolgenden Symbols: NP -> besteht aus den Symbolen NP und ->, NP-> hingegen ist nur ein Symbol.
Textelemente, die nicht zur Grammatik selbst gehören, müssen syntaktisch als Kommentare ausgewiesen sein. Dies kann auf zweierlei Weise geschehen:
Rule S -> NP VP. ;der Punkt signalisiert das Ende einer Regel.
Comment
Kommentare, die mit dem Schlüsselwort "comment" beginnen können
sich ohne zusätzliche syntaktische Mittel über mehrere Zeilen erstrecken.
Der Kommentar endet mit dem nächsten Schlüsselwort (außer comment selbst
natürlich).
End ;"End" ist ein Schlüsselwort, alles was auf "End" folgt wird ignoriert.
Eine Grammatik-Regel in PC-PATR ohne Merkmalsgleichungen (dazu später mehr), besteht aus folgenden Teilen (in der angegebenen Reihenfolge):
Wenn sich ein Satz bei vermutlich
fehlerfreier und vollständiger Grammatik nicht analysieren läßt, dann muss es
am Lexikon liegen. Ein häufiger Fehler ist, daß das Lexikon, so wie es nach
dem Einlesen der Lexikondatei dem Programm verfügbar ist, unvollständig
ist. In diesem Fall wird bei einem Analyseversuch eine Fehlermeldung angezeigt.
Dafür kann es zwei Gründe geben:
Das Lexikon kann aber auch "semantisch" falsch sein, insofern beispielsweise die Wörter falschen Kategrien zugeordnet werden. Der folgende Lexikoneintrag ist vermutlich falsch (boy kann normalerweise nicht als Verb verwendet werden):
\w boy \c V
Leider sind solche Fehler nur dadurch erkennbar, das gar nichts mehr geht. Was dann zu tun ist, soll im folgenden gezeigt werden.
Wenn die Grammatik (inklsive Lexikon) fehlerhaft ist, dann scheitert die Analyse der zu beschreibenden Ausgangsdaten oder liefert falsche Beschreibungen. Das kann folgende Gründe haben:
Das Programm ist so voreingestellt,
dass nur dann ein Ergebnis angezeigt wird, wenn es wenigstens eine erfolgreiche
Analyse gibt. Das ist natürlich für die Fehlersuche nicht besonders hilfreich.
Man kann diese Einstellung jedoch ändern.
Wählen Sie im Menü Settings die Option Program Variables. In der sich öffnenden Karteikarte aktivieren Sie die Option Partial Results for Failures. Das bewirkt, dass bei einem Scheitern der Analyse zumindest die bisher erreichten Zwischenergebnisse angezeigt werden, was ggf. wichtige Hinweise für die Verbesserung der Grammatik liefert.
Wir wollen im folgenden diese drei Punkte im Detail abhandeln. Wir verwenden dabei eine als korrekt angenommene Lexikondatei, die im wesentlichen der der Hausaufgabe entspricht.
Sie erhalten ein partielles Analyseergebnis, das auch einen Hinweis darauf gibt, wie das Programm arbeitet. Die Wörter in der Eingabekette werden mit Informationen aus dem Lexikon identifiziert und lexikalischen Kategorien zugeordnet. Das Programm versucht dann, Wortgruppen zu Konstituenten zusammenzufassen und syntaktischen Kategorien (NP, VP) zuzuweisen, findet dafür aber keine geeigneten Regeln in der Grammatik; daher das Fragezeichen.
Das Ergebnis sieht jetzt schon sehr viel besser aus. Es wird jedoch die Beziehung zwischen dem Verb und seinen Ergänzungen noch nicht ausgedrückt, wir brauchen also eine Regel, die das Verb (hier Vt2) und seine beiden Objekte zu einer Konstituente (VP) zusammenfaßt.
Siehe da! Der Satz kann jetzt vollständig analysiert werden.
Falsche Regeln führen nicht unbedingt dazu, dass die Analyse scheitert, sondern ergeben meist eine falsche Strukturbeschreibung. Falsche Regeln, die bei unseren Daten ein Scheitern herbeiführen würden, wären z.B.
Rule VP -> Vtp PP NP ; die Reihenfolge von PP und NP ist falsch Rule Vp -> Vi ; das Symbol Vp ist falsch und muss zu VP korrigert ; werden
Bei vielen Daten wäre es eine lästige Angelegenheit, die zu analysierenden Daten immer wieder neu eingeben zu müssen. Das Programm WinPatr bietet daher eine Möglichkeit, Sätze in einem ‘Stapel’ zu verarbeiten. Dazu muss eine Textdatei angelegt werden, in der alle zu analysierenden Sätze enthalten sind:
the boy ran the boy admired the girl *the boy admired the student put the book on the table *the student put the book *the student put on the table *the student put Mary gave John a present *Mary gave John ?Mary gave a present *Mary gave the professor lived in a village *the professor lived
Der Befehl Parse File
bietet die Möglichkeit, eine Liste von Sätzen, die in einer separaten Satzdatei
enthalten sind, mit einem Befehl zu analysieren und sie in eine Ergebnisdatei
abzuspeichern. Wählt man den Menüpunkt Parse File öffnet sich das Fenster
zum Öffnen von Dateien, wobei allerdings nur Sentence files mit der
Dateityp-Erweiterung .sen gewählt werden können. Wählen Sie die Datei
f04.sen aus.
Diesmal geht es darum, den
Namen einer Datei zu bestimmen, in die die Analyseergebnisse ausgegeben werden
sollen. Es handelt sich ebenfalls um reine Textdateien. Die Standard-Dateityp-Erweiterung
ist .par.