import numpy as np
from PIL import Image
import wordcloud
import matplotlib.pyplot
import jieba
def yun():
matplotlib.pyplot.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.pyplot.rcParams['axes.unicode_minus'] = False
Mask = np.array(Image.open(r'C:\Users\86134\Desktop\aixin.jpg'))
# 词语来源
path_txt = r'C:\Users\86134\Desktop\stoplist.txt'
f = open(path_txt, 'r', encoding='utf_8').read()
# 分词处理
cut_text = " ".join(jieba.lcut(f))
# 词云图参数设置
wc = wordcloud.WordCloud(
font_path='C:\Windows\Fonts\simsunb.ttf', # 此行所有电脑都一样,不用更改
background_color='white', width=1000, height=880, mask=Mask
).generate(cut_text)
matplotlib.pyplot.imshow(wc, interpolation='bilinear') # 显示词云图
matplotlib.pyplot.show()
yun()
乱码是因为你的字体设置那里出了问题,先检查下路径对不对。
font_path='C:\Windows\Fonts\simsunb.ttf',
下面是我自己之前写的一个
# coding:utf-8
import matplotlib.pyplot as plt
import jieba
from wordcloud import WordCloud
import io # 解决python2.7打开文件无法encoding的问题
stopword ={'买'}
def wordcloud():
# 1.读入txt文本数据
text = io.open(r'E:/python/jd_commet.txt', "r", encoding='UTF-8').read()
stopwords = [line.strip() for line in io.open('E:/python/jdstopwords.txt', encoding='UTF-8').readlines()]
# 2.结巴中文分词,生成字符串,默认精确模式,如果不通过分词,无法直接生成正确的中文词云
cut_text = jieba.cut(text)
# print(type(cut_text))
# 去掉停用词的分词结果 list类型
text_split_no = []
for word in cut_text:
if word not in stopwords:
text_split_no.append(word)
# 必须给个符号分隔开分词结果来形成字符串,否则不能绘制词云
result = " ".join(text_split_no)
# print(result)
# 3.生成词云图,这里需要注意的是WordCloud默认不支持中文,所以这里需已下载好的中文字库
# 无自定义背景图:需要指定生成词云图的像素大小,默认背景颜色为黑色,统一文字颜色:mode='RGBA'和colormap='pink'
wc = WordCloud(
# 设置字体,不指定就会出现乱码
# 设置背景色
background_color='white',
# 设置背景宽
width=500,
# 设置背景高
height=350,
# 最大字体
max_font_size=90,
# 最小字体
min_font_size=20,
mode='RGBA',
# colormap='pink',
font_path="C:\\Windows\\Fonts\\STFANGSO.ttf", # 不加这一句显示口字形乱码
collocations=False, # 防止结果重复
stopwords=stopword.add("买"),
)
# 产生词云
wc.generate(result)
# 保存图片
wc.to_file(r"wordcloud.png") # 按照设置的像素宽高度保存绘制好的词云图,比下面程序显示更清晰
# 4.显示图片
# 指定所绘图名称
plt.figure("jay")
# 以图片的形式显示词云
plt.imshow(wc)
# 关闭图像坐标系
plt.axis("off")
plt.show()
if __name__ == '__main__':
wordcloud();