Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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()