web-dev-qa-db-fra.com

Comment créer un nuage de mots à partir d'un corpus en Python?

De Création d'un sous-ensemble de mots à partir d'un corpus dans R , le répondant peut facilement convertir un term-document matrix dans un nuage de mots facilement.

Existe-t-il une fonction similaire des bibliothèques python) qui récupère un fichier texte Word brut ou NLTK corpus ou Gensim Mmcorpus dans un nuage Word?

Le résultat ressemblera un peu à ceci: enter image description here

40
alvas

Voici un article de blog qui fait justement cela: http://peekaboo-vision.blogspot.com/2012/11/a-wordcloud-in-python.html

Le code complet est ici: https://github.com/amueller/Word_cloud

55
Marcin
from wordcloud import WordCloud, STOPWORDS
import matplotlib.pyplot as plt
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

13
HeadAndTail

Si vous avez besoin de ces nuages ​​de mots pour les afficher sur un site Web ou une application Web, vous pouvez convertir vos données au format json ou csv et les charger dans une bibliothèque de visualisation JavaScript telle que d . Word Clouds sur d

Sinon, la réponse de Marcin est un bon moyen de faire ce que vous décrivez.

10
valentinos

Exemple de code d'amueller en action

En ligne de commande/terminal:

Sudo pip install wordcloud

Puis exécutez python:

## Simple WordCloud
import matplotlib.pyplot as plt
from wordcloud import WordCloud, STOPWORDS 

text = 'all your base are belong to us all of your base base base'

def generate_wordcloud(text): # optionally add: stopwords=STOPWORDS and change the arg below
    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()

generate_wordcloud(text)

enter image description here

9
MyopicVisage

voici le code court

#make wordcoud

from wordcloud import WordCloud, STOPWORDS
import matplotlib.pyplot as plt
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()


if __== '__main__':

    show_wordcloud(text_str)   
1
Ujjawal107