目录

1.实现

2.BUG解决


1.词云图实现

一、准备

环境:Win10+Python 3.6.1  64bit+PyCharm

词云库:wordcloud(pycharm如何安装库)

汉语分词库:jieba(pycharm如何安装库)

字体:中文字体(如何查看电脑中的字体位置)

文本:txt格式(随便下载个小说)

效果:http://www.xinyrh.com/newsinfo/821001.html

二、无背景分词

import matplotlib.pyplot as plt  # 数学绘图库
import jieba  # 分词库
import numpy as np
from wordcloud import WordCloud,ImageColorGenerator  # 词云库# 1、读入txt文本数据D:\Desktop\SmallOA\media\tes.txt
text = open(r'D:\Desktop\SmallOA\media\tes.txt', "r",encoding='utf-8', errors='ignore').read()# 2、结巴分词,默认精确模式。可以添加自定义词典userdict.txt,然后jieba.load_userdict(file_name) ,file_name为文件类对象或自定义词典的路径
# 自定义词典格式和默认词库dict.txt一样,一个词占一行:每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒cut_text= jieba.cut(text)
result = "/".join(cut_text)  # 必须给个符号分隔开分词结果来形成字符串,否则不能绘制词云
# print(result)# 3、生成词云图,这里需要注意的是WordCloud默认不支持中文,所以这里需已下载好的中文字库
# 无自定义背景图:需要指定生成词云图的像素大小,默认背景颜色为黑色,统一文字颜色:mode='RGBA'和colormap='pink'
#D:\Desktop\SmallOA\media\Project\muban\dig_close.png
wc = WordCloud(font_path=r"c:\WINDOWS\FONTS\MSYHL.TTC", background_color='white', width=400,height=300, max_font_size=50,max_words=1000)  # ,min_font_size=10)#,mode='RGBA',colormap='pink')
wc.generate(result)
wc.to_file(r"D:\Desktop\SmallOA\media\wordcloud.png")  # 按照设置的像素宽高度保存绘制好的词云图,比下面程序显示更清晰# 4、显示图片
plt.figure("词云图")  # 指定所绘图名称
plt.imshow(wc)  # 以图片的形式显示词云
plt.axis("off")  # 关闭图像坐标系
plt.show()

三、有背景分词

import matplotlib.pyplot as plt  # 数学绘图库
import jieba  # 分词库
import numpy as np
from PIL import Image
from wordcloud import WordCloud,ImageColorGenerator  # 词云库# 1、读入txt文本数据D:\Desktop\SmallOA\media\tes.txt
text = open(r'D:\Desktop\SmallOA\media\tes.txt', "r",encoding='utf-8', errors='ignore').read()# 2、结巴分词,默认精确模式。可以添加自定义词典userdict.txt,然后jieba.load_userdict(file_name) ,file_name为文件类对象或自定义词典的路径
# 自定义词典格式和默认词库dict.txt一样,一个词占一行:每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒cut_text= jieba.cut(text)
result = "/".join(cut_text)  # 必须给个符号分隔开分词结果来形成字符串,否则不能绘制词云
# print(result)# 3、生成词云图,这里需要注意的是WordCloud默认不支持中文,所以这里需已下载好的中文字库image = Image.open(r'D:\Desktop\SmallOA\media\214.png')
graph = np.array(image)
# 无自定义背景图:需要指定生成词云图的像素大小,默认背景颜色为黑色,统一文字颜色:mode='RGBA'和colormap='pink'
#D:\Desktop\SmallOA\media\Project\muban\dig_close.png
wc = WordCloud(font_path=r"c:\WINDOWS\FONTS\MSYHL.TTC",background_color='white',#设置底色width=400,height=300, #制定图片大小,应小于背景像素mask=graph,  # 指定背景图形状max_font_size=50,#最大字体max_words=1000,#最大实现字数)  
wc.generate(result)#4、绘制文字的颜色以背景图颜色为参考
image_color = ImageColorGenerator(graph)#从背景图片生成颜色值
wc.recolor(color_func=image_color)
wc.to_file(r"D:\Desktop\SmallOA\media\wordcloud.png")  # 按照设置的像素宽高度保存绘制好的词云图,比下面程序显示更清晰# 5、显示图片
plt.figure("词云图")  # 指定所绘图名称
plt.imshow(wc)  # 以图片的形式显示词云
plt.axis("off")  # 关闭图像坐标系
plt.show()

2.BUG解决

一、UnicodeDecodeError: 'gbk' codec can't decode byte 0xaf in position 2: illegal multibyte sequence

编码问题:代码中以设置,一般不会再出问题。

text = open(r'D:\Desktop\SmallOA\media\tes.txt', "r",encoding='utf-8', errors='ignore').read()

二、OSError: cannot open resource

字体有问题

三、ImageColorGenerator is smaller than the canvas

这个问题出来后我问了其他人,群里告诉我是因为我的底片比我设置width和height要小。就像我的口袋装不下一个苹果一样,而我非要塞进去,产生溢出,自然就报错了。解决方法是查看底片的宽高,然后去设置内容的宽高。最好等于图片的宽高。

参考:

https://vip01.blog.csdn.net/article/details/77622174?depth_1-

https://blog.csdn.net/fwpevil/article/details/86547428

https://blog.csdn.net/Kafkaer/article/details/94167718