komplizierte Wordcloud
Hier benutzen wir nltk um den Text den wir einlesen wollen, einmal zu sÀubern, stemmen usw. um dann so eine "bessere" Wordcloud zu erstellen.
Je nachdem was dein Ziel ist mit der Wordcloud, solltest du vielleicht dieses Kapitel hier komplett ignorieren, denn stemming, lemmatizing macht die Wordcloud am ende unleserlicher.
Tokenisierung
Was ist das? Was ist ein Token? Satz oder Wort?
nltk.tokenize.sent_tokenize(text)
nltk.tokenize.word_tokenize(text)
nltk.tokenize.WhitespaceTokenizer.tokenize(text)
AufrÀumen
Erstmal schauen wir uns an, was "stopwords" ĂŒberhaupt sind:
nltk.corpus.stopwords.words("english")
nltk.corpus.stopwords.words("german")
Als erstes machen wir alle Tokens lowercase:
tokens = [token.casefold() for token in tokens]
Anstelle .casefold()
könnten wir auch .lower()
verwenden, aber .casefold()
ist aggresiver.
Jetzt entfernen wir alle stopwords von tokens:
tokens = [token for token in tokens if not token in stopwords]
Entferne alle Punctuation
tokens = [token for token in tokens if not token in string.punctuation]
Stemming
stemmer = nltk.stem.PorterStemmer()
tokens = [stemmer.stem(token) for token in tokens]
Lemmatizing
TODO
Am ende sieht unser kompletter Code so hier aus:
def main():
f = open("books/lafcadio.txt", "r")
book = f.read()
f.close()
words = nltk.tokenize.word_tokenize(book)
stopwords = nltk.corpus.stopwords.words("english")
## Filtering Step
words = [word.lower() for word in words]
words = [word for word in words if word not in stopwords]
# words = [word for word in words if not word.isalpha()]
words = [word for word in words if word not in string.punctuation]
words = [word for word in words if any(c.isalpha() for c in word)]
words = [word for word in words if word[0].isalpha()]
# words = [word for word in words if len(word) == 2 and word[0].isalpha() and word[1] in string.punctuation]
## Stemming Step
stemmer = nltk.stem.PorterStemmer()
words = [stemmer.stem(word) for word in words]
text = " ".join(words)
wordcloud = WordCloud(
contour_color = "grey",
contour_width = 10,
background_color = "white",
height = 1000,
width = 1000,
max_words = 200,
random_state = 5,
).generate(text).to_file("output/cloud_comlicated.png")
plt.imshow(wordcloud)
plt.show()