[ Weiter ] [ Zurück ] [ Zurück (Seitenende) ] [ Seitenende ] [ Überkapitel ]
Tokenizing ist die zentrale Aufgabe in der Vorverarbeitung. Das Resultat der Tokenisierung ist eine Liste von Tokens, z.B. als Liste im technischen Sinn, oder als Abfolge von durch Zeilenumbrüche getrennten Tokens (sog. “vertikalisierter Text”)1 Zugehörigkeit zu einer Tokenklasse, siehe 4.2.1 auf Seite 17 ) anhängen.
Der Tokeniser muss eine ganze Reihe von Einzel-Aufgaben erfüllen, deren korrekte Sequenzierung nicht einfach ist. Die folgende Aufzählung stellt nicht die korrekte Abfolge der einzelnen Schritte dar.
Genau so wie bei der Vorverarbeitung insgesamt kann man beim Tokenisieren in besonders schwierigen Fällen diese Aufgaben gar nicht streng sequentiell durchführen; dann müssen die einzelnen Funktionen verflochten ausgeführt werden.
Die grundlegende Vorgehensweise beim Durchführen der zentralen Aufgabe des Tokenisierens besteht in der Zerlegung der Eingabekette an bestimmten Zeichen.
Grundsätzlich müssen dafür “white space characters” (Blank, Tab, Line Feed und/oder Carriage Return) durch den Token-Trenner (also durch “newline” oder den Listenelement-Separator) ersetzt und Interpunktions-, Satz- und Sonderzeichen abgetrennt resp. isoliert werden.
Das Problem liegt in den Spezialfällen. Die Behandlung solcher Fälle kann entweder durch Isolieren2 erfolgen (dann wirken die Trennungsprinzipien im Innern solcher Ausdrücke nicht) oder durch Re-Gruppieren getrennter Elemente (wir werden die erste Option wählen).
Im einzelnen müssen folgende Dinge geleistet werden (aber nicht notwendigerweise in dieser Reihenfolge!):
Das Erkennen von Abkürzungen ist u.a. deshalb wichtig, weil Abkürzungspunkte natürlich nicht Satzendmarker sind (siehe 4.3 auf Seite 19 Wenn man also Abkürzungen nicht erkennt, wird man ganz falsche Satzenden setzen. Oft wird man Abkürzungen, wenn einmal erkannt, als solche klassifizieren (siehe 4.2.1 auf Seite 17 ).
Prinzipiell lassen sich Abkürzungen einfach erkennen: Man listet sie auf, und matcht den Eingabe-String dagegen (das funktioniert, weil Abkürzungen in aller Regel keine Beugung zulassen). In der Praxis ist das aber sehr schwierig. Erstens muss man diese Auflistungen zuerst mal haben - und sie sind nicht einfach zu beschaffen (nur die aller-allgemeinsten werden in Wörterbüchern vorkommen). Zweitens sind Abkürzungen sehr bereichsspezifisch (A.I. heisst einerseits Artificial Intelligence, anderseits auch Artificial Insemination). Das ist für das Erkennen unwichtig, aber nicht für das eventuell durchgeführte Normalisieren (siehe 4.2.1 auf Seite 15 ).
Die Abtrennung der Interpunktionen und sonstiger Satz-/Sonderzeichen ist ebenfalls sehr schwierig. Satzzeichen sind in manchen Fällen als “Quasi-Wörter” (genauer: “Quasi-Wortformen”) zu markieren, denn oft haben sie selbst eine Bedeutung: z.B. ? vs. . vs. ! drücken verschiedene Sprechakte aus - und die sind (auch) in der automatischen Verarbeitung von Sprache zu unterscheiden. Analoges gilt für Kommata, Semikola und Auslassungspunkte (...). Sie alle verdienen es, als eigene Tokens dargestellt zu werden, denn sie spielen im Satz eine eigene Rolle (syntaktisch und semantisch).
Besondere Probleme schaffen Klammern, Schrägstriche und diverse Sonderzeichen (@, #, $ etc.). Sie sind meist Teil von Tokens und dürfen daher nicht isoliert werden (siehe 4.2.1 auf Seite 13 ).
Ein unerwartetes Problem ergibt sich beim vermeintlich einfachen Problem der Expansion von Kontraktionen:
Ein ganz schwieriges Feld sind die komplexen Tokens, d.h. solche Tokens, welche üblicherweise als Worttrenner verwendete Zeichen enthalten, z.B.
Dass man diese Ausdrücke zu Tokens zusammenfassen sollte, ist recht klar, aber das waren nur die einfachsten Fälle. Sind auch die folgenden Ausdrücke alle je ein einziges Token?
Letzlich hängt die Entscheidung, was alles zu einem einzigen Token gehören soll, davon ab, was man mit dem analysierten Text machen will:
Ausdrücke wie Euro 300,- wären in einem derartigen Anwendungszusammenhang hingegen besser als einzelnes Token zu behandeln (und vermutlich auch noch nach Tokenklasse zu kategorisieren; siehe 4.2.1 auf Seite 17 ), denn hier kommen vermutlich sehr spezifische, nur für genau diese Art von Ausdruck relevante, Übersetzungsregeln zum Tragen (je nach dem Locale, in der Terminologie der Textverarbeitung).
Bei diesen Fragen befinden wir uns an der Grenze zu zwei wichtigen weiteren Operationen in der Verarbeitung natürlicher Sprache, und zwar zur sog. named entity recognition um zur Erkennung von Mehrwort-Einheiten.
Aber soll man Mehrwortterme (wie Chief Executive Officer und air traffic controller) ebenfalls als komplexe Tokens zu erfassen versuchen? Es ist schwieriger, weil sie in einem allgemeinsprachlichen Wörterbuch vermutlich nicht aufgeführt sind, und weil sie in verschiedenen Beugungsformen vorkommen, was einen einfachen Lexikon-Lookup ohnehin unmöglich macht. Und erneut: Wäre das sinnvoll?
Die Abgrenzung der Tokenisierung zu named entity recognition und zur Erkennung von Mehrwort-Einheiten ist letzlich nur pragmatisch zu machen: Ist es einfacher, übersichtlicher und effizienter zu implementieren, wenn man diese Funktionen trennt oder wenn man sie in einem einzigen Modul zusammenfasst?
Die Wortnormalisierung dient vor allem dazu, in der (späteren) Phase (z.B. des part-of-speech-tagging oder Parsing) die Erkennung der Wortart sicherzustellen. Hierfür ist es ggf. nötig,
Die verschiedenen Formen dieser Tokens müssen nicht nur auf eine einheitliche (eben: kanonische) Form reduziert werden, sondern es wird oft sinnvoll sein, sie gleich auch noch zu kategorisieren, d.h. Tokenklassen zu bilden. Siehe gleich anschliessend.
Wie wir gesehen haben, sind nicht alle Tokens Wortformen im engeren Sinne. Da dieTokenisierung sowieso eine intensivere Analyse der Eingabekette erfordert, lohnt es sich in vielen dieser Fälle, gleich noch eine Klassifizierung der Tokens in Tokenklassen vorzunehmen. Dies kann vor allem die Verarbeitung in nachfolgenden Modulen massiv vereinfachen.
Besonders klar wird das im Fall von Zahlausdrücken. Es bringt nichts, folgende Normalisierung durchzuführen
Mögliche Kandidaten für weitere Tokenlassen sind ABBR für Abkürzungen, TIME resp. DATE für Zeit- und Datumsangaben oder CURRENCY für Währungsangaben, TEMP und LENGTH für Temperatur- und Längenangaben u.v.a.m.
Dies würde dann etwa für folgende Sätze
folgende Resultate ergeben:3
Manchmal muss die Kategorisierung von Wortformen ggf. sogar via typographische u.ä. Merkmale im Druckbild erfolgen. So heisst z.B. in Unix-Manuals der Fettdruck in cp “Kommandobezeichnung”, und diese Information wird man für nachfolgende Verarbeitungsschritte verfügbar machen wollen. In ExtrAns sieht das dann so aus:
Nicht nur die Art der Einzelschritte, sondern auch die Reihenfolge, in der die verschiedenen Schritte zur Tokenisierung vorgenommen werden, ist ganz entscheidend für den Erfolg. Hier warten allerhand Überraschungen auf den Tokeniser.
Versuchen Sie, in der (ILAP) (Experiment) Tokenisierung zu ermitteln, wie die optimale Reihenfolge für den vorgegebenen Text aussieht. Das ist gar nicht so einfach. Und experimentieren Sie danach auch mit eigenen Texten!
Wenn Sie glauben, Sie hätten die optimale Reihenfolge gefunden, testen Sie Ihr Wissen im Satzergänzungstest (SET) Tokenisierungsoperationen ordnen.
Sie können hier zwei fertige Tokeniser ausprobieren. Versuchen Sie durch die Eingabe sinnvoll gewählter Ketten zu ermitteln, welche Prinzipien diese zwei Programme anwenden und wodurch sie sich unterscheiden! (ILAP) (Demo) Zwei Prolog-Tokeniser im Vergleich
Und zum Schluss können Sie Ihr Wissen zur Tokenisierung in folgendem Selbsttest testen: (QUIZ) Tokenisierung
[ Weiter ] [ Zurück ] [ Zurück (Seitenende) ] [ Seitenbeginn ] [ Überkapitel ]