einfache Wordcloud
Hier in diesem Kapitel werde ich dir zeigen,
wie wir ganz schnell und einfach eine Wordcloud von einem Buch generieren können.
Dabei ist es egal welches Buch du dafür nimmst.
Es sollte aber am Besten ein Englisches sein,
da es Unterschiede zwischen Sprachen geben kann,
auf die wir achten müssten,
wenn wir damit eine Wordcloud erstellen wollen.
Für meine Wordcloud benutzte ich "Japan: An Attempt at Interpretation" von Lafcadio Hearn,
welches ich als .txt
Datei aus dem Internet runtergeladen habe.
Zu aller erst erstelle ich ein neues Projekt,
genau so wie wir es in
Kapitel: Python Projekt aufsetzen
gemacht haben.
Die .txt
Datei packe ich dann in ein neuen Ordner, namens "books",
den ich in mein neuen Projekt erstellt habe.
Mein Projekt, welches ich auch "simple_wordcloud" genannt habe,
sieht dementsprechen jetzt so aus:
simple_wordcloud
├── books
│ └── lafcadio.txt
├── poetry.lock
├── pyproject.toml
├── README.md
├── src
│ └── simple_wordcloud
│ ├── __init__.py
│ └── main.py
└── tests
└── __init__.py
Jetzt installieren wir noch alle Packages, die wir für eine Wordcloud brauchen werden:
peotry add wordcloud matplotlib
Nun können wir diese beiden Packages in unserem Code importieren:
simple_wordcloud/src/simple_wordcloud/main.py
:
from wordcloud import WordCloud
import matplotlib.pyplot as plt
Hier habe ich WordCloud
von dem Package wordcloud und
pyplot
von matplotlib importiert.
Dabei habe ich pyplot
zu plt
umbenannt,
damit ich später nicht immer pyplot
komplett austippen muss,
sondern einfach nur plt
.
Als aller ersten Schritt müssen wir in der main
Funktion unser Buch einlesen und
als String in einer Variable erstmal zwischenspeichern.
simple_wordcloud/src/simple_wordcloud/main.py
:
def main():
f = open("books/lafcadio.txt", "r")
book = f.read()
f.close()
Mit der Funktion open
geben wir den relativen Pfad innerhalb unseres Projektes zu einer Datei,
die wir sprichwörtlich "öffnen" wollen.
Mit "r"
sagen wir, dass wir diese Datei nur lesen wollen und nicht vorhaben den Inhalt der Datei zu bearbeiten.
Mit f.read()
lesen wir dann den kompletten Inhalt der Datei als String.
Und zum guten Schluss, schließen wir die geöffnete Datei,
damit wir nicht unnötig Resourcen vom Computer blockieren,
die auch andersweitig verwendet werden könnten.
Das wars auch schon fast. Jetzt können wir eine Wordcloud daraus erstellen.
simple_wordcloud/src/simple_wordcloud/main.py
:
def main():
f = open("books/lafcadio.txt", "r")
book = f.read()
f.close()
wordcloud = WordCloud().generate(book)
plt.imshow(wordcloud)
plt.show()
Mit WordCloud()
initialisieren wir eine WordCloud.
Die generate
Funktion generiert dann eine neue WordCloud aus dem Text,
den wir ihr gegeben haben.
plt.imshow(wordcloud)
nimmt die generierte Wordcloud und zeigt diese als ein Image grafisch dar,
beziehungsweise wird die Wordcloud hier noch nicht gezeigt,
sondern einer "Warteliste" hinzugefügt und mit plt.show()
werden dann alle "Aufträge"
von der "Warteliste" grafisch in einem neuen Fenster dargestellt.
Wenn wir jetzt poetry run start
in der Konsole ausführen,
dann sehen wir solch eine Wordcloud:

Diese Wordcloud sieht aber ein bisschen hässlich aus, oder?
Wir können der WordCloud noch mehr Informationen geben, um diese hübscher zu machen. Hier mal ein Beispiel:
def main():
# ...
wordcloud = WordCloud(
background_color = "white",
height = 1000,
width = 1000,
).generate(book)
# ...
Als erstes mache ich den Hintergrund weiß und die Höhe und Weite zu 1000px, damit unsere Wordcloud eine höhere Auflösung hat und nicht mehr so verschwommen aussieht.
Somit sieht unsere Wordcloud jetzt viel besser aus:

Speicher Wordcloud als .png
Mit plt.show()
zeigen wir zwar die Wordcloud grafisch in einem Fenster
und ich könnte jetzt davon ein Screenshot machen,
um es zum Beispiel in meiner Hausarbeit zu verwenden,
aber dies geht auch viel viel besser.
Die to_file
Funktion von WordCloud erlaubt es uns,
eine generierte WordCloud als png, jpg/jpeg, svg oder pdf abzuspeichern.
Zum Beispiel hier speichere ich die Wordcloud als png in den Ordner "ouput", den ich in meinen Projekt erstellt habe, ab:
def main():
# ...
wordcloud.to_file("output/cloud_simple.png")
# ...
Am Ende sieht der ganze Code alles zusammen dann so aus:
from wordcloud import WordCloud
import matplotlib.pyplot as plt
def main():
f = open("books/lafcadio.txt", "r")
book = f.read()
f.close()
wordcloud = WordCloud(
background_color = "white",
height = 1000,
width = 1000,
).generate(book)
wordcloud.to_file("output/cloud_simple.png")
plt.imshow(wordcloud)
plt.show()