Daten in die Corpus Workbench importieren

Hier wird beschrieben, wie ein Korpus in die Corpus Workbench und danach ins Web-Interface zur Corpus Workbench, CQPweb, importiert werden kann. Es ist möglich, den Import des Korpus direkt über CQPweb zu erledigen. Allerdings können dann Metadaten nicht direkt aus der XML-Datei des Korpus ausgelesen werden, sondern müssen in einer separaten Datei zu den einzelnen Texten erfasst werden. Alternativ kann man ein bereits in die CWB importiertes Korpus in CQPweb indizieren, so dass es dann auch über CQPweb verfügbar ist. Dieser Weg wird hier empfohlen und beschrieben; er unterteilt sich in folgende Schritte:

  1. Vorbereitung der Daten
  2. Import in die CWB
  3. Importieren/aktivieren in CQPweb

Natürlich erklärt die offizielle Dokumentation, das Corpus Encoding Tutorial, ebenfalls alle Schritte im Detail und bietet noch weitere Informationen.

Vorbereitung der Daten

Für den Import in die CWB müssen die Daten folgendes Format aufweisen und die Dateiendung .vrt tragen (siehe Kapitel "Daten aufbereiten: XML" für Hilfestellungen, XML-Dateien zu erstellen und Kapitel "POS-Tagging" zur Wortarten-Annotation):

Es können beliebig viele <text>-Blöcke in einer Datei zusammengefasst sein. Das <text>-Element darf auch noch weitere Attribute für weitere Metadaten umfassen, z.B. author, year, date, url, source etc.

Der eigentliche Text muss im vertikalisierten Format vorliegen, also in Form von Spalten, die durch Tabulator-Zeichen getrennt sind. In der ersten Spalte muss zwingend die Wortform stehen. In den weiteren Spalten können (müssen aber nicht) beliebige weitere sog. positionale Attribute, also Informationen, die sich auf das jeweilige Token beziehen, stehen. Überlicherweise stehen in der zweiten Spalte die Wortart und in der dritten das Lemma (die Grundform). Dieses Format liefert z.B. der TreeTagger. Weitere Spalten, z.B. für Named Entity-Klassen sind natürlich möglich.

Zudem sind weitere strukturale Attribute möglich, also weitere XML-Elemente unterhalb des <text>-Elements. Üblich ist beispielsweise die Markierung von Sätzen mit <s>-Elementen o.ä.

Wichtig:

Empfehlungen:

Wenn die Daten so vorbereitet sind, können sie in die CWB importiert werden.

Import in die CWB

Voraussetzung dafür ist eine korrekt installierte Corpus Workbench. Die Anleitung wurde an den CWB-Versionen 3.0 und 3.1 getestet.

Für den Import sind zwei Verzeichnisse bedeutend, die festgelegt werden müssen:

Weiter gehen wir davon aus, dass die zu importierenden Daten, also die .vrt-Dateien, im Verzeichnis korpus/ in unserem aktuellen Arbeitsverzeichnis liegen.

Zuerst müssen wir für das Korpus im Korpusverzeichnis datafiles/ ein neues Verzeichnis für das neue Korpus anlegen. Das geschieht mit:

mkdir /usr/local/cwb/datafiles/korpusname

Wichtig: Erscheint beim Auslösen eines Befehls die Meldung Permission denied, reichen die Benutzerrechte nicht aus, an diesem Ort (oben in /usr/local/cwb/datafiles) Dateien zu erstellen. Das muss auch so sein, da man normalerweise als Benutzer/in im System angemeldet ist und keine Administrationsrechte hat. Man kann sich temporär Administrationsrechte geben, indem man jedem Befehl sudo voranstellt. Dann wird vor dem Auslösen des Befehls erst nach dem persönlichen Passwort gefragt; nachdem man es eingetippt hat, wird der Befehl ausgeführt. Natürlich ist es möglich, die CWB im eigenen Benutzer/innen-Verzeichnis anzulegen, wo man immer volle Rechte hat. Dann erübrigt sich das Problem.

Für den Import in die CWB verwenden wir zunächst den Befehl cwb-encode. Der grundlegende Aufruf lautet:

cwb-encode -d /usr/local/cwb/datafiles/korpusname -F korpus/ -R /usr/local/cwb/registry/korpusname -P pos -P lemma -S corpus -S text:0+id

Schauen wir uns die Argumente genauer an (eine Hilfe zum Befehl erhält man übrigens durch die Eingabe von man cwb-encode oder cwb-encode -h):

Der Befehl cwb-encode erlaubt noch viele weitere Optionen. Empfehlenswert sind neben den oben beschriebenen die folgenden:

Der vollständige Befehl mit diesen Optionen lautet dann:

cwb-encode -s -c utf8 -x -v -d /usr/local/cwb/datafiles/korpusname -F korpus/ -R /usr/local/cwb/registry/korpusname -P pos -P lemma -S corpus -S text:0+id

Nach dem Encodieren werden für das Korpus mit cwb-makeall verschiedene Indizes erstellt:

cwb-makeall -r /usr/local/cwb/registry korpusname

Nötig ist die Angabe des registry-Verzeichnisses mit -r und danach (Achtung: Mit Abstand getrennt!) der Name des Korpus (bzw. der registry-Datei des Korpus.

Damit steht das Korpus für Recherchen in der CWB bereit. Bei großen Korpora lohnt es sich, zusätzlich zwei Befehle auszuführen, die die Korpusdaten komprimieren. Die beiden Befehle lauten:

cwb-huffcode -r /usr/local/cwb/registry korpusname
cwb-compress-rdx -r /usr/local/cwb/registry korpusname

Beim Ausführen der Befehle informieren beide bei Erfolg darüber, dass jeweils gewisse Dateien im Korpusverzeichnis gelöscht werden können. Das ist natürlich sinnvoll zu tun, um tatsächlich Speicherplatz einzusparen. Das Löschen funktioniert mit dem Befehl:

rm [Dateiname]

Achtung: Löscht man so eine Datei, ist sie unwiederbringlich weg! Also immer gut überlegen, was man tut, wenn man rm auslöst!

Nun kann getestet werden, ob das Korpus korrekt in der CWB installiert worden ist. Dazu starten wir die CWB:

cqp -r /usr/local/cwb/registry/

Die CWB meldet sich mit [no corpus]> und wartet nun auf Befehle. Mit show; werden die bereits indizierten Korpora aufgelistet. Man wählt sich das gewünschte Korpus, indem man seinen Namen eintippt, z.B. KORPUSNAME. Nicht wundern: Hier sind alle Korpusbezeichnungen groß geschrieben!

Nun können beliebige CQP-Befehle ausgeführt werden, z.B. eine Suche nach dem Lemma "Demokratie" mit [lemma="Demokratie"];.

Importieren/aktivieren in CQPweb

Nachdem das Korpus in der CWB inidiziert worden ist, kann es nun auch in CQPweb importiert werden. Dazu muss die Administrator-Oberfläche von CQPweb geöffnet und die folgenden Schritte ausgeführt werden:

  1. Auf der Administrator-Oberfläche öffnen wir links im Menü den Befehl "Install new corpus".
  2. Da wir das Korpus bereits in der CWB indiziert haben, benutzen wir ganz oben den Link "Click here to install a corpus you have already indexed in CWB."
  3. Nun müssen die drei Felder "MySQL name", "full name" und "CWB name" ausgefüllt werden; es handelt sich um den oben gewählten KORPUSNAMEN. Bei "full name" kann auch ein beliebiger aussagekräftigerer Name verwendet werden.
  4. Alle anderen Optionen können in der Standardeinstellung gelassen werden. Anschließend klicken wir auf "Install corpus with settings above".
  5. Nach der Meldung "Your corpus has been successfully installed!" kann man über den Link "Design and insert a text-metadata table for the corpus" die Metadaten indizieren. Auf der nun folgenden Seite "Admin tools for managing corpus metadata" scrollt man ganz nach unten und wählt den Link "Click here to install metadata from within-corpus XML annotation." Damit nutzen wir die als XML-Tags erfassten Metadaten.
  6. Jetzt werden alle verfügbaren Metadaten auf Textebene dargestellt. Die gewünschten Metadaten können nun ausgewählt werden, wobei bei jedem Feld entschieden werden muss, ob der Typus eine "Classification" (also kategorial) oder "Free Text" ist. Die Regeln für "Classification" sind streng (keine Sonderzeichen erlaubt, nicht länger als 20 Zeichen) und sollten nur für Kategorien wie m/w (männlich/weiblich), Datums-, Jahresangaben, Textsorten oder dergleichen verwendet werden. Allerdings kann die Distribution über Treffermengen in CQPweb nur für kategoriale Daten angezeigt werden, daher ist es schon sinnvoll, die wichtigen Metadaten so zu erfassen.
  7. Bei großen Textmengen (über 1000 Texte) sollte die Voreinstellung zum "frequency list setup" auf "No thanks" eingestellt werden, andernfalls bei "Yes please". Ein Klick auf "Create metadata table form XML using the settings above" erstellt die Metadatentabelle.
    Wichtig: Hier kann es zu einer Fehlermeldung kommen. Meiner Erfahrung nach können folgende Gründe für den Fehler verantwortlich sein:
    • Kategoriale Metadaten (also wenn "Classification" ausgewählt war) enthalten nicht erlaubte Zeichen – die Fehlermeldung dazu ist eindeutig.
    • Die Fehlermeldung, dass Zeilen außerhalb von <text> gefunden worden seien, ist etwas verwirrend. Meist erscheint der Fehler, weil die XML-Korpusdatei nicht wohlgeformt ist (Wohlgeformtheit kann mit xmllint --noout Dateiname.vrt überprüft werden). Weiter könnte eine Text-ID nicht eindeutig sein, z.B., weil CQPweb die IDs automatisch auf 20 Zeichen kürzt.
  8. Fall wir auf der Seite davor "No thanks" angeklickt haben, müssen nun auf der folgenden Seite die Schaltflächen "Generate CWB text-position records", "Populate word and file counts", "Create CWB frequency table" und "Create frequency tables" unter "other metadata controls" angeklickt werden. Das kann bei großen Korpora teilweise lang gehen oder gar nicht funktionieren. Bei sehr großen Korpora können diese Befehle über die Kommandozeile direkt auf dem Server ausgelöst werden (vgl. Hinweise zum Script "../lib/offline-freqlists.php" in der Dokumentation von CQPweb unter "Installing a corpus").
  9. Nun muss im Menü links unter "Admin tools" noch die Seite "Manage annotation" gewählt werden: Hier sollten zuerst unten unter "Annotation metadata" für die Handles "lemma" und "pos" zumindest unter Description eine sprechende Bezeichnung gegeben, z.B. "Lemma" und "POS" und jeweils in der Spalte "Update?" mit "Go" gespeichert werden. Dann muss oben unter "Annotation setup for CEQL queries..." unter "Primary annotation" den eben so benannten Eintrag "POS" und unter "Secondary annotation" den Eintrag "Lemma" ausgewählt und auf "Update annotation settings" geklickt werden. Wenn in den Korpusdaten weitere positionale Attribute vorhanden sind, müssen diese hier entsprechend deklariert werden.
  10. Wir testen dann im Menü links unter "Standard query" den erfolgreichen Import mit einer Abfrage. Hilfe dazu findet sich im CWB-Kapitel.