In der Corpus Workbench recherchieren

In vorherigen Kapiteln wurde bereits beschrieben, wie die CWB über CQPweb benutzt werden kann. Dabei wurde auch gezeigt, was die wichtigsten Befehle der Abfragesprache CQP sind. Diese Abfragesprache wird auch verwendet, wenn man direkt in der Konsole mit der CWB arbeitet. Die Abfragesprache ist zudem im CQP Query Language Tutorial ausführlich beschrieben.

An dieser Stelle soll deshalb nur erklärt werden, wie die CWB in der Konsole gestartet wird und auf interessante Funktionen aufmerksam gemacht werden.

Start der CWB

Wer bereits in Korpus in die CWB importiert hat, wie hier beschrieben, wird bereits mit der Bedienung einer Shell bzw. Konsole vertraut sein. In diesem Kapitel werden grundlegende Befehle für die Bedienung der Shell erklärt.

Die CWB wird mit folgendem Befehl gestartet:

cqp

Wenn die registry an einem benutzerdefinierten Ort liegt, muss der Pfad zur registry beim Start angegeben werden:

cqp -r /pfad/zum/registry-verzeichnis/

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.

Nun können beliebige CQP-Befehle ausgeführt werden, z.B. eine Suche nach dem Lemma "Freiheit" mit [lemma="Freiheit"];, sofern beim Import im Korpus diese Ebene zur Verfügung stand und so benannt worden ist.

Gruppieren von Ergebnissen

Die Ergebnisse einer Abfrage können nach verschiedenen Kriterien gruppiert werden. Dafür wird der Befehl group verwendet. Zunächst suchen wir nach dem Lemma "Freiheit" im Korpus:

[lemma="Freiheit"];

Nun wird das Suchergebnis angezeigt und ist in der Variable Last gespeichert. Wir können die Anzeige der Suchergebnisse durch die Eingabe von q abbrechen und dann z.B. ausgeben lassen, wie viele Treffer gefunden worden sind:

count Last;

Eine Suche kann auch immer in eine beliebige Variable gespeichert werden:

A = [lemma="Freiheit"];

Jetzt wird das Suchergebnis nicht angezeigt, sondern in A gespeichert.

Wir wollen jetzt wissen, welche Flexionsformen gefunden worden sind, dazu verwenden wir den group-Befehl:

group A match word;

Anstelle von A könnte auch Last verwendet werden. Mit match word sagen wir, dass das Ergebnis nach Wortformen gruppiert werden soll und wir erhalten (je nach Korpus) die Ausgabe:

BUNDESTAGWP17V2> group Last match word;
#---------------------------------------------------------------------
(none)                        Freiheit                            2131
                              Freiheiten                           108

Bei Suchabfragen, die mehr als ein Wort umfassen, z.B. [pos="ADJA"] [lemma="Freiheit"] kann mit match und matchend gearbeitet werden, um die Einheit auszuwählen, die gruppiert werden soll. Nähere Informationen dazu finden sich in der Dokumentation.

Sind im Korpus aber Metadaten codiert, können wir die Ergebnisse auch danach gruppieren lassen. Um herauszufinden, welche Metadaten zur Verfügung stehen, kann show cd; eingegeben werden. Die Ausgabe sieht beispielsweise so aus:

BUNDESTAGWP17V2> show cd
===Context Descriptor=======================================

left context:     25 characters
right context:    25 characters
corpus position:  shown
target anchors:   not shown

Positional Attributes:  * word
                          pos
                          lemma
                          ner

Structural Attributes:    s
                          doc
                          text
                          text_id              [A]
                          text_source          [A]
                          text_lp              [A]
                          text_url             [A]
                          text_protocol_no     [A]
                          text_date            [A]
                          text_year            [A]
                          text_yearmonth       [A]
                          text_type            [A]
                          text_function        [A]
                          text_name            [A]
                          text_party           [A]

Aligned Corpora:          

============================================================

Unter Structural Attributes werden alle Metadaten aufgeführt (und unter "Positional Attributes" die positionalen Angaben). In diesem Korpus ist also jeweils der Parteienname mit text_party erfasst. Entsprechend können wir die Ergebnisse danach gruppieren lassen:

group A match text_party;

Die Ausgabe ergibt:

BUNDESTAGWP17V2> group Last match text_party;
#---------------------------------------------------------------------
(none)                        CDU_CSU                              923
                              FDP                                  530
                              SPD                                  306
                              DIE_LINKE                            237
                              B90_DIE_GRUENEN                      199

Ausgabe beeinflussen und speichern

Es gibt verschiedene Möglichkeiten, die Ausgabe der KWiC-Zeilen zu formatieren. Mit set PrintStructures können strukturale Attribute angegeben werden, die angezeigt werden sollen, z.B.:

set PrintStructures "text_party, text_year";

Zudem können mit show die anzuzeigenden positionalen Attribute ausgewählt werden. So werden zusätzlich zu den Wortformen die POS-Tags (sofern mit pos benannt) und Lemmata (sofern mit lemma benannt) angezeigt:

show +pos +lemma;

Mit set Context kann der anzuzeigende Kontext definiert werden:

set Context 20;
set Context 10 words;

Mit cat kann ein Ergebnis als Textdatei abgespeichert werden:

cat Last > "dateiname.txt";

Wenn vorher set PrintOptions hdr; gesetzt worden ist, werden mit den Ergebnissen Angaben zur Suchanfrage und zum Korpus mit ausgegeben.

Effizient Frequenzlisten erstellen

Außerhalb der Abfragekomponente der CWB, die wir oben über cqp verwendet haben, gibt es weitere nützliche Programme, die zur CWB gehören. Dazu gehören cwb-scan-corpus und cwb-lexdecode, die hier kurz vorgestellt werden sollen.

cwb-lexdecode ist nützlich, um Frequenzlisten zu erstellen:

cwb-lexdecode -r pfad/zur/registry/ -f -s -P lemma korpusname > frequenzen.txt

Damit wird eine Liste aller Lemmata mit Frequenzangaben erstellt. Weitere Nutzungsmöglichkeiten finden sich im Encoding Tutorial – alle Optionen des Programmes können auch über cwb-lexdecode -h aufgerufen werden.

Das Programm cwb-scan-corpus erlaubt die effiziente Erstellung kombinatorischer Frequenztabellen. Eine ausführliche Hilfe dazu findet sich ebenfalls im Encoding Tutorial.

Dem Befehl werden strukturale oder positionale Attribute übergeben, deren Kombinationen ausgezählt werden sollen:

cwb-scan-corpus -r pfad/zur/registry/ korpusname text_party text_year

Damit wird im Korpus ausgezählt, wie viele Tokens für jede Kombination von Partei und Jahr im Korpus vorhanden sind:

112123          2009
154191          2010
226784  CDU_CSU 2009
1975505 CDU_CSU 2010
2225931 CDU_CSU 2011
2131387 CDU_CSU 2012
1516101 CDU_CSU 2013
1310638 SPD     2011
1290532 SPD     2012
158501  SPD     2009
1247550 SPD     2010
907103  SPD     2013
1024351 FDP     2012
1020832 FDP     2011
950768  FDP     2010
100772  FDP     2009
710576  FDP     2013
582907  DIE_LINKE       2013
79231   DIE_LINKE       2009
679612  DIE_LINKE       2010
787946  DIE_LINKE       2011
798906  DIE_LINKE       2012
378134  B90_DIE_GRUENEN 2013
803997  B90_DIE_GRUENEN 2011
469496  B90_DIE_GRUENEN 2012
87581   B90_DIE_GRUENEN 2009
739152  B90_DIE_GRUENEN 2010
282     unbekannt       2010
1535    fraktionslos    2013

Natürlich können auch die Frequenzen der vorkommenden Lemmata pro Partei so ausgegeben werden:

cwb-scan-corpus -r pfad/zur/registry/ korpusname text_party lemma

127     SPD     Nutzen
707     B90_DIE_GRUENEN bitte
416     DIE_LINKE       gleichzeitig
40      FDP     Freiraum
36302   CDU_CSU können
324             gut
2       FDP     tüchtig
5       DIE_LINKE       lindern
438     SPD     Auftrag
13459   CDU_CSU ;
22              Morgen
555     DIE_LINKE       wirtschaftlich
62      B90_DIE_GRUENEN Feststellung
1137    CDU_CSU zitieren
241     SPD     Schaden
258     FDP     erarbeiten
10944           ,
...

Zudem können so auch einfach Bigramme, Trigramme etc. berechnet werden, indem den Angaben ein Offset mitgegeben wird:

cwb-scan-corpus -r pfad/zur/registry/ korpusname lemma+0 lemma+1

Mit +0 und +1 wird angegeben, dass jeweils das Lemma an Position 0 mit dem danach stehenden in Position 1 kombiniert werden soll. Die Ausgabe kann dann gleich nach Frequenz rücklaufend sortiert und auf die Top 20 gekürzt werden, um die häufigsten Bigramme zu erhalten:

cwb-scan-corpus -r pfad/zur/registry/ korpusname lemma+0 lemma+1 | sort -nr -k 1 | head -20

Zusätzlich können Bedingungen definiert werden, etwa, indem mit regulären Ausdrücken nur Lemmata ausgewählt werden, deren POS-Tag mit N, A, V oder P beginnt. Da die Bedingungen nicht mit in der Tabelle ausgegeben werden sollen, wird ihnen ein Fragezeichen vorangestellt:

cwb-scan-corpus -r pfad/zur/registry/ korpusname lemma+0 lemma+1 ?pos+0=/[NAVP].+/ ?pos+1=/[NAVP].+/ | sort -nr -k 1 | head -20

115402	in	die
109663	bei	die
92682	Beifall	bei
70483	für	die
68707	die	sein
59888	die	Grüne
53165	die	CDU
51228	die	Linke
49844	sein	die
49547	auf	die
48919	die	FDP
47569	die	SPD
46359	mit	die
38772	von	die
35731	Abgeordnete	die
35435	bei	Abgeordnete
28049	in	dies
27949	an	die
27444	haben	die
26684	es	sein

Die Anfrage lässt sich leicht auf Trigramme auf Basis von Wortformen modifizieren und das Ergebnis in eine Datei schreiben:

cwb-scan-corpus -r pfad/zur/registry/ korpusname word+0 word+1 word+2 ?pos+0=/[NAVP].+/ ?pos+1=/[NAVP].+/ ?pos+2=/[NAVP].+/ | sort -nr -k 1 > ergebnis.txt

70265	Beifall	bei	der
31034	bei	Abgeordneten	der
24219	bei	der	CDU
24053	bei	der	SPD
14739	bei	der	FDP
14464	bei	der	LINKEN
12046	Abgeordneten	der	CDU
11295	Beifall	beim	BÜNDNIS
11093	Beifall	bei	Abgeordneten
8692	Abgeordneten	der	SPD
5685	Abgeordneten	der	FDP
4745	an	dieser	Stelle
4601	Das	Wort	hat
4599	Abgeordneten	der	LINKEN
4537	in	den	letzten
4384	Fraktion	Die	Linke
4239	Zuruf	von	der
4182	bei	Abgeordneten	des
3945	Abgeordneten	des	BÜNDNISSES
3583	von	der	SPD

Diese wenigen Anschauungsbeispiele sollen genügen, einen ersten Eindruck über die Möglichkeiten der CWB zu erhalten.