知乎专栏:人工智能小技巧,所有文章欢迎转载!转载请注明出处!
作者:张子豪(同济大学在读研究生)
知乎专栏:人工智能小技巧
简书专栏:人工智能小技巧
Bilibili视频:同济子豪兄
2019-2-13发布
概述应用场景效果预览小程序界面基本原理源代码
概述
本文介绍了词云制作小程序V1.0的产品需求、应用场景、技术原理、源代码。 从远古山洞壁画到微信表情包,人类千百年来始终都是懒惰的视觉动物。面对连篇累牍的大段文本,人们会觉得枯燥乏味。在这个“颜值即正义”的时代,如何提高数据展示的“颜值”,对大数据进行可视化,显得尤为重要。
词云是文本大数据可视化的重要方式,可以将大段文本中的关键语句和词汇高亮展示。
词云制作小程序V1.0,可以对用户输入的大段文字自动进行词频统计,按关键词绘制词云。
应用场景
-
会议记录
-
海报制作
-
PPT制作
-
生日表白
-
数据挖掘
-
情感分析
-
用户画像
-
微信聊天记录分析
-
微博情感分析
-
Bilibili弹幕情感分析
-
年终总结
效果预览
image image image小程序界面
image image image基本原理
这个小程序调用了Python开源社区提供的几个优秀的第三方库:
-
jieba:中文分词。比如,将字符串“改革春风吹满地”分词成列表['改革', '春风', '吹', '满地']。
-
wordcloud:词云图片生成。
-
easygui:用户图形界面(GUI)制作,基于tkinter开发,包括文本输入框、按钮、文件目录选取、词云图片实时预览。
-
pyinstaller:将python脚本文件打包成exe可执行文件,可以跨操作系统执行。
-
pil:图像处理。
-
numpy:科学计算。
-
scipy:科学计算与图像处理。
源代码
<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" lang="Python" contenteditable="true" cid="n35" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; display: block; break-inside: avoid; text-align: left; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); position: relative !important; border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">import wordcloud
import easygui as g
import imageio
import jieba
hellomessage = '''
欢迎来到词语制作小程序V1.0!
作者:同济大学开源软件协会 Tommy
Github:https://github.com/TommyZihao
'''
g.msgbox("欢迎来到词云制作小程序!",image="example2.png",ok_button="开始制作词云!",title="词云制作小程序-张子豪")
choices = ["默认设置,词云背景为黑色","默认设置,词云背景为白色","自定义制作"]
reply = g.choicebox("请选择词云制作方式",choices=choices,title="选择词云制作方式")
get = "not ok"
s = "粘贴到这里即可"
message ='''
参考文本(打开网页ctrl+A全选,ctrl+C复制):
《三国演义》全文:https://0x9.me/hZUNS
《哈姆雷特(英文版)》全文:https://0x9.me/C7Yhi
《十九大报告》全文:https://0x9.me/zbW12
《关于实施乡村振兴战略的意见》全文:https://0x9.me/jlrVH
'''
if reply == "默认设置,词云背景为黑色":
while get != "ok":
s = g.textbox(msg="输入希望用词云展示的文本,直接复制粘贴到下方文本框内即可"+message,title="输入文本",text=s)
c = wordcloud.WordCloud(background_color="black",font_path='msyh.ttc')
b = g.buttonbox("生成词云还是句子云?",choices=("词云","句子云"),title="分词分句选择")
if b == "词云":
s = " ".join(jieba.lcut(s))
c.generate(s)
c.to_file("temp.png")
a = g.buttonbox("生成的词云如下,还顺眼吗?",image="temp.png",choices=("可以,另存为","不行,重新修改"),title="词云图片成功生成!")
if a =="可以,另存为":
get = "ok"
path = g.filesavebox(default=".png")
c.to_file(path)
elif reply == "默认设置,词云背景为白色":
while get != "ok":
s = g.textbox(msg="输入希望用词云展示的文本,直接复制粘贴到下方文本框内即可"+message,title="输入文本",text=s)
c = wordcloud.WordCloud(background_color="white",font_path='msyh.ttc')
b = g.buttonbox("生成词云还是句子云?",choices=("词云","句子云"),title="分词分句选择")
if b == "词云":
s = " ".join(jieba.lcut(s))
c.generate(s)
c.to_file("temp.png")
a = g.buttonbox("生成的词云如下,还顺眼吗?",image="temp.png",choices=("可以,另存为","不行,重新修改"),title="词云图片成功生成!")
if a =="可以,另存为":
get = "ok"
path = g.filesavebox(default=".png")
c.to_file(path)
elif reply == "自定义制作":
get2 = "not ok"
while get != "ok" and get2 !="ok":
s = g.textbox(msg="输入希望用词云展示的文本,直接复制粘贴到下方文本框内即可"+message,title="输入文本",text=s)
while get2 != "ok":
msg = "请设置词云制作样式,不填表示采用默认参数"
title = "自定义词云制作"
fieldNames = [" 词云图片宽(默认600)"," 词云图片高(默认400)","最小字号(默认0)","最大字号(默认90)","字体变化步进(默认1)","字体文件(默认msyh.ttc)","最大显示词数(默认200)","背景颜色的英文(默认white)","是否按模板图片的形状生成词云(0为否,1为是)","要丢弃的词语(用空格分开)","显示句子云效果还是词语云效果(0为句子云,1为词语云)"]
moren = [600,400,0,90,1,"msyh.ttc",500,"white",0,"",0]
fieldValues = g.multenterbox(msg,title, fieldNames)
fieldValues2 = [i for i in range(len(fieldNames))]
for i in range(len(fieldValues)):
if fieldValues[i] == '':
fieldValues2[i] = moren[i]
else:
fieldValues2[i] = fieldValues[i]
fieldValues2[9] = set(fieldValues2[9].split(" "))
st = fieldValues2
print("集合st的值为{}".format(st))
for i in [0,1,2,3,4,6]:
st[i] = int(st[i])
if st[8] == "1":
imagepath = g.fileopenbox(title="选择模板图片")
mk = imageio.imread(imagepath)
c = wordcloud.WordCloud(width=st[0],height=st[1],min_font_size=st[2],max_font_size=st[3],font_step=st[4],font_path=st[5],mask=mk,max_words=st[6],stopwords=st[9],background_color=st[7])
else:
c = wordcloud.WordCloud(width=st[0],height=st[1],min_font_size=st[2],max_font_size=st[3],font_step=st[4],font_path=st[5],max_words=st[6],stopwords=st[9],background_color=st[7])
if st[10] == "1":
final_text = " ".join(jieba.lcut(s))
if st[10] == "0":
final_text = s
c.generate(final_text)
c.to_file("temp.png")
a = g.buttonbox("生成的词云如下,还顺眼吗?",image="temp.png",choices=("可以,另存为","不行,重新输入文本","不行,重新修改样式设置"),title="词云图片成功生成!")
if a =="可以,另存为":
get = "ok"
get2 = "ok"
path = g.filesavebox(default=".png")
c.to_file(path)
elif a=="不行,重新输入文本":
break
elif a == "不行,重新修改样式设置":
get == "ok"
continue
c = wordcloud.WordCloud(width=1000,height=700,min_font_size=10,max_font_size=20,font_step=2,font_path='msyh.ttc',mask=mk,max_words=20,stopwords={"Python"},background_color="white")
goodbyemessage = '''
关于这个小程序
这个小程序基于Python的下列第三方库开发:
wordcloud:词云生成
jieba:中文分词
easygui:用户图形界面(GUI)开发
scipy:科学计算、图像处理
基本原理:对用户输入的字符串进行中文分词、词频统计、词云高级设置与图像输出
作者:同济大学开源软件协会 Tommy
Github:https://github.com/TommyZihao
知乎专栏:人工智能小技巧
简书专栏:人工智能小技巧
Bilibili视频:同济子豪兄
特别鸣谢:中国大学MOOC Python语言程序设计 北京理工大学 嵩天老师团队
'''
g.textbox(msg="欢迎使用,下次再见!",title="词云制作小程序",text=goodbyemessage,run=True)
g.msgbox("下次再见!",image="example3.png",title="词云制作小程序")
</pre>
image作者介绍:
张子豪,同济大学在读研究生。微信公众号、知乎专栏:人工智能小技巧。
自媒体人工智能小技巧由同济大学在读研究生张子豪于2018年11月创立。包括微信公众号、知乎专栏、简书专栏、Bilibili视频专栏等。致力于用通俗易懂的大白话帮助零基础非计算机专业的初学者快速掌握人工智能、大数据可视化、区块链、Python趣味编程、树莓派智能硬件等前沿科技知识,并手把手指导新手迅速上手开发实战项目。
微信公众号:人工智能小技巧
知乎专栏:人工智能小技巧
简书专栏:人工智能小技巧
Bilibili视频:同济子豪兄
Github代码仓库:TommyZihao
个人主页:www.python666.org
同济大学开源软件协会 同济大学微软学生俱乐部 西南人工智能爱好者联盟 重庆大学人工智能协会 重庆大学树莓派爱好者俱乐部
网友评论