Packages, Plots & eine Prise Python. Special guest: Mathematica

Word Cloud erstellen

Eine Word Cloud visualisiert die Häufigkeit von Wörtern in einem Text

Eine Word Cloud oder Wortwolke ist eine gute grafische Möglichkeit, einen Text hinsichtlich von Worthäufigkeiten zu analysieren und somit thematische Schwerpunkte zu erkennen und zu visualisieren.
Die erste Schlagwortwolke wurde vermutlich 2002 von Jim Flanagan eingesetzt zur Visualisierung der Häufigkeit von Suchbegriffen. Je häufiger ein Wort in einem Text vorkommt, desto größer wird es in der Word Cloud dargestellt. Das R-Package wordcloud macht die Programmierung, Darstellung und Anpassung einer solchen Word Cloud zum Kinderspiel. Das Beispiel verwendet als Text die Antrittsrede von Donald Trump. Sie lässt sich hier als Text-Datei herunterladen.

library(tm)
library(wordcloud)
library(RColorBrewer)
data <- "https://www.petitessen.net/wp-content/uploads/2017/02/trump.txt"
text <- readLines(data)
doc <- Corpus(VectorSource(text))
toSpace <- content_transformer(function (x , pattern ) gsub(pattern, " ", x))
doc <- tm_map(doc, toSpace, "/")
doc <- tm_map(doc, toSpace, "@")
doc <- tm_map(doc, toSpace, "\\|")
doc <- tm_map(doc, content_transformer(tolower))
doc <- tm_map(doc, removeNumbers)
doc <- tm_map(doc, removeWords, stopwords("english"))
doc <- tm_map(doc, removeWords, c("get", "one", "say", "said", "can", "don’t", "going", "will")) 
doc <- tm_map(doc, removePunctuation)
doc <- tm_map(doc, stripWhitespace)
# doc <- tm_map(doc, stemDocument)
tdm <- TermDocumentMatrix(doc)
m <- as.matrix(tdm)
v <- sort(rowSums(m),decreasing=TRUE)
df <- data.frame(word = names(v),freq=v)
set.seed(1001)
wordcloud(words = df$word, freq = df$freq, min.freq = 2,
          max.words=200, random.order=FALSE, rot.per=0.35, 
          colors=brewer.pal(8, "Dark2"))

Word Cloud der Antrittsrede von Trump

Das Skript: Die benötigten Packages sind tm für das Text Mining, wordcloud für die Erzeugung der Word Cloud und RColorBrewer, um die Wörter einzufärben. Dann liest das Skript den Text ein und weist ihn der Variablen text zu. Die Funktion Corpus() wandelt den Text um in Einen Corpus, der dann in der Variablen doc gespeichert wird. Ein Corpus ist der Textkörper einer Textsammlung. Der nachfolgende Codeblock ersetzt die Zeichen "/", "@" und "|" durch Leerzeichen, wandelt alles in Kleinbuchstaben um und entfernt alle Zahlen. Mit tm_map(doc, removeWords, c(...) lassen sich häufig vorkommende störende Wörter beseitigen. Anschließend werden noch Satzzeichen und Leerzeichen gelöscht.
Optional lässt sich ein Stemming durchführen, indem das Kommentarzeichen vor der Zeile doc <- tm_map(doc, stemDocument) entfernt wird. Stemming reduziert verschiedene Varianten eines Wortes auf den Wortstamm, etwa "gesehen" und "sah" zu "seh". Da die Wortstämme oft verkürzt sind – so wird "kaufe", "kaufen" und "käufer" zu "kauf" – ist Stemming im Beispiel auskommentiert. Besser wäre eine Zusammenführung auf das Verb "kaufen". Das kann Stemming aber nicht leisten, dazu wäre ein aufwändiges Lemmatizing notwendig. Der Befehl TermDocumentMatrix(doc) wandelt den Text in eine Term-Document-Matrix um. Diese Matrix beschreibt die Häufigkeit von Begriffen in einer Textsammlung. Die Spalten stehen für die Dokumente und die Reihen für die Wörter. Schließlich werden die Informationen in einen Data Frame transferiert. wordcloud() erstellt die Wortwolke. Die Parameter bestimmen die Mindesthäufigkeit und die maximale Anzahl der Wörter sowie den Prozentsatz, in dem die Wörter vertikal angeordnet werden sollen.

Teile diesen Beitrag!

2 Kommentare

  1. Peter

    warum sieht das bei mir so nicht aus, sondern es werden die Worte abgeschnitten? Liegt das an R?

  2. admin

    Ich habe es mit R 3.3.2 erstellt. Möglicherweise verhält es sich mit 4.x anders. Ist der Code identisch zu dem aus dem Blog-Beitrag?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*