目录
1.实现
2.BUG解决
一、准备
环境: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()
一、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