After I saw a wordcloud on the blog of my father, I decided to create one for my blog too. After a call with him I found out, that he created it once and never regenerated it, because of performance reasons due of his blog software. I want it to be dynamic created by a self written pelican plugin. Unfortunately I am not finished installing all the required modules on the webserver, so I don not have a wordcloud with all my tags yet.

My python script

I found a python script on the blog of my father and modified it for general use.

#!/usr/bin/env python3
from os import path
from wordcloud import WordCloud, STOPWORDS

#function to map color to my blog scheme
def color_func(word, font_size, position, orientation, random_state=None, **kwargs):
    x = position[1] / 400.0
    g = x * 153 + (1-x) * 87
    b = x * 87 + (1-x) * 153
    return (21, int(g), int(b))

#Main function
def create(in_f, out_f):
    d = path.dirname(__file__)
    stopwords = STOPWORDS.copy()
    text = open(path.join(d, in_f)).read()
    wordcloud = WordCloud(background_color="white", mac_words=25, stopwords=stopwords).generate(text)
    wordcloud.recolor(color_func=color_func, random_state=3)
    wordcloud.to_file(path.join(d, out_f))

#To be usable as shell program
if __name__ == "__main__":
    import sys
    in_f = sys.argv[0]
    out_f = sys.argv[1]
    create(in_f, out_f)

Usage

Now I have two methods to use it

As a cli with

wordcloudcli.py text.txt out.png

As a python module

import wordcloudcli
wordcloudcli.create("text.txt", "out.png")

So let's have some fun with it

The whole Bible

Wordcloud of the bible

Dracula

Wordcloud of Dracula

Huckleberry Finn

Wordcloud of Huckleberry Finn

Romeo and Juliet

Wordcloud of Romeo and Juliet