Von Text zu XML

Im vorherigen Kapitel wurde gezeigt, dass es ratsam ist, Textdaten für ein Korpus in XML zu überführen und in die Grundlagen von XML eingeführt. Doch wie gelangt man zu XML, ohne die vorhandenen Daten manuell in eine XML-Struktur überführen zu müssen?

Dies hängt natürlich davon ab, in welchem Ausgangsformat die Daten vorliegen. Eine (halb-)automatische Überführung in XML ist nur möglich, wenn das Ausgangsformat einheitlich strukturiert ist, z.B.:

Wir werden auf beide Typen eingehen und erklären, wie diese in XML konvertiert werden können.

Strukturierte Text-Dateien

Um dieses Kapitel bearbeiten zu können, ist ein Texteditor notwendig, der mit Regulären Ausdrücken arbeiten kann. Ich empfehle folgende Tools:

(Zeitungs-)Datenbanken bieten oft die Möglichkeit, Texte einer Recherche in einem Text- oder RTF-Format auf dem eigenen Rechner abzuspeichern. Wichtig ist in diesem Zusammenhang, die Nutzungsrechte und Lizenzbedingungen zur Kenntnis zu nehmen, um zu prüfen, welche weiteren Schritte (Speicherung, Aufbereitung, weitere Verbreitung) erlaubt sind.

So abgespeicherte Texte folgen oft einem typischen Schema. Ein zwar erfundenes, echten Exportdateien jedoch sehr nahe stehendes Beispiel, ist das Folgende:

Beispiel für eine strukturierte Text-Datei
(mit ¶ sind Absätze sichtbar gemacht)


X
Das ist ein Artikeltitel

460 Wörter
28 Oktober 2013
Beispiel Zeitung
BSPZT
Beispiel Zeitung Regional
Deutsch
Copyright 2013. All Rights reserved.

Und hier kommt nun ganz viel Text...

Und noch viel mehr Text!

20131028087879548745878

Dokument BSP784983748758



X
Das ist ein anderer Artikeltitel

539 Wörter
01 April 2013
Beispiel Zeitung
BSPZT
Beispiel Zeitung Regional
Deutsch
Copyright 2013. All Rights reserved.

Und hier kommt nun schon wieder ganz viel Text...

Und sogar noch viel mehr Text!

2013040178498745878498758

Dokument BSP784983748759

Es ist ersichtlich, dass die Texte immer gleich aufgebaut sind:

Es gibt mehrere Möglichkeiten, so strukturierten Text automatisch in XML zu überführen. Die wichtigste Möglichkeit ist die Verwendung einer flexiblen Suchfunktion, um die beschriebenen Elemente zu finden. Eine gute Möglichkeit dafür sind die Verwendung von sog. Regulären Ausdrücken (Regular Expressions). In diesem Kapitel wird in aller Kürze in die wichtigsten Ausdrücke dieser Suchsprache eingeführt. Und im Kapitel DB: Filemaker: CSV-Formatierung wird an einem anderen Beispiel, aber ebenfalls mit Regulären Ausdrücken, gezeigt, wie eine solche Datei in ein strukturiertes CSV-Format konvertiert werden kann.

Unser XML-Zielformat für die oben dargestellten Artikel könnte sein:

<?xml version="1.0" encoding="UTF-8"?>
<corpus>
	<article title="Das ist ein Artikeltitel" journal="Beispiel Zeitung" date="2013-10-28">
		<p>Und hier kommt nun ganz viel Text...</p>
		<p>Und noch viel mehr Text!</p>
	</article>
	...
</corpus>

Wenn die Textdatei in einem Texteditor geöffnet wird, kann mit Regulären Ausdrücken nach den oben identifizierten Mustern gesucht werden.

  1. Als erstes definieren wir einen Suchausdruck, der den Beginn und das Ende des Artikels findet:
    X[\r\n]([\w\W]+?)[\r\n]Dokument BSP\d+$
    Im Folgenden die Bedeutungen der Teile des Ausdrucks:
    • X[\r\n]: Suche nach "X" gefolgt von einem Absatz.
    • [\w\W]+?: Dann kommen mindestens eines bis beliebig viele (+?) Wort- (\w) und Nicht-Wort-Zeichen (\W), also auch Absätze...
    • ([\w\W]+?): Mit der Klammerung merken wir uns den Inhalt dieser beliebig vielen Wort- und Nicht-Wort-Zeichen.
    • [\r\n]: Danach kommt wieder ein Absatz.
    • Dokument BSP\d+$: Gefolgt von "Dokument BSP" und Zahlen (\d), mindestens einer bis beliebig vielen (+) und dann einem Zeilenende ($).
  2. Den gefundenen Suchausdruck ersetzen wir durch XML:
    <article>\1</article>
    Mit \1 wird auf den Inhalt der (ersten und einzigen) Klammer des Suchausdrucks verwiesen.
  3. Ein einzelner Artikel sieht nun folgendermaßen aus:
    <article>Das ist ein Artikeltitel
    
    460 Wörter
    28 Oktober 2013
    Beispiel Zeitung
    BSPZT
    Beispiel Zeitung Regional
    Deutsch
    Copyright 2013. All Rights reserved.
    
    Und hier kommt nun ganz viel Text...
    
    Und noch viel mehr Text!
    
    20131028087879548745878
    </article>
    
  4. Nun suchen wir nach den restlichen relevanten Metadaten (Achtung: der ganze Ausdruck muss in eine Zeile geschrieben werden; der Umbruch ist hier nur der Übersichtlichkeit halber eingeführt):
    <article>(.+)[\r\n][\r\n]
    \d+ Wörter[\r\n]
    (\d+ .+? \d\d\d\d)[\r\n]
    (.+)[\r\n]
    .+[\r\n]
    .+[\r\n]
    Deutsch[\r\n]
    Copyright \d\d\d\d\. All Rights reserved\.[\r\n][\r\n]
    (Alle verwendeten Regulären Ausdrücke sind bereits mit der ersten Suche oben eingeführt worden.)
  5. ...und ersetzen den Ausdruck oben durch:
    <article title="\1" journal="\3" date="\2">\r\n
  6. Als Ergebnis erhalten wir:
    <article title="Das ist ein Artikeltitel" journal="Beispiel Zeitung" date="28 Oktober 2013">
    Und hier kommt nun ganz viel Text...
    
    Und noch viel mehr Text!
    
    20131028087879548745878
    </article>
    
  7. Damit haben wir schon fast das gewünschte XML. Es fehlt noch:
    • Alles umschließendes <corpus>...</corpus>-Tag.
    • XML-Deklaration in der ersten Zeile: <?xml version="1.0" encoding="UTF-8"?>
    • Schönheitsfehler: Das Datum hätten wir gerne in einem maschinenlesbareren Format, nämlich YYYY-MM-DD.
    Wer bis die bis jetzt eingeführten Regulären Ausdrücke verstanden hat, kann das im Handumdrehen selber lösen!