构建词云的方法很多, 但是个人觉得python的wordcloud包功能最为强大,不仅可以去停用词还可以自定义图片.
官网: https://amueller.github.io/word_cloud/
github:https://github.com/amueller/word_cloud
pip install wordcloud
首先需要进行分词,也就是将一个句子分割成一个个的词语,我这里使用的是jieba分词, 数据是从智联招聘网上复制的python岗位需要的技能。
# -*- coding: UTF-8 -*-
import jieba
text = ' 负责公司大规模Python数据采集系统的前端和后端功能以及模块接口的开发; 参与Python和搜索系统前后技术框架。实施计划,负责技术规范的设计和实施; 不断提高输出产品的质量,性能和稳定性并对其进行优化。 完成新功能和模块的开发,学习和研究新技术,以不断满足新的产品需求; 领导团队成员进行任务分离,对接和技术评估。 至少3年以上的软件开发经验 擅长Python,J2EE,Spring MVC,Hibernate。 能够熟练掌握调试技巧以及具备迅捷解决bug的能力 熟练掌握Linux和Mysql的使用,如果掌握任何前端技能,如JQuery,EasyUI将优先录用。 掌握良好的共同技巧以及优秀的团队协作能力 特别要求:能够使用英语进行团队的交流与协作。 1、负责开发语音智能产品所需的线上服务:REST API、WebSocket API、web应用等 2、以web、后端开发工作为主,视兴趣和能力可以拓展到AI算法研究和开发 1、愿意加入创业团队,有上进心,能承受高强度工作压力 2、大学本科学历,计算机科学、软件工程、信息学或相关专业 3、曾独立完成包含前端和后端的 Web 项目(个人项目亦可) 4、熟悉 Python / Django 进行后端开发 5、熟悉 Linux 开发环境,熟悉 Mysql, Redis, Mongodb 至少一种 6、熟悉 Docker, Kubernetes 等容器管理系统 1、研究过 FreeSWITCH、Asterisk 等VOIP系统 2、研究过 SIP、H.323、MRCP、RTP 等协议 3、如有 GitHub 账号或技术博客,请在简历中写明 职位亮点 绩效奖金 五险一金 年底双薪 餐补 房补 年终分红 交通补助 加班补助 日常的数据抓取工作,参与爬虫框架的设计和改进2. 清洗和挖掘抓取的数据3. 为数据使用者提供Restful风格的API4. Git+DevOps开发,在公司的自动化运维系统部署任职要求 熟练使用PythonShell,对算法和数据结构有一定理解2. 具备Linux下的开发经验,对于定时、程序计划、并发、异步有一定了解和经验3. 有良好的编程习惯,注意编程规范,单元测试等细节4. 了解并掌握MySQL和NoSQL的使用5. 熟悉Git,DevOps,微服务开发6. 能够独立阅读英文的API文档具有以下经验者优先考虑1. 参与过爬虫项目的,对页面解析,绕过IP封锁,对抗反爬虫有一定经验者2. 熟悉AWS或其他云计算平台者3.对Apple生态了解,使用iOS设备和Mac设备,了解前端技术4.有架构设计,带团队经验 '
cut = jieba.cut(text)
string = ' '.join(cut)
上面是一个非常简单的分词的例子,在cut的时候也可以选择不同的参数,使用不同的模式进行分词,具体使用方法可自行百度,当然也有其他的分词包,大家可自行选择
分好词后就需要将词做成词云了,我使用的是wordcloud
from matplotlib import pyplot as plt
from wordcloud import WordCloud
wc = WordCloud(
# font_path = 'C:\Windows\Fonts\FZSTK.TTF', # windows下的字体路径
font_path='/Library/Fonts/Arial Unicode.ttf', # 设置字体格式,如不设置显示不了中文,我这里为Mac下的字体
background_color='white', #背景颜色
width=1000,
height=800,
).generate(string)
wc.to_file('ss.png') # 保存图片
plt.imshow(wc) # 用plt显示图片
plt.axis('off') # 不显示坐标轴
plt.show() # 显示图片
这是一个十分简单的例子,文字是我随便copy的,不过这样方方正正的不怎么好看,我希望能做成网上那样有不同形状的,在wordcloud中提供了一个参数mask,他可以让你指定你想绘制的图片,不过必须是白底的,他会在你非白底的地方填充上文字,所以最终我的代码是这样的:
from os import path
from scipy.misc import imread
import matplotlib.pyplot as plt
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
# 获取当前文件路径
# __file__ 为当前文件, 在ide中运行此行会报错,可改为
# d = path.dirname('.')
d = path.dirname(__file__)
# 读取文本 alice.txt 在包文件的example目录下
#内容为
text = """
Project Gutenberg's Alice's Adventures in Wonderland, by Lewis Carroll
This eBook is for the use of anyone anywhere at no cost and with
almost no restrictions whatsoever. You may copy it, give it away or
re-use it under the terms of the Project Gutenberg License included
with this eBook or online at www.gutenberg.org
"""
# read the mask / color image
# taken from http://jirkavinse.deviantart.com/art/quot-Real-Life-quot-Alice-282261010
# 设置背景图片
alice_coloring = imread('/Users/wangyuanxin/Desktop/d4o1tzm-3550ebe7-b095-4616-9576-f2b084e95887.jpg')
wc = WordCloud(background_color="white", #背景颜色max_words=2000,# 词云显示的最大词数
mask=alice_coloring,#设置背景图片
stopwords=STOPWORDS.add("said"),
max_font_size=40, #字体最大值
random_state=42)
# 生成词云, 可以用generate输入全部文本(中文不好分词),也可以我们计算好词频后使用generate_from_frequencies函数
wc.generate(text)
# wc.generate_from_frequencies(txt_freq)
# txt_freq例子为[('词a', 100),('词b', 90),('词c', 80)]
# 从背景图片生成颜色值
image_colors = ImageColorGenerator(alice_coloring)
# 以下代码显示图片
plt.imshow(wc)
plt.axis("off")
# 绘制词云
plt.figure()
# recolor wordcloud and show
# we could also give color_func=image_colors directly in the constructor
plt.imshow(wc.recolor(color_func=image_colors))
plt.axis("off")
# 绘制背景图片为颜色的图片
plt.figure()
plt.imshow(alice_coloring, cmap=plt.cm.gray)
plt.axis("off")
plt.show()
# 保存图片
wc.to_file(path.join(d, "名称.png"))