Python wordcloud入门教程

我们之前已经得到了《西游记》中的高频词语,但是分词结果太不直观了。接下来,我们介绍如何用词云来展现这些信息。

首先,我们要明白什么是词云。词云又叫作文字云,是对文本数据中出现频率较高的“关键词”在视觉上的突出呈现,把关键词的渲染成类似云一样的彩色图片,从而一眼就可以领略文本数据所要表达的主要意思。我们在本节借助的是 wordcloud 这个词云模块。

Python wordcloud安装

首先,我们需要安装 wordcloud 模块。还是使用 pip 工具,在命令行中输入“pip install wordcloud”,回车后开始安装,如图 1 所示。

Python安装wordcloud模块
图 1

安装成功后,我们可以看到当前安装的 wordcloud 模块的版本是 1.5.0,如图 2 所示。

Python安装的wordcloud模块
图 2

因为 wordcloud 模块要用到 matplotlib 模块,如果没有安装过这个模块,调用 wordcloud 就会报错,如图 3 所示。

Python安装wordcloud模块
图 3

所以为了使用 wordcloud,我们还需要安装 matplotlib,安装方式如图 4 所示。

Python安装matplotlib
图 4

Python wordcloud 的使用

在使用 wordcloud 时,要导入 wordcloud 模块,然后就可以使用 wordcloud.WordCloud() 方法来创建一个词云图。我们可以指定词云图的字体、图片大小以及背景色。

我们在西游记的分词代码中增加了生成词云图的功能,新增代码突出显示出来。代码如下。
import jieba
import wordcloud
def takeSecond(elem):
    return elem[1]
def createWordCloud(text):
    w=wordcloud.WordCloud  
       (font_path="msyh.ttf",width=1000,height=500,background_color="white")
    w.generate(text)
    w.to_file("西游记词云图.jpg")
def main():
    path = "西游记.txt"
    file = open(path,"r",encoding="utf-8")
    text=file.read()
    file.close()
    words = jieba.lcut(text)
    counts = {}
    for word in words:
        if len(word) == 1:
            continue   
        elif word == "大圣" or word=="老孙" or word=="行者" or word=="孙大圣" or word=="孙行者" or word=="猴王" or word=="悟空" or word=="齐天大圣" or word=="猴子":
            rword = "孙悟空"
        elif word == "师父" or word == "三藏" or word=="圣僧":
            rword = "唐僧"
        elif word == "呆子" or word=="八戒" or word=="老猪":
            rword = "猪八戒"
        elif word=="沙和尚":
            rword="沙僧"
        elif word == "妖精" or word=="妖魔" or word=="妖道":
            rword = "妖怪"
        elif word=="佛祖":
            rword="如来"
        elif word=="三太子":
            rword="白马"
        else:
            rword = word
        counts[rword] = counts.get(rword,0) + 1
    file = open("excludes.txt","r")
    excludes =file.read().split(",")
    file.close
    for delWord in excludes:
        try:
            del counts[delWord]
        except:
            continue
    items = list(counts.items())
    items.sort(key = takeSecond,reverse=True)   
    for i in range(20):
        item=items[i]
        keyWord =item[0]
        count=item[1]
        print("{0:<10}{1:>5}".format(keyWord,count))
    createWordCloud(str(items[0:20]))
main()

正如前面所说的,首先需要导入 wordcloud 模块。然后我们新添加了一个名为 createWordCloud() 的自定义函数,它的参数就是要生成词云图的词组,我们把这个参数叫作 text。

在该函数中,首先生成了一个词云对象,指定字体的路径是“msyh.ttf”,图片的宽度是 1000 像素,高度是 500 像素,背景色是白色。然后调用 generate 方法生成词云,传入的参数就是要生成词云图的词组(即 text )。然后,指定词云图输出到的文件。

记住,如果词语中有中文,我们一定要设置字体路径,否则出来都是一个一个的方框,而不是文字,如图 5 所示。

Python安装wordcloud模块
图 5

在 main() 函数中,调用了这个新增加的函数,并且将列表 items 中的前 20 个高频词转换为字符串,作为参数传递给这个函数。

运行程序,就可以在指定路径下得到我们的词云图,可以看到,越是高频词,字体就会更大更醒目,如图 6 所示。


图 6

通过这个词云图,我们可以对于《西游记》中的重要人物一目了然,整个小说就是围绕着唐僧师徒四人展开的,他们的核心任务就是“取经”,他们会在取经路上遇到各种“妖怪”以及“小妖”,还好他们有重要的后援“菩萨”和“如来”。

到这里,我们对小说《西游记》的分词就结束了。你也可以去找一些自己喜欢的文章,使用 jieba 分词来分析文章中的主要人物和剧情。