前两个代码来自于网上对于词云的处理,代码3是自己改进的内容。词云这玩意,有一个关键是要看自己的找的图片是否美观,因为生成的词云是以背景照片的形状为模板的,遇到非白色的像素才会显示出来,图片的颜色会自动影响词云本身的颜色属性。
代码1
来源于:Python生成中文词云图
#添加自定义分词
import jieba
from os import path #用来获取文档的路径
#词云
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
#词云生成工具
from wordcloud import WordCloud,ImageColorGenerator
#需要对中文进行处理
import matplotlib.font_manager as fm
#背景图
bg=np.array(Image.open("tuoyuan.jpg"))
#获取当前的项目文件加的路径
d=path.dirname(__file__)
#读取停用词表
stopwords_path='stopwords.txt'
#添加需要自定以的分词
# jieba.add_word("叶文洁")
#读取要分析的文本
text_path="ziranyuyan.txt"
#读取要分析的文本,读取格式
text=open(path.join(d,text_path),encoding="utf8").read()
#定义个函数式用于分词
def jiebaclearText(text):
#定义一个空的列表,将去除的停用词的分词保存
mywordList=[]
#进行分词
seg_list=jieba.cut(text,cut_all=False)
#将一个generator的内容用/连接
listStr='/'.join(seg_list)
#打开停用词表
f_stop=open(stopwords_path,encoding="utf8")
#读取
try:
f_stop_text=f_stop.read()
finally:
f_stop.close()#关闭资源
#将停用词格式化,用\n分开,返回一个列表
f_stop_seg_list=f_stop_text.split("\n")
#对默认模式分词的进行遍历,去除停用词
for myword in listStr.split('/'):
#去除停用词
if not(myword.split()) in f_stop_seg_list and len(myword.strip())>1:
mywordList.append(myword)
return ' '.join(mywordList)
text1=jiebaclearText(text)
#生成
wc=WordCloud(
background_color="white", #设置背景为白色,默认为黑色
width=990, #设置图片的宽度
height=440, #设置图片的高度
margin=10, #设置图片的边缘
max_font_size=50,
random_state=30,
font_path='C:/Windows/Fonts/simkai.ttf' #中文处理,用系统自带的字体
).generate(text1)
#为图片设置字体
my_font=fm.FontProperties(fname='C:/Windows/Fonts/simkai.ttf')
#产生背景图片,基于彩色图像的颜色生成器
image_colors=ImageColorGenerator(bg)
#开始画图
plt.imshow(wc)
#为云图去掉坐标轴
plt.axis("off")
#画云图,显示
#保存云图
wc.to_file("tuoyuan3.png")
代码2
来源于:基于python的词云生成
import jieba
from os import path #用来获取文档的路径
#词云
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
#词云生成工具
from wordcloud import WordCloud,ImageColorGenerator
#需要对中文进行处理
import matplotlib.font_manager as fm
#背景图
bg=np.array(Image.open("man.jpg"))
#获取当前的项目文件加的路径
d=path.dirname(__file__)
#读取停用词表
stopwords_path='stopwords.txt'
#添加需要自定以的分词
jieba.add_word("侯亮平")
jieba.add_word("沙瑞金")
jieba.add_word("赵东来")
#读取要分析的文本
text_path="人民的名义.txt"
#读取要分析的文本,读取格式
text=open(path.join(d,text_path),encoding="utf8").read()
#定义个函数式用于分词
def jiebaclearText(text):
#定义一个空的列表,将去除的停用词的分词保存
mywordList=[]
#进行分词
seg_list=jieba.cut(text,cut_all=False)
#将一个generator的内容用/连接
listStr='/'.join(seg_list)
#打开停用词表
f_stop=open(stopwords_path,encoding="utf8")
#读取
try:
f_stop_text=f_stop.read()
finally:
f_stop.close()#关闭资源
#将停用词格式化,用\n分开,返回一个列表
f_stop_seg_list=f_stop_text.split("\n")
#对默认模式分词的进行遍历,去除停用词
for myword in listStr.split('/'):
#去除停用词
if not(myword.split()) in f_stop_seg_list and len(myword.strip())>1:
mywordList.append(myword)
return ' '.join(mywordList)
text1=jiebaclearText(text)
#生成
wc=WordCloud(
background_color="white",
max_words=200,
mask=bg, #设置图片的背景
max_font_size=60,
random_state=42,
font_path='C:/Windows/Fonts/simkai.ttf' #中文处理,用系统自带的字体
).generate(text1)
#为图片设置字体
my_font=fm.FontProperties(fname='C:/Windows/Fonts/simkai.ttf')
#产生背景图片,基于彩色图像的颜色生成器
image_colors=ImageColorGenerator(bg)
#开始画图
plt.imshow(wc.recolor(color_func=image_colors))
#为云图去掉坐标轴
plt.axis("off")
#画云图,显示
plt.figure()
#为背景图去掉坐标轴
plt.axis("off")
plt.imshow(bg,cmap=plt.cm.gray)
#保存云图
wc.to_file("man.png")
代码3
# #!/usr/bin/env python
# #-*- coding:utf-8 -*-
#
import matplotlib.pyplot as plt
from PIL import Image as image
import jieba
import numpy
from wordcloud import WordCloud,ImageColorGenerator,STOPWORDS
# todo 1 通过jieba工具将中文文本做处理,并返回指定格式的内容
def chinese_jieba(text):
wordlist_jieba = jieba.cut(text)
text_jieba = ' '.join(wordlist_jieba)
return text_jieba
# todo 2 主函数
def main(filename):
with open(filename,'rb') as f:
text = chinese_jieba(f.read().decode())
bg = numpy.array(image.open("./image/cloudword.png")) # 背景图,设置遮罩层
stopwords = set(STOPWORDS)
stopwords = stopwords.union(set(['经与', '失败'])) # 将不想在词云上出现的词,放入集合中,也就是设置固定词个数为0
wordclod = WordCloud(
background_color='white', # 设置背景颜色,默认是黑色
width=990, # 设置图片的宽度
height=440, # 设置图片的高度
margin=0, # 设置图片的边缘
max_words=200, # 关键字的个数
max_font_size=80, # 字体大小
font_path='C:/Windows/Fonts/simkai.ttf' , # 设置中文识别
mask=bg, # 添加遮罩层,也就是设置词云形状
stopwords=stopwords, # 过滤固定的词
).generate(text) # 将text里面所有的词统计,产生词云
image_colors=ImageColorGenerator(bg)
plt.imshow(wordclod.recolor(color_func=image_colors))
# plt.imshow(wordclod)
plt.axis('off')
plt.show()
wordclod.to_file('wordcloud.jpg') # 保存图片
# if __name__ == "__main__":
# filename = r'术语\user_dict.txt'
# main(filename)