Add Query Command

Description

Das Skript search-annotations.pl ist nützlich, um bestehende Syntaxbäume nach bestimmten Konfigurationen zu durchsuchen. Leider ist es nicht in cdgp integriert; das hat verschiedene Vorteile:

  • Operatoren und Funktionen können benutzt werden, die in Constraints nicht möglich sind, etwa der Statistikoperator stat() oder die Zuweisung :=, mit der Bäume automatisch geändert werden können.

  • Statt Parses untersucht es Annotationen, was viel weniger Zeit und Speicher verbraucht. Nur so ist Suche in mehreren zehntausend Bäumen überhaupt möglich.

Dieselben Eigenschaften wirken sich aber auch als Nachteile aus:

  • Weil keine Parses vorliegen, kann man nicht das normale evalFormula() verwenden. Stattdessen wurde die Constraintsprache in Perl reimplementiert -- mit vielen Beschränkungen und Inkompatibilitäten, die völlig undokumentiert sind.

  • Die Perl-Repräsentation von Annotationen verbraucht immer noch mehr Speicher und Zeit, als nötig wäre, wenn man Annotationen direkt untersuchte.

  • Es besteht keine Anbindung zum Hauptprogramm. Man kann xcdg nicht sagen, `Zeige mir alle Auxiliarketten der Länge vier im Bild.'

Statt des externen Skriptes soll ein Befehl query in commands.c geschrieben werden. Hier die Anforderungen:

  • Der Befehl soll Formeln der CDG-Sprache entgegennehmen und passende Konfigurationen in geladenen Annotationen suchen und darstellen, so wie search-annotations.pl es jetzt tut.

  • In xcdg sollen die Ergebnisse sogleich graphisch dargestellt werden, d.h. der Baum wird gezeichnet und die betreffenden Kanten rot hervorgehoben.

  • Die Suche soll Annotationen verwenden, d.h. es soll kein anno2parse notwendig sein.

  • Die Einschränkungen der Suchsprache sollen beseitigt werden; die Erweiterungen sollen erhalten bleiben. Insbesondere soll automatische Veränderung von Annotationen möglich sein.

Der letzte Punkt bedeutet einen erheblichen Eingriff in die Eingabesprache. Entweder muß ein gänzlich anderer Zweig für InputSeq geschrieben werden, in dem nicht Formula und Term, sondern QueryFormula und QueryTerm verwendet werden, oder die alten Nonterminale erhalten neue Möglichkeiten. Dann muß aber in inputLoad() geprüft werden, daß normale Constraints keine Zuweisungen etc. enthalten.

Die Funktion cmdQuery() sollte dann durch inputLoad() die Befehlszeile in eine Formula umwandeln und diese der Reihe nach auf alle bekannten Annotationen anwenden. Dazu ist eine eigene Hierarchie von Funktionen notwendig, denn evalTerm() etc. benötigen LevelValue-Strukturen, die es in Annotationen nicht gibt. Insbesondere kann man in diesen Funktionen nicht die normalen Implementationen von Prädikaten und Funktionen verwenden, sondern muß sie nachprogrammieren.

Comments

Habe diesen Report von "investigated (by OthelloMaurer)" auf reported zurückgesetzt, da Othello keinen Vertrag mehr bei uns hat.
-- posted by MichaelDaum on 05 Nov 2004, 16:52:32

Meiner Meinung nach wäre es für Anfragen -- egal ob über Perl oder über einen eigenen query-Befehl -- am schnellsten, wenn man ähnlich wie bei TIGERSearch die Corpora nach Teilformeln indizeren würde, so dass im Fall von "Zeige mir alle Auxiliarketten der Länge vier" nur alle Annotationen angeschaut werden müssen, die eine AUX-AUX-Kette haben (oder solche, die mindestens drei AUX-AUX-Ketten besitzen).

Als Anbindung zum Hauptprogramm würde ich eine Funktion, mit der man ein laufendes xcdg dazu bringen kann, Annotationen xxx-s42,xxx-s47 und xxx-s123 anzuzeigen sinnvoller als ein query-Befehl in xcdg. Das würde etwa erlauben, alle Bäume, in denen der Parser eine XXX-Kante falsch anhängt, anzeigen zu lassen, ohne C- oder Tcl-Code zu schreiben.

Just my $0.02
-- YannickVersley on 20 Jul 2005, 14:32:22

 

 
This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Foswiki? Send feedback