2013-05-20 12 views
22

Da Creating a subset of words from a corpus in R, il rispondente può facilmente convertire uno term-document matrix in una nuvola di parole facilmente.Come creare una nuvola di parole da un corpus in Python?

Esiste una funzione simile dalle librerie Python che accetta un file di testo di parole non elaborato o NLTK corpus o Gensim Mmcorpus in una nuvola di parole?

Il risultato sarà un po 'come questo: enter image description here

+1

Dopo qualche pazzesco reimplementation, ecco la spina spudorata ma ecco una soluzione non "sklearn" che utilizza il codice di Andreas Mueller. https://github.com/alvations/translation-cloud – alvas

risposta

10

Nel caso in cui hai bisogno di questi word clouds per visualizzarli nel sito Web o nell'app Web è possibile convertire i dati in formato json o csv e caricarli in una libreria di visualizzazione JavaScript come d3. Word Clouds on d3

In caso contrario, la risposta di Marcin è un buon modo per fare ciò che descrivi.

3

Esempio di codice di amueller in azione

in linea di comando/terminale:

sudo pip install wordcloud 

Quindi eseguite script python:

# 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

In realtà si tratta di una nuvola di parole piuttosto ingannevole. Dato che è normalizzato in base ai pixel e alla lunghezza della parola, anche se i conteggi sono uguali, è per questo che gli Stati Uniti sono più grandi della base. – alvas

+0

Vedere la documentazione. La trama può essere modificata per stopword e relative_scaling (frequenza vs rango quando si ridimensionano le parole). Di default_scaling è 0 (Rank), credo che tu stia cercando relativo_scaling = 1.0 (Frequenza). – MyopicVisage

+0

Puoi metterlo nella risposta? E generare anche la diversa nuvola di parole con 1.0? Grazie! Ciò aiuterà i futuri lettori =) – 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']) 

enter image description here

Problemi correlati