Als ich auf der Big-Data-Konferenz “Strata” in Santa Clara einigen Vorträgen zum Thema Textmining in Datenströmen zugehört habe, ist mir die Idee gekommen, das doch einmal mit politischen Kommunikationen auszuprobieren. Vielleicht ist es möglich, anhand der Wörter, die jemand besonders häufig in seinen Twitternachrichten oder Blogposts verwendet, festzustellen, welcher Partei er oder sie am nächsten steht. Wahrscheinlich kennt jeder die Wahlomaten und politischen Tests, die regelmäßig zu jeder Landtags- oder Bundestagswahl heißlaufen und Wahlempfehlungen ausspucken. Ich frage mich, ob man nicht auch schon aufgrund der öffentlichen Äußerungen auf Twitter solche Empfehlungen aussprechen könnte.
Dazu ist zunächst ein Referenzkorpus notwendig, der die unterschiedlichen Parteiideen repräsentiert. Das könnte man natürlich manuell erstellen und z.B. festlegen, dass das Wort “Eigenverantwortung” für eine gewisse FDP-Nähe spricht, “Solidarität” einem SPD-Profil entspricht und “Open Access” eher einen piratischen Wert darstellt. Das dauert zum einen sehr lange und ist zum anderen eine subjektive Einschätzung. Ein sehr viel schnellerer, weil fast vollständig automatisierbarer, Weg ist die Auswertung der entsprechenden Parteiprogramme. Wenn hier die Werte nicht vorkommen, wo sonst. Also habe ich einmal die 2010er Wahlprogramme für NRW verwendet, um daraus die Worthäufigkeitsvektoren zu errechnen. Ein einfaches Python-Script liest die Parteiprogramme ein (die ich vorher um Seitenzahlen, Inhaltsverzeichnisse und Seitentitel bereinigt habe) und errechnet, wie oft jedes einzelne Wort darin vorkommt.
Dabei kann man schon einen deutlichen Unterschied zwischen den Programmen feststellen: Sie sind unterschiedlich lang …
Grüne 60.347 FDP 39.376 Linke 37.635 SPD 23.904 Piraten 21.800 CDU 8.775
… und sie unterscheiden sich auch in ihrer lexikalischen Vielfalt, d.h. dem Verhältnis von unterschiedlichen Wörtern und der Gesamtzahl der Wörter:
CDU 27,79% Piraten 26,00% SPD 23,11% Linke 21,07% FDP 20,36% Grüne 17,38%
Die Rangordnung ist hier genau umgekehrt – logisch: Wer einen so langen Text schreibt wie die Grünen ihr Wahlprogramm, dem gehen irgendwann einmal die neuen Wörter aus und man muss auf einen der schon verwendeten 10.486 Begriffe zurückgreifen.
Jetzt aber zu den Vektoren. Diese sehen in etwa so aus:
piraten_2010.txt,36,2,2,0,0,0,1,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,
0,0,0,0,1,0,1,0,0,1,0,0,1,0,0,0 ...
Jede Zahl steht für die Häufigkeit eines bestimmten Wortes. Mit dem Cosinus-Ähnlichkeitsmaß kann man nun berechnen, wie nah zwei Vektoren beieinander liegen (oder genauer: Wie groß der Winkel zwischen ihnen ist).
Hier das Ergebnis der Berechnungen:
CDU FDP GRU CDU 0.0000000 0.8736595 0.8847022 FDP 0.8736595 0.0000000 0.9146393 GRU 0.8847022 0.9146393 0.0000000 LIN 0.6898869 0.8065468 0.8468190 PIR 0.6653087 0.8090312 0.8215914 SPD 0.9170037 0.9047183 0.9548909 LIN PIR SPD CDU 0.6898869 0.6653087 0.9170037 FDP 0.8065468 0.8090312 0.9047183 GRU 0.8468190 0.8215914 0.9548909 LIN 0.0000000 0.8882453 0.8122456 PIR 0.8882453 0.0000000 0.7855856 SPD 0.8122456 0.7855856 0.0000000
Der R-Code dazu lautet:
library(lsa)
e <- as.dist(cosine(t(vectors)),diag=TRUE,upper=TRUE)
Zwei interessante Zahlen aus der Tabelle: Die beiden Programme, die sich gemessen an den Worthäufigkeiten am ähnlichsten sind, sind die Programme von SPD und Grünen. Die beiden unähnlichsten Programme sind die der CDU und der Piraten. Aber auch CDU und Linke liegen nicht wirklich auf einer Linie. Aber das war auch so zu erwarten.
Im nächsten Schritt habe ich die Ähnlichkeitsmatrix in eine Distanzmatrix verwandelt und die Ergebnisse visualisiert:
Die Parteien haben aber natürlich nicht nur ein Wahlprogramm für die NRW-Wahl 2010, sondern auch Programme für die Wahlen in Berlin 2011 und im Saarland 2012. Diese habe ich, sofern verfügbar, auch noch in die Distanzmatrix genommen. Das Ergebnis sieht wie folgt aus:
Man sieht sofort, dass die Wahlkampfprogramme von unterschiedlichen Parteien zu einer einzelnen Landtagswahlen einander zum Teil ähnlicher sind als die Programme einer Partei in unterschiedlichen Landtagswahlen. Die y-Achse beschreibt hier eindeutig das Bundesland. Oben sind die Berliner Programme, in der Mitte die NRW-Programme und unten die Saarland-Programme.
Schwieriger ist es, die x-Achse inhaltlich zu beschreiben. In NRW könnte diese Achse durchaus als "Piratizität" beschrieben werden - mit den Piraten am einen extremen Pol und der CDU am anderen. Interessanterweise scheint dies in Berlin nicht zu gelten. Hier liegt die CDU "piratiger" als die Grünen.
Kommentare