Как создать облако слов из корпуса в Python?

С создание подмножества слов из корпуса в R, ответчик может легко преобразовать term-document matrix в облако слов легко.

есть ли аналогичная функция из библиотек python, которая принимает либо необработанный текстовый файл word, либо NLTK корпус Gensim Mmcorpus в облако слов?

результат будет выглядеть так: enter image description here

5 ответов


вот сообщение в блоге, которое делает именно это:http://peekaboo-vision.blogspot.com/2012/11/a-wordcloud-in-python.html

весь код здесь:https://github.com/amueller/word_cloud


Если вам нужны эти облака слов для их отображения на веб-сайте или веб-приложении, вы можете преобразовать свои данные в формат JSON или csv и загрузить их в библиотеку визуализации JavaScript, такую как d3. слово облака на d3

Если нет, ответ Марцина-хороший способ сделать то, что вы описываете.


пример кода амюллера в действии

в командной строке / терминале:

sudo pip install wordcloud

затем запустите скрипт 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


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


вот короткий код

#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 __name__ == '__main__':

    show_wordcloud(text_str)