咔片PPT · AI自动生成演示文稿,模板丰富、排版精美 讯飞智文 · 一键生成PPT和Word,高效应对学习与办公

当一篇文章你想提取下文章里面提到最多的词语是什么的时候,顺便做个图示,那么最好的展示方式就是词云了。

词云图就是可以通过提取关键词做到一目了然的显示,在当下这个快节奏的社会里特别适合。

那么怎么自己做一个词云呢

其实很简单,使用python的话非常的方便,毕竟有很多人已经造好轮子了,只需要稍微组装调用就可以。

  1. 第一步

先确认需要用到哪些库,比如os库用来获取文件路径,PIL是用来读取图片信息的,numpy是高效的数组库,用来将图片信息生成数组,matplotlib库是用来形成图像的,wordcloud是用来生成词云信息,jieba是用来中文分词的。当前这些库也不是所有都会用到,可能只用到其中部分,导入的时候可以选择下。

  1. 第二步

编写程序,先导入各个库;然后读取文本文件;对文本进行分词,计算频次;设置停用词,因为一篇文章最多的词语可能是一些修饰或者语气词,需要把这些词屏蔽掉;接下去导入背景图;根据背景图生成词云,设置词云的相关参数;最后根据背景图生成词云图。

  1. 下面就是找了篇网上的文章生成的词云


背景图


词云图

# -*- coding: utf-8 -*-

"""

author: YoRed

"""

from os import path

from PIL import Image

import numpy as np

import matplotlib.pyplot as plt

import os

from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator

import jieba

# get data directory (using getcwd() is needed to support running example in generated IPython notebook)

pt = path.dirname(__file__) if "__file__" in locals() else os.getcwd()

# 读取文件

chtext=""

text_file = input("Please input the name of txt,Default name is 'test.txt':")

if text_file=='':

text_file='test.txt'

with open(path.join(pt, text_file),encoding='utf-8') as f:

for line in f.readlines():

line = line.strip('n')

chtext += ' '.join(jieba.cut_for_search(line))#全模式


#chtext += ' '.join(jieba.cut(line,cut_all=True))#全模式

img=input("Please input the name of source background image:")

# read the mask image

txt_mask = np.array(Image.open(path.join(pt, img)))

#txt_mask

stopwords = set(STOPWORDS)

st_words=["正常","nbsp","br"]#停用词

for i in st_words:

stopwords.add(i)

#print(chtext)

# 绘制词云图

wc = WordCloud(

background_color='white', # 设置背景颜色,与图片的背景色相关

mask=txt_mask, # 设置背景图片

font_path='C:WindowsFontsFZSTK.TTF', # 显示中文,可以更换字体

max_words=30000, # 设置最大显示的字数

stopwords=stopwords, # 设置停用词,停用词则不再词云图中表示

#max_font_size=150, # 设置字体最大值

random_state=1, # 设置有多少种随机生成状态,即有多少种配色方案

scale=1.25, # 设置生成的词云图的大小

contour_width=3,

contour_color='steelblue'

)

# 传入需画词云图的文本

wc.generate(chtext)

#改变字体颜色,字体颜色为背景图片的颜色

image_colors = ImageColorGenerator(txt_mask)

#plt.imshow(wc.recolor(color_func=image_colors))

print("Save picture in 'im.jpg'")

wc.to_file(path.join(d, "im.jpg"))

plt.imshow(wc, interpolation='bilinear')

# 隐藏图像坐标轴

plt.axis("off")

plt.imshow(txt_mask, cmap=plt.cm.gray, interpolation='bilinear')

plt.axis("off")

# 展示图片

plt.show()