知乎專欄:人工智能小技巧,所有文章歡迎轉(zhuǎn)載!轉(zhuǎn)載請(qǐng)注明出處!
作者:張子豪(同濟(jì)大學(xué)在讀研究生)
知乎專欄:人工智能小技巧
簡(jiǎn)書專欄:人工智能小技巧
Bilibili視頻:同濟(jì)子豪兄
2019-2-13發(fā)布
概述應(yīng)用場(chǎng)景效果預(yù)覽小程序界面基本原理源代碼
概述
本文介紹了詞云制作小程序V1.0的產(chǎn)品需求、應(yīng)用場(chǎng)景、技術(shù)原理、源代碼。 從遠(yuǎn)古山洞壁畫到微信表情包,人類千百年來始終都是懶惰的視覺動(dòng)物。面對(duì)連篇累牘的大段文本,人們會(huì)覺得枯燥乏味。在這個(gè)“顏值即正義”的時(shí)代,如何提高數(shù)據(jù)展示的“顏值”,對(duì)大數(shù)據(jù)進(jìn)行可視化,顯得尤為重要。
詞云是文本大數(shù)據(jù)可視化的重要方式,可以將大段文本中的關(guān)鍵語句和詞匯高亮展示。
詞云制作小程序V1.0,可以對(duì)用戶輸入的大段文字自動(dòng)進(jìn)行詞頻統(tǒng)計(jì),按關(guān)鍵詞繪制詞云。
應(yīng)用場(chǎng)景
會(huì)議記錄
海報(bào)制作
PPT制作
生日表白
數(shù)據(jù)挖掘
情感分析
用戶畫像
微信聊天記錄分析
微博情感分析
Bilibili彈幕情感分析
年終總結(jié)
效果預(yù)覽



小程序界面



基本原理
這個(gè)小程序調(diào)用了Python開源社區(qū)提供的幾個(gè)優(yōu)秀的第三方庫(kù):
jieba:中文分詞。比如,將字符串“改革春風(fēng)吹滿地”分詞成列表['改革', '春風(fēng)', '吹', '滿地']。
wordcloud:詞云圖片生成。
easygui:用戶圖形界面(GUI)制作,基于tkinter開發(fā),包括文本輸入框、按鈕、文件目錄選取、詞云圖片實(shí)時(shí)預(yù)覽。
pyinstaller:將python腳本文件打包成exe可執(zhí)行文件,可以跨操作系統(tǒng)執(zhí)行。
pil:圖像處理。
numpy:科學(xué)計(jì)算。
scipy:科學(xué)計(jì)算與圖像處理。
源代碼
<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!
?
?
作者:同濟(jì)大學(xué)開源軟件協(xié)會(huì) Tommy
Github:https://github.com/TommyZihao
'''
?
g.msgbox("歡迎來到詞云制作小程序!",image="example2.png",ok_button="開始制作詞云!",title="詞云制作小程序-張子豪")
?
?
choices = ["默認(rèn)設(shè)置,詞云背景為黑色","默認(rèn)設(shè)置,詞云背景為白色","自定義制作"]
reply = g.choicebox("請(qǐng)選擇詞云制作方式",choices=choices,title="選擇詞云制作方式")
?
get = "not ok"
s = "粘貼到這里即可"
message ='''
?
?
參考文本(打開網(wǎng)頁ctrl+A全選,ctrl+C復(fù)制):
?
《三國(guó)演義》全文:https://0x9.me/hZUNS
《哈姆雷特(英文版)》全文:https://0x9.me/C7Yhi
《十九大報(bào)告》全文:https://0x9.me/zbW12
《關(guān)于實(shí)施鄉(xiāng)村振興戰(zhàn)略的意見》全文:https://0x9.me/jlrVH
'''
?
if reply == "默認(rèn)設(shè)置,詞云背景為黑色":
while get != "ok":
s = g.textbox(msg="輸入希望用詞云展示的文本,直接復(fù)制粘貼到下方文本框內(nèi)即可"+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 == "默認(rèn)設(shè)置,詞云背景為白色":
while get != "ok":
s = g.textbox(msg="輸入希望用詞云展示的文本,直接復(fù)制粘貼到下方文本框內(nèi)即可"+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="輸入希望用詞云展示的文本,直接復(fù)制粘貼到下方文本框內(nèi)即可"+message,title="輸入文本",text=s)
while get2 != "ok":
msg = "請(qǐng)?jiān)O(shè)置詞云制作樣式,不填表示采用默認(rèn)參數(shù)"
title = "自定義詞云制作"
fieldNames = [" 詞云圖片寬(默認(rèn)600)"," 詞云圖片高(默認(rèn)400)","最小字號(hào)(默認(rèn)0)","最大字號(hào)(默認(rèn)90)","字體變化步進(jìn)(默認(rèn)1)","字體文件(默認(rèn)msyh.ttc)","最大顯示詞數(shù)(默認(rèn)200)","背景顏色的英文(默認(rèn)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=("可以,另存為","不行,重新輸入文本","不行,重新修改樣式設(shè)置"),title="詞云圖片成功生成!")
if a =="可以,另存為":
get = "ok"
get2 = "ok"
path = g.filesavebox(default=".png")
c.to_file(path)
elif a=="不行,重新輸入文本":
break
elif a == "不行,重新修改樣式設(shè)置":
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 = '''
關(guān)于這個(gè)小程序
?
這個(gè)小程序基于Python的下列第三方庫(kù)開發(fā):
?
wordcloud:詞云生成
?
jieba:中文分詞
?
easygui:用戶圖形界面(GUI)開發(fā)
?
scipy:科學(xué)計(jì)算、圖像處理
?
基本原理:對(duì)用戶輸入的字符串進(jìn)行中文分詞、詞頻統(tǒng)計(jì)、詞云高級(jí)設(shè)置與圖像輸出
?
作者:同濟(jì)大學(xué)開源軟件協(xié)會(huì) Tommy
Github:https://github.com/TommyZihao
?
知乎專欄:人工智能小技巧
?
簡(jiǎn)書專欄:人工智能小技巧
?
Bilibili視頻:同濟(jì)子豪兄
?
特別鳴謝:中國(guó)大學(xué)MOOC Python語言程序設(shè)計(jì) 北京理工大學(xué) 嵩天老師團(tuán)隊(duì)
'''
g.textbox(msg="歡迎使用,下次再見!",title="詞云制作小程序",text=goodbyemessage,run=True)
g.msgbox("下次再見!",image="example3.png",title="詞云制作小程序")
?</pre>
作者介紹:
張子豪,同濟(jì)大學(xué)在讀研究生。微信公眾號(hào)、知乎專欄:人工智能小技巧。
自媒體人工智能小技巧由同濟(jì)大學(xué)在讀研究生張子豪于2018年11月創(chuàng)立。包括微信公眾號(hào)、知乎專欄、簡(jiǎn)書專欄、Bilibili視頻專欄等。致力于用通俗易懂的大白話幫助零基礎(chǔ)非計(jì)算機(jī)專業(yè)的初學(xué)者快速掌握人工智能、大數(shù)據(jù)可視化、區(qū)塊鏈、Python趣味編程、樹莓派智能硬件等前沿科技知識(shí),并手把手指導(dǎo)新手迅速上手開發(fā)實(shí)戰(zhàn)項(xiàng)目。
微信公眾號(hào):人工智能小技巧
知乎專欄:人工智能小技巧
簡(jiǎn)書專欄:人工智能小技巧
Bilibili視頻:同濟(jì)子豪兄
Github代碼倉(cāng)庫(kù):TommyZihao
個(gè)人主頁:www.python666.org
同濟(jì)大學(xué)開源軟件協(xié)會(huì) 同濟(jì)大學(xué)微軟學(xué)生俱樂部 西南人工智能愛好者聯(lián)盟 重慶大學(xué)人工智能協(xié)會(huì) 重慶大學(xué)樹莓派愛好者俱樂部
