如何用Python 制做词云-对1000首古诗作词云分析

公号:码农充电站pro
主页:https://codeshellme.github.iohtml

在这里插入图片描述

今天来介绍一下如何使用 Python 制做词云python

词云又叫文字云,它能够统计文本中频率较高的词,并将这些词可视化,让咱们能够直观的了解文本中的重点词汇。git

词的频率越高,词显示的大小也就越大。github

1,wordcloud 模块

wordcloud 是一个词云生成器,它不只是一个 Python 库,仍是一个命令行工具。咱们能够经过 wordcloud 官方文档,和示例库来学习如何使用它。算法

在使用 wordcloud 以前,须要先安装它:shell

pip install wordcloud

2,WordCloud 类

WordCloud 类用于建立词云对象,先来看下它的原型:app

WordCloud(font_path=None, 
  width=400, height=200, 
  margin=2, ranks_only=None, 
  prefer_horizontal=0.9, 
  mask=None, scale=1, 
  color_func=None, max_words=200, 
  min_font_size=4, stopwords=None, 
  random_state=None, 
  background_color='black', 
  max_font_size=None, 
  font_step=1, mode='RGB', 
  relative_scaling='auto', 
  regexp=None, collocations=True, 
  colormap=None, normalize_plurals=True, 
  contour_width=0, contour_color='black', 
  repeat=False, include_numbers=False, 
  min_word_length=0, 
  collocation_threshold=30)

能够看到,WordCloud 类有不少参数能够设置,这里介绍一些经常使用的参数:dom

  • font_path:设置字体文件路径,字体文件以 .ttf 为后缀。
    • 若是分析的文本是中文,则须要设置中文字体,不然会乱码。
  • background_color:设置图片背景颜色,默认为 black,也能够设置为 white 等。
  • mask:设置背景图片。
  • max_words:设置最大的词数,默认为200。
  • stopwords:设置停用词。
  • max_font_size:设置字体最大值。
  • width:设置画布的宽度,默认为400。
  • height:设置画布的高度,默认为200。
  • random_state:设置多少种随机状态,即多少种颜色。

在建立好词云对象后,可使用 generate 方法生成词云,并使用 to_file 方法将词云图像保存在文件中。工具

generate 方法的原型以下:学习

generate(text)

参数text 是一个用空格隔开的文本字符串。若是分析的是中文,须要先用 jieba 进行分词,能够参考这里

除了将词云图像保存在文件中,还可使用 Matplotlib 模块显示词云图像,示例代码以下:

import matplotlib.pyplot as plt

plt.imshow(wordcloud)  # wordcloud 是词云对象
plt.axis("off")        # 用于关闭坐标轴
plt.show()

3,一个简单的示例

下面演示一个最简单的示例,来看如何使用 wordcloud

首先建立词云对象

from wordcloud import WordCloud
wc = WordCloud()

生成词云:

text = "Python is a programming language, it is easy to use."
wc.generate(text)

词云对象的 words_ 属性中存储了每一个单词的(归一化后的)权重,权重的范围是 (0, 1]

words_ 属性是一个字典类型,它存储的键的最大个数为 max_words,即 WordCloud 类的参数。

以下:

>>> wc.words_
{'Python': 1.0, 'programming': 1.0, 'language': 1.0, 'easy': 1.0, 'use': 1.0}
# 示例中的这些单词出现的频率都相等(均为 1),
# 因此它们的权重都是 1。

Matplotlib 展现词云图像:

import matplotlib.pyplot as plt

plt.imshow(wc) 
plt.axis("off")
plt.show()

词云图像以下:

在这里插入图片描述

4,对古诗作词云分析

我在这里准备了一个案例,是对1000 首古诗作词云分析。

代码目录以下:

wordcloud/
├── SimHei.ttf
├── gushi.txt
└── gushi_wordcloud.py

其中:

  • SimHei.ttf:是一个字体文件,避免词云分析时出现中文乱码。
  • gushi.txt:该文件中包含了1000 首古诗
  • gushi_wordcloud.py:是词云分析代码

我将代码也放在这里,方便查看:

#!/usr/bin/env python
# coding=utf-8

import os
import sys
import jieba
from wordcloud import WordCloud

if sys.version.startswith('2.'):
    reload(sys)
    sys.setdefaultencoding('utf-8')

# 去掉一些做者的名字
STOPWORDS = [
        u'李白', u'杜甫', u'辛弃疾', u'李清照', u'苏轼',
        u'李商隐', u'王维', u'白居易', u'李煜', u'杜牧',
        ]

def load_file(file_path):
    if sys.version.startswith('2.'):
        with open(file_path) as f:
            lines = f.readlines()
    else:
        with open(file_path, encoding='utf-8') as f:
            lines = f.readlines()

    content = ''

    for line in lines:
        line = line.encode('unicode-escape').decode('unicode-escape')
        line = line.strip().rstrip('\n')

        content += line

    words = jieba.cut(content)

    l = []
    for w in words:
        # 若是词的长度小于 2,则舍去
        if len(w) < 2: continue

        l.append(w)

    return ' '.join(l)


if __name__ == '__main__':
    file_path = './gushi.txt'
    content = load_file(file_path)

    wc = WordCloud(
            font_path="./SimHei.ttf",
            stopwords=STOPWORDS,
            width=2000, height=1200)

    wc.generate(content)
    wc.to_file("wordcloud.jpg")

其中:

  • STOPWORDS 停用词列表,是一些做者的名字。
  • load_file 方法用于加载文本,其中用到了 jieba 分词。

最后将词云图像保存在了 wordcloud.jpg 文件中,以下:

在这里插入图片描述

咱们也能够从词云对象的words_ 属性中查看每一个词的权重,这里我列出前十个:

('明月', 1.0)
('今日', 0.9130434782608695)
('不知', 0.8405797101449275) 
('何处', 0.8260869565217391) 
('不见', 0.8115942028985508) 
('春风', 0.7536231884057971) 
('无人', 0.7536231884057971) 
('不可', 0.7536231884057971) 
('万里', 0.7536231884057971) 
('现代', 0.6666666666666666)

(本节完。)


推荐阅读:

如何使用Python 进行数据可视化

Apriori 算法-如何进行关联规则挖掘

PageRank 算法-Google 如何给网页排名

K 均值算法-如何让数据自动分组

KNN 算法-实战篇-如何识别手写数字


欢迎关注做者公众号,获取更多技术干货。

码农充电站pro

相关文章
相关标签/搜索