Prozeßkommunikation


Der Benutzer muß dem Parser einige Informationen zum Tagger zur Verfügung stellen, damit die Verbindung zum Tagger hergestellt und gesteuert werden kann. Folgende Variablen sind zu defienieren:
  • useTagger: schaltet den Tagger an bzw. aus. useTagger wird durch das Kommando "tagger start" gesetzt auf WAHR und durch tagger stop auf FALSCH gesetzt.
  • taggerDir: bezeichnet den absoluten Pfad zum Tagger
  • taggerCommand: zb "tnt -f" Gibt das Kommando und die Optionen an, um den Tagger zu konfigurieren zu starten.
  • taggerTimeOut: Gibt den maximalen Zeitraum im Millisekunden an, den der Parser auf eine Antwort des Taggers wartet, bevor die Kommunikation abgebrochen wird.

Das Protokoll läuft für einen einzelnen Satz wie folgt:

  1. Der Parser beginnt die Kommunikation in dem er den Tagger startet. Dies wird durch die Unix-Kommandos fork und execvp implementiert.
  2. Der zu annotierende Satz wird dem Tagger Wort für Wort mit einem Wort pro Zeile übermittelt. Das Satzende wird durch eine Leerzeile ("\n") markiert.
  3. Wurde der Satz vollständig übermittelt, wartet der Parser auf die Antwort des Taggers.
  4. Dieser antwortet, in dem er die Tagginginformationen an den Parser schickt. Hier wird ebenfalls eine Zeile pro Wort übermittelt. Am Anfang der Zeile steht noch einmal das Wort selbst. Dies wird von dem Tag, das der Tagger dem Wort zugeordnet hat, gefolgt, sofern der Tagger im Single-Modus arbeitet, bzw. von einer Sequenz von Tag-Wahrscheinlichkeitspaaren, jeweils bestehend aus einem Tag und der dazugehörenden Wahrscheinlichkeit, sofern der Tagger im Multi-Modus arbeitet.
  5. Der Tagger beendet die Übermittlung der Tagging-Resultate ebenfalls mit einer Leerzeile.
Hier die Definition der Ein- und der Ausgabesprache des Taggers in EBNF.

Hier der Pseudocode des Parsers der die Kommunikation mit dem Tagger implementiert:
for each <word> in <sentence>
   write TAGGER "<word>\n";
end
printf TAGGER "\n";

do
   read TAGGER s;
while s != "\n"

ACHTUNG! Es ist wichtig, daß der Tagger seine Ausgaben "zeilengepuffert" verarbeitet, damit auf jeden Fall, alle zu verarbeitenden Informationen, insbesondere das eine Eingabe abschliessende Zeilenumschaltzeichen "\n", im Parser ankommt, bevor es zu einem Abbruch der Kommunikation zwischen Tagger und Parser wegen Zeitüberschreitung kommt. Die Prozeßkommunikation zwischen Parser und Tagger wird vom Betriebssystems gepuffert, d.h. daß die Programme sich Daten nicht direkt übergeben, sondern mittels eines Zwischenspeichers, der vom Betriebssystem zur Verfügung gestellt wird. Der Zeitpunkt, zu dem Informationen vom Zwischenspeicher an ein Programm übertragen wird, hängt von der Puffermethode ab. Dafür gibt grundsätzlich zwei unterschiedliche Modi:
  1. buffered: die Daten werden weitergegeben, sobald der Zwischenspeicher voll ist. In diesem Fall kann es zu Problemen kommen, weil die Menge der auszutauschenden Information so gering ist, dass der Zwischenspeicher nicht voll wird und infolgedessen Daten nicht weitergegeben werden. In diesem Fall kommt es dann zu einem Abbruch der Kommunikation wegen Zeitüberschreitung, da der Parser nicht ewig auf seine Daten wartet.
  2. linebuffered: die Daten werden weitergegeben, sobald in den Zwischenspeicher ein Zeilenumschaltzeichen "\n" geschrieben wird. Dieses Zeichen markiert im oben beschriebenen Protokoll das Ende der zu übermittelnden Kommunikation. Das heißt, immer dann, wenn Information vollständig verarbeitet wurde, wird sie auch weitergegeben. ---+++ Page Preferences
-- JochenHagenstroem - 07 Feb 2002
 
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