2013-05-20 22 views
22

Von Creating a subset of words from a corpus in R kann der Beantworter leicht eine term-document matrix in eine Wortwolke einfach umwandeln.Wie erstellt man eine Wortwolke aus einem Korpus in Python?

Gibt es eine ähnliche Funktion von Python-Bibliotheken, die entweder ein Rohwort Textdatei oder NLTK Korpus oder Gensim Mmcorpus in eine Wortwolke nimmt?

wird das Ergebnis wie folgt aussehen etwas: enter image description here

+1

Nach ein paar tollen Reimplementierungen, hier ist der schamlose Stecker, aber hier ist eine nicht so "sklearn" Lösung, die Andreas Mueller Code verwendet. https://github.com/alvations/translation-cloud – alvas

Antwort

10

Im Fall, dass Sie diese Wortwolken um sie in der website oder in der web-app anzuzeigen, können sie ihre daten in das json oder csv format konvertieren und in eine JavaScript-visualisierungsbibliothek wie zb d3 laden. Word Clouds on d3

Wenn nicht, Marcins Antwort ist eine gute Möglichkeit, das zu tun, was Sie beschreiben.

3

Beispiel für Code, der amueller in Aktion

In Befehlszeile/Terminal:

sudo pip install wordcloud 

Dann Python-Skript ausführen:

# Simple WordCloud 
from os import path 
from scipy.misc import imread 
import matplotlib.pyplot as plt 
import random 

from wordcloud import WordCloud, STOPWORDS 

text = 'all your base are belong to us all of your base base base' 
wordcloud = WordCloud(font_path='/Library/Fonts/Verdana.ttf', 
         relative_scaling = 1.0, 
         stopwords = {'to', 'of'} # set or space-separated string 
        ).generate(text) 
plt.imshow(wordcloud) 
plt.axis("off") 
plt.show() 

enter image description here

+0

Eigentlich ist dies eine ziemlich trügerische Wortwolke. Angesichts der Tatsache, dass es auf der Grundlage der Pixel und der Länge des Wortes normalisiert ist, obwohl die Zählungen gleich sind, ist US deshalb größer als die Basis. – alvas

+0

Siehe Dokumentation. Die Darstellung kann für Stoppwörter und relative Skalierung (Häufigkeit vs. Rang beim Skalieren von Wörtern) geändert werden. Standardmäßig ist relative_scaling 0 (Rang), ich glaube, dass Sie nach relativer_skalierung = 1.0 (Häufigkeit) suchen. – MyopicVisage

+0

Könnten Sie das in die Antwort einfügen? Und generieren Sie auch die unterschiedliche Wortwolke mit 1.0? Vielen Dank! Das wird zukünftigen Lesern helfen =) – alvas

1
from wordcloud import WordCloud, STOPWORDS 
stopwords = set(STOPWORDS) 

def show_wordcloud(data, title = None): 
    wordcloud = WordCloud(
     background_color='white', 
     stopwords=stopwords, 
     max_words=200, 
     max_font_size=40, 
     scale=3, 
     random_state=1 # chosen at random by flipping a coin; it was heads 
    ).generate(str(data)) 

    fig = plt.figure(1, figsize=(12, 12)) 
    plt.axis('off') 
    if title: 
     fig.suptitle(title, fontsize=20) 
     fig.subplots_adjust(top=2.3) 

    plt.imshow(wordcloud) 
    plt.show() 

show_wordcloud(Samsung_Reviews_Negative['Reviews']) 
show_wordcloud(Samsung_Reviews_positive['Reviews'])