文中所用数据与上一篇博客所用数据出自同一网站,存入的文件就不再声明了,直接打开
jieba的实际应用
目的
将中文数据进行可视化,使人一眼看出重要的信息,本文的数据选用51job网站的工作需求介绍。
代码实现
#引入jieba、词云、matplotlib、json、numpy、PIL模块(json是用来打开文件,numpy是用来转换图片的,其他是必须的)
import jieba
from wordcloud import WordCloud, STOPWORDS
import matplotlib.pyplot as plt
import json
import numpy as np
from PIL import Image #引入处理图片模块
#因为我一开始存的是json格式,然后画蛇添足的转来转去,其实没啥,只要能有数据就行
with open('6.json','r', encoding='utf-8') as fp:
a = json.load(fp)
signatures = json.loads(a)
# print(type(signatures))
with open('1.txt','w',encoding='utf-8')as fp:
fp.write(str(signatures))
with open('1.txt','r',encoding='utf-8')as fp:
neirong = fp.read()
# 设置分词
# print(type(neirong))
split = jieba.cut(neirong, cut_all=False) # False精准模式分词、True全模式分词
words = ' '.join(split) # 以空格进行拼接
print(words)
#
# 设置屏蔽词,去除个性签名中的表情、特殊符号等你不需要的数据,也可以先运行,照着结果将不需要的去掉
stopwords = STOPWORDS.copy()
stopwords.add('xa0')
stopwords.add('xa03')
stopwords.add('n4')
stopwords.add('要求')
stopwords.add('进行')
stopwords.add('n')
stopwords.add('无忧')
stopwords.add('推荐')
stopwords.add('xa009')
stopwords.add('发布')
stopwords.add('有限公司')
stopwords.add('民营公司')
# 导入背景图,将数据用此图片展示
image = np.array(Image.open('1.png')) #背景图随便,只要颜色边界分明就行,大多使用黑白的
# 设置词云参数,参数分别表示:画布宽高、背景颜色、背景图形状、字体、屏蔽词、最大词的字体大小
wc = WordCloud(background_color='white', mask=image, font_path='STKAITI.TTF',stopwords=stopwords,max_font_size=500, random_state=50)
# 将分词后数据传入云图
wc.generate_from_text(words) #也可以直接用generate 没有区别
plt.imshow(wc) # 绘制图像
plt.axis('off') # 不显示坐标轴
# 保存结果到本地,此程序的上级目录下
plt.savefig('1.jpg') #会生成一个图片,即为最终结果
过程中,会遇到很多问题,我遇到两个:1.导入背景图的时候,将1.png写成了1.jpg,报FileNotFoundError: [Errno 2] No such file or directory: '1.jpg’的错;2.读取文件时,数据的格式出错。
总体来说,都是马虎的问题,多调试,能出来结果的