Weitere Korpora | Daten analysieren |
Annotation: Promethia | Text zu XML |
Hat man aus irgendwelchen Quellen Material zusammengetragen, muss es anschliessend in ein einheitlich formatiertes Korpus überführt werden. Die Probleme, die dabei enstehen, haben wir bereits besprochen.
Wie müssen unsere Daten formatiert sein, damit sie gut als Korpus nutzbar sind? Folgende Anforderungen müssen an sie im Idealfall gestellt werden:
Meine Empfehlung ist es, wenn immer möglich Textdaten in einem XML-Format anzulegen. Im Folgenden werde ich deswegen in aller Kürze in XML einführen und zeigen, wie man Textdaten in XML codiert. So codierte Dateien könnten danach direkt in die Open Corpus Workbench importiert werden, deren Verwendung ich ebenfalls empfehle.
Wer vor XML zurück schreckt oder nur ein kleines Korpus anlegt, ist vielleicht mit meiner "simpel-und-trotzdem-brauchbar"-Lösung glücklicher, die ich hier vorstelle.
Wer viele Texte verwalten muss und daraus immer wieder neue Korpora durch die Selektion von Texten nach bestimmten Kriterien erstellen möchte, könnte sinnvollerweise eine Datenbank einsetzen wollen.
XML heisst Extensible Markup Language und ist eine sog. Auszeichnungssprache. Sie dient dazu, beliebige Passagen in einem Text mit bestimmten "Tags" auszuzeichnen, um etwas darüber auszusagen, also z.B.:
Wenn etwas wie h1 oder body bekannt vorkommt, dann mit Recht: HTML-Dokumente weisen solche Tags ebenso aus. Im Prinzip ist HTML eine Art XML-Dialekt.
Oben haben wir mit den Punkten 1-4 bereits Regeln definiert, welche Elemente mein XML-Dokument aufweist und in welcher Hierarchie diese auftreten. Normalerweise definiert man diese Regeln ganz explizit in einer "Document Type Definition" (DTD) oder ein XML-Schema, also einer Art Grammatik für die Erstellung von XML-Dokumenten.
Die oben definierten Regeln würden in einer DTD wie folgt niedergeschrieben:
<!ELEMENT corpus (article)+> <!ELEMENT article (header, body)> <!ELEMENT header (title, author, date)> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ELEMENT date (#PCDATA)> <!ELEMENT body (p | h1 | h2)*> <!ELEMENT p (#PCDATA)> <!ELEMENT h1 (#PCDATA)> <!ELEMENT h2 (#PCDATA)>
Es werden in der DTD also Elemente definiert, indem ihnen ein Name gegeben wird und dahinter in Klammer vermerkt ist, welche anderen Elemente unterhalb (als "Kind-Element") dieser Ebene vorkommen dürfen. Ein + bedeutet, dass das Kindelement (oder alle Kindelemente in der Klammer) mindestens einmal vorkommen müssen. Ein * bedeutet, dass das Kindelement überhaupt nicht, einmal oder mehrfach vorkommen darf. Zudem können die Kindelemente durch Komma oder | voneinander getrennt werden: Bei Komma müssen die Kindelemente genau in dieser Reihenfolge vorkommen, bei | ist ihre Reihenfolge frei. #PCDATA steht für Text.
Und wie sieht nun die eigentliche XML-Datei aus? Dazu müssen wir nun nur noch wissen, dass XML-Tags in spitzen Klammern notiert werden und immer aus einem öffnenden und einem schliessenden Tag bestehen: <title>Das ist der Titel</title>.
Das komplette Beispiel sieht dann so aus:
<corpus> <article> <header> <title>Der Titel dieses Artikels</title> <author>Hansjakob Babettli</author> <date>2014-03-21</date> </header> <body> <h1>Überschrift des Artikels</h1> <p>Hier kommt beliebiger Text. Und immer weiter.</p> <h2>Zwischenüberschrift</h2> <p>Und so geht es weiter.</p> <p>Und immer weiter.</p> </body> </article> <article> <header> <title>Der Titel des zweiten Artikels</title> <author>Hansjakob Babettli</author> <date>2014-03-22</date> </header> <body> <h1>Überschrift des zweiten Artikels</h1> <p>Hier kommt beliebiger Text. Und immer weiter.</p> <h2>Zwischenüberschrift</h2> <p>Und so geht es weiter.</p> <p>Und immer weiter.</p> </body> </article> </corpus>
Neu sind nur die erste und zweite Zeile. Die erste Zeile sagt, dass es sich um XML der Version 1.0 handelt und das Text-Encoding UTF-8 ist. Die zweite Zeile verweist auf die DTD, also die Regel, nach der die XML-Datei strickt ist. Dieser Verweis auf die DTD ist optional. Die Einrückungen zu Beginn der Zeilen sind ebenfalls optional. Sie verdeutlichen nur die Hierarchieebenen sehr gut und machen den Code damit übersichtlicher.
Die Korrektheit einer XML-Datei kann bezüglich zweier Aspekte geprüft werden:
Es ist praktisch, Wohlgeformtheit und wenn möglich auch Validität laufend zu prüfen, wenn man es mit XML-Dokumenten zu tun hat. Dazu dienen XML-Editoren oder z.B. ein Online-Validator wie jener der w3school.
Achtung: Es gibt ein paar kleine Fallstricke, was Sonderzeichen in XML-Dokumenten betrifft. Ausserhalb von Tags sind spitze Klammern (< und >) verboten, bzw. müssen mit < und > umschrieben werden. Gleiches gilt für &, das mit & umschrieben werden muss.
Die oben dargestellte XML-Struktur ist zwar sehr übersichtlich, aber nicht sehr kompakt. Im Hinblick auf die weitere Verarbeitung mit Tools maschineller Sprachverarbeitung, z.B. einem automatischen Wortarten-Tagger, oder auch den Import in die Open Corpus Workbench, ist ein flacheres XML-Format ratsam.
Dies kann durch die Benutzung von Attributen erreicht werden:
<article title="Das ist der Titel" author="Hansjakob Babettli" date="2014-03-21"> ... </article>
Damit wird das Beispiel von oben deutlich schlanker:
<corpus> <article title="Der Titel dieses Artikels" author="Hansjakob Babettli" date="2014-03-21"> <h1>Überschrift des Artikels</h1> <p>Hier kommt beliebiger Text. Und immer weiter.</p> <h2>Zwischenüberschrift</h2> <p>Und so geht es weiter.</p> <p>Und immer weiter.</p> </article> <article title="Der Titel des zweiten Artikels" author="Hansjakob Babettli" date="2014-03-22"> <h1>Überschrift des zweiten Artikels</h1> <p>Hier kommt beliebiger Text. Und immer weiter.</p> <h2>Zwischenüberschrift</h2> <p>Und so geht es weiter.</p> <p>Und immer weiter.</p> </article> </corpus>
Der Vorteil dieser Darstellung ist, dass so strukturierte Dateien direkt vom Wortarten-Tagger TreeTagger verarbeitet werden können. Dieser gibt dann folgende Datei aus:
<corpus> <article title="Der Titel dieses Artikels" author="Hansjakob Babettli" date="2014-03-21"> <h1> Überschrift NN Überschrift des ART d Artikels NN Artikel </h1> <p> Hier ADV hier kommt VVFIN kommen beliebiger ADJA beliebig Text. NN Text. Und KON und immer ADV immer weiter PTKVZ weiter . $. . </p> <h2> Zwischenüberschrift NN Zwischenüberschrift </h2> <p> Und KON und so ADV so geht VVFIN gehen es PPER es weiter PTKVZ weiter . $. . </p> <p> Und KON und immer ADV immer weiter ADV weiter . $. . </p> </article> <article title="Der Titel des zweiten Artikels" author="Hansjakob Babettli" date="2014-03-22"> <h1> Überschrift NN Überschrift des ART d zweiten ADJA zweit Artikels NN Artikel </h1> <p> Hier ADV hier kommt VVFIN kommen beliebiger ADJA beliebig Text. NN Text. Und KON und immer ADV immer weiter PTKVZ weiter . $. . </p> <h2> Zwischenüberschrift NN Zwischenüberschrift </h2> <p> Und KON und so ADV so geht VVFIN gehen es PPER es weiter PTKVZ weiter . $. . </p> <p> Und KON und immer ADV immer weiter ADV weiter . $. . </p> </article> </corpus>
Der Tokenizer (= Identifizierer der einzelnen Wörter) des TreeTaggers setzte jedes Wort auf eine eigene Zeile. XML-Tags werden dabei als solche erkannt und als Einheit belassen und auch nicht mit Wortarten annotiert. In der zweiten Spalte wurden die Wortartklassen gemäss Stuttgart-Tübingen-Tagset (STTS) hinzugefügt, in der dritten Spalte stehen die Grundformen (Lemmata).
Die Ausführungen oben zeigen, dass im Prinzip jeder und jede für den eigenen Bedarf eine beliebige XML-Grammatik mit eigenen Tagnamen erstellen kann, so lange die Tags konsistent verwendet werden, also wohlgeformt und bezüglich einer DTD oder einem XML-Schema valide sind. Der Vorteil von XML ist zudem, dass mittels einer eigenen Sprache, XSLT, relativ einfach XML-Dokumente in eine andere XML-Struktur, die einer anderen Grammatik folgen, übersetzt werden können.
Sobald man mit anderen Menschen kooperiert und/oder die eigenen Daten nachhaltig archivieren möchte, ist es natürlich sinnvoll, sich an Standards zu orientieren. Diese Standards geben zudem sinnvolle Lösungen vor, wie beispielsweise Metadaten strukturiert werden sollen.
In der Korpuslinguistik und den Digital Humanities hat die Text Encoding Initiative wichtige Standards definiert. TEI, inzwischen in der Version P5, ist ein Set an XML-Regeln, um (relativ) beliebige Texte (historisch, gegenwartssprachlich, alle Gattungen etc.) einheitlich zu codieren.
Die Dublin Core Metadata Initiative definiert Standards zur Erfassung von Metadaten beliebiger Objekte im Internet. Hilfreich ist in diesem Zusammenhang zudem der CLARIN-D User Guide, in dem verschiedene Standards der Dokumentenannotation in der Korpuslinguistik vorgestellt werden.
Trotz all dieser Standards ist es auch immer wieder sinnvoll, mit einer eigenen XML-Grammatik zu arbeiten, insbesondere, wenn man sie für das eigene Projekt sehr einfach halten kann. Wichtig ist jedoch insbesondere:
XML-Dokumente können mit jedem beliebigen Text-Editor erstellt werden, etwa SimpleText (Mac), Textpad, Notepad (Windows) etc. Office-Programme sollten dafür jedoch nicht verwendet werden. Viele Text-Editoren bieten zudem für XML angenehme Funktionen, wie z.B. sog. "Syntax Highlighting", also das farbliche Hervorheben der Tags, oder die automatische Tag-Ergänzung. Empfehlenswerte Programme dieser Kategorie sind:
Daneben gibt es richtige XML-Editoren (meistens kommerziell), die noch komfortabler in der Bedienung sind und alle auch XML-Dokumente validieren können, zudem auch XSL-Transormationen, XPath-Abfragen etc. anbieten. Zu den bekanntesten gehören:
Unter Unix-Systemen (und Mac) kann zudem mit dem Kommandozeilenprogramm xmllint sehr einfach die Wohlgeformtheit und Validität eines XML-Dokuments geprüft werden:
xmllint --noout <XML-Datei>
Zum Weiterlesen zu XML und XSLT empfiehlt sich zudem SELFHTML.
Annotation: Promethia | Text zu XML |
Weitere Korpora | Daten analysieren |