Daten analysieren | Anwendungen |
CWB importieren | |
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.
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.
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
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.
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.
CWB importieren | |
Daten analysieren | Anwendungen |