Semi-automatisierte Annotation von Zeitangaben

In F. X. Bronners Reisebericht ist eine Vielzahl von Datums- und Zeitangaben zufinden. Folglich ist es eine naheliegende Überlegung, die Auszeichnung dieser Textstellen zu automatisieren und so Arbeit zu sparen. Zu diesem Zweck haben wir ein kleines Programm in Python geschrieben, welches Zeitangaben gemäß unseres Annotationsschemas auszeichnet. Da hierfür ein bestehendes Programm mit händischen Regeln kombiniert wurde, spreche ich von semi-automatisierter Annotation.

Ausgangslage

  1. Nach dem Export aus Transkribus liegt der Text bereits als XML-Datei vor deren Tags beibehalten werden sollen.
  2. Bronners Zeitangaben weisen zwar Regelmäßigkeiten auf, sind jedoch nicht einheitlich.
  3. Im Quelltext werden Daten in gregorianischer jedoch teilweise auch in julianischer Zeitrechnung angegeben.
  4. Der Reisebericht hat eine Vielzahl von Referenzdaten. Das heißt auf Seite 2 bezeichnen die Wörter heute, gestern oder Sonntag andere Daten als auf Seite 72.
  5. Datumsangaben – im Besonderen die Monate – werden teilweise durch veraltete Bezeichnungen oder nicht geläufige Abkürzungen angegeben.

Technische Umsetzung

Die möglichen Lösungsansätze können in zwei Gruppen unterteilt werden: Zum einen regelbasierte Ansätze und zum anderen Machine Learning Ansätze. Erstere erfordern ein gewisses Wissen über den Zieltext, zweitere geeignete Trainingsdaten. Da wir über ein gutes Wissen über den Zieltext, nicht jedoch über Trainingsdaten verfügen, bieten sich regelbasierte Ansätze in unserem Fall stärker an.

Zur Umsetzung wurde das opensource Programm HeidelTime der Universität Heidelberg verwendet. HeidelTime ist ein regelbasiertes System. Es ist multilingual – funktioniert somit auch auf Bronners deutschen Text – und domänenspezifisch. Der Aspekt der Domänenspezifität ist für uns von Bedeutung, da HeidelTime über den Dokumententyp narrativ ein dynamisches Referenzdatum (document time) anbietet (siehe oben Punkt 4).

HeidelTime – wie auch mögliche Alternativen – benötigt Reintext als Input, weshalb eine Vorverarbeitung des XML notwendig ist. Darüber hinaus sollen die Tags des XML konserviert und im Anschluss an die automatisierte Zeitannoation im resultierenden XML enthalten sein (siehe oben Punkt 1). Zur Lösung dieses Problems werden die Annotationen der Input-XML in einer Standoff Tabelle getrennt vom Reintext gespeichert. Dies erfolgt über die Python Bibliothek standoffconverter.

Die Umsetzung findet in einem eigens geschriebenen Python Programm statt, dessen primäre Aufgabe darin besteht die beiden Hauptkomponenten HeidelTime und standoffconverter zu implementieren und zum richtigen Zeitpunkt mit den auf unseren Quelltext passenden Parametern aufzurufen. Im Anschluss an die Erkennung der Zeitangaben durch HeidelTime werden diese an die Anforderungen des projekteigenen Annotationsschemas angepasst. Hierzu werden einige durch HeidelTime erkannte Zeitangaben, wie beispielsweise nicht näher spezifizierte Zeitspannen, entfernt. Des Weiteren werden bei den erkannten Zeitangaben die vorhergehenden Textstellen dahingehend untersucht, ob sie Spezifikationen der Zeitangaben beinhalten. Es findet also durch händisch erstellte Regeln eine Verfeinerung der automatisch erkannten Daten statt (siehe oben Punkt 5). Technisch wird dies durch eine Reihe von Regulären Ausdrücken (RegEx) umgesetzt. In einem abschließenden Schritt werden die normalisierten Daten in Python-Zeitobjekte (via datetime Modul) umgewandelt. Python-Zeitobjekte erlauben Rechenoperationen mit Datums- und Zeitangaben wie die Ermittlung Differenz zwischen zwei Daten. Folgen zwei Zeitobjekte aufeinander, die exakt zwölf Tage entfernt sind, so wird davon ausgegangen, dass beide Daten denselben Tag beschreiben, einmal in gregorianischer Zeitrechnung und einmal in julianischer (siehe oben Punkt 3).

Fazit

HeidelTime liefert eine solide, wenn auch nicht perfekte Auszeichnung von Zeitangaben und ist in der Anwendung recht einfach zu nutzen. Gleiches gilt für die händisch erstellten Regeln zur Verfeinerung der Ergebnisse. Diese hätten mit mehr Aufwand sicher noch weiter verfeinert werden können, hier musste allerdings eine Abwägung zwischen Aufwand und Ertrag getroffen werden. Soll das Resultat fehlerfrei sein, so ist in jedem Fall eine händische Kontrolle der Ergebnisse notwendig. Doch auch wenn die Ergebnisse händisch überarbeitet werden, kann eine vorherige automatische Annotation den Prozess der händischen Auszeichnung potentiell erleichtern. Ich denke die Frage ob eine automatisierte Auszeichnung von Zeitangaben sinnvoll ist, hängt von der Beschaffenheit des Quelltext und dem Workflow bei der Auszeichnung des Textes ab: Je näher der Text an einer modernen standardisierten (vom Programm unterstützten) Sprache ist, desto besser werden die Ergebnisse einer Automatisierung sein.

0 Kommentare

Einen Kommentar abschicken

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

WordPress Cookie Hinweis von Real Cookie Banner