import numpy as np
from PIL import Image
from wordcloud import wordcloud
import jieba
def Product_WordClouds(text_file_path, background_picture, target_picture_path):
"""
函数说明:
在调用这个函数的时候,传递三个参数,就可以自动生成词云统计图片
参数说明:
(1)text_file_path: 这个参数代表存放文本信息的txt文档的地址
(2)background_picture: 这个参数代表作为词云背景图片的地址
(3)target_picture_path:这个参数代表生成的词云图片的存放地址
"""
information = Read_text(text_file_path) #根据所给的存放信息的txt文档的地址,获得文字信息
words_list = jieba.lcut(information) #利用jieba库,对信息进行分割
#print(words_list) #可以将分割信息打印出来
background_img = Image.open(background_picture)# 读取背景图片
mask_img = np.array(background_img)
Cloud = wordcloud.WordCloud(
mask = mask_img, #数据填充
background_color="snow", #设定背景颜色
font_path="C:\Windows\Fonts\STHUPO.ttf", #指定生成的词云图片中的文字所采用的字体
min_font_size=5, #图片中最小的字体
max_font_size=60, #图片中最大的字体
)
words_list = Remove_redundancy_words(words_list) #对于分割得到的列表进行筛选
Cloud.generate(",".join(words_list))
Cloud.to_file(target_picture_path) # 生成词云图片
def Remove_redundancy_words(words_list,abandon_words_list=None):
"""
函数说明:
这个函数接收待处理的词汇列表,还有一个可选择的冗余词汇列表,处理后返回新的列表,这个函数会删除掉原来列表中长度为一和
用户指定要删除的词汇。目的是处理文本信息,去除 的 地 和 这样的无意义词汇。
参数说明:
(1)words_list:待处理的词汇列表
(2)abandon_words_list:这个是可以选择的,如果调用函数的时候不传递这个参数,则函数只是剔除列表中长度为一的词汇。如果传递参数列表了,则会将
这个列表中出现的词汇在原始列表中删除。
"""
for word in words_list[:]:#删除无意义词汇的循环
if abandon_words_list != None:#判断是否有用户输入一些特定的词汇
if len(word) == 1 or word in abandon_words_list:#判定是否满足删除条件
words_list.remove(word) #在元列表中删除满足条件的词汇
else:
if len(word) == 1:
words_list.remove(word)
return words_list #返回处理之后的列表
def Read_text(filepath):
"""
函数说明:传递给函数一个存放文字信息的txt文档地址,返回这个文档的字符信息
参数说明:
(1)filepath:txt文档的地址
"""
f = open(filepath,encoding='UTF-8')#按照utf-8的编码形式获取文档中的信息
texts = f.read()
return texts #返回文档中的文字信息
text_file_path = './十四五规划.txt' #设定存储信息的txt文档地址
source_img_path = './地图.PNG' #设定背景图片的地址
target_img_path = './cloud_trash.jpg' #设定生成词云图片的目标地址
Product_WordClouds(text_file_path, source_img_path, target_img_path) #调用函数,生成词云图片