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

本文介绍了如何使用Python的wordcloud模块生成词云,详细解释了WordCloud类的常用参数,并提供了一个针对1000首古诗的词云分析示例,包括停用词设置和中文字体配置。
摘要由CSDN通过智能技术生成

今天来介绍一下如何使用 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)

(本节完。)

推荐阅读:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值