2013-05-20 29 views
22

Od Creating a subset of words from a corpus in R, odbierający może z łatwością przekonwertować term-document matrix na chmurę słów.Jak utworzyć chmurę słowa z korpusu w języku Python?

Czy istnieje podobna funkcja z bibliotek Pythona, która pobiera albo tekst źródłowy tekstowy albo NLTK corpus lub Gensim Mmcorpus do chmury słowa?

Wynik będzie wyglądać mniej więcej tak: enter image description here

+1

Po jakimś szalonym reimplementacji, tutaj jest bezwstydna, ale tu jest nie tak 'rozwiązanie sklearn' który wykorzystuje kod Andreasa Muellera. https://github.com/alvations/translation-cloud – alvas

Odpowiedz

10

W przypadku, gdy wymagają tych chmur słowo aby wyświetlić je na stronie internetowej lub w aplikacji internetowej, możesz skonwertować swoje dane do formatu json lub csv i załadować je do biblioteki wizualizacji JavaScript, takiej jak d3. Word Clouds on d3

Jeśli nie, odpowiedź Marcina jest dobrym sposobem na robienie tego, co opisujesz.

3

Przykład kodu amueller w działaniu

Rozkazów linii/terminali:

sudo pip install wordcloud 

następnie uruchomić skrypt pytona:

# 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

W rzeczywistości jest to bardzo zwodnicza chmura słów. Biorąc pod uwagę, że jest znormalizowany w oparciu o piksele i długość słowa, chociaż liczby są takie same, dlatego USA jest większe niż baza. – alvas

+0

Zobacz dokumentację. Wykres może być zmieniony dla stopwords i relative_scaling (częstotliwość względem rangi podczas skalowania słów). Domyślnie relative_scaling wynosi 0 (Rank), wierzę, że szukasz relative_scaling = 1.0 (Frequency). – MyopicVisage

+0

Czy możesz umieścić to w odpowiedzi? A także generować różne chmury słów z 1.0? Dzięki! To pomoże przyszłym czytelnikom =) – 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