从多组文本生成WordCloud

时间:2016-01-19 21:46:16

标签: python word-cloud

基于这个问题How to create a word cloud from a corpus in Python?,我确实使用amueller's库构建了一个词云。但是,我没有看到如何用更多的文本集来提供云。这是我到目前为止所尝试的:

wc = WordCloud(background_color="white", max_words=2000, mask=alice_mask,
               stopwords=STOPWORDS.add("said"))
wc.generate(set_of_words)
wc.generate("foo") # this overwrites the previous line of code
# but I would like this to be appended to the set of words

我找不到图书馆的任何手册,所以我不知道如何继续,是吗? :)

实际上,如您所见:Dictionary with array of different types as value in Python,我有这样的数据结构:

category = {  "World news": [2, "foo bla content of", "content of 2nd article"],
              "Politics": [1, "only 1 article here"],
              ...
}

我想追加世界云" foo bla内容"和#34;第二篇文章的内容"。

2 个答案:

答案 0 :(得分:1)

https://github.com/amueller/word_cloud/blob/master/wordcloud/wordcloud.py中对类的简要描述中没有更新方法,因此您需要重新生成wordcloud或添加更新方法。

最简单的方法可能是维护原始源文本,然后添加到此结尾,然后重新生成。

答案 1 :(得分:1)

最简单的解决方案是使用更新的语料库重新生成wordcloud。

要使用category数据结构中包含的文本(针对所有主题)构建语料库,您可以使用此理解:

# Update the corpus
corpus = " ".join([" ".join(value[1:]) for value in category.values()])
# Regenerate the word cloud
wc.generate(corpus)

为数据结构中的单个密钥构建单词云(例如Politics):

# Update the corpus
corpus = " ".join(category["Politics"][1:])
# Regenerate the word cloud
wc.generate(corpus)

说明:

  • 加入将多个字符串粘合在一起,由给定的分隔符
  • 分隔
  • [1:] 从列表中除了第一个
  • 之外的所有元素
  • dict.values()给出字典中所有值的列表

表达式" ".join([" ".join(value[1:]) for value in category.values()])因此可以翻译为:

首先将每个键的所有元素粘在一起,除了第一个(因为它是一个计数器)。然后将所有结果字符串粘在一起。