詞云制作Python小程序-讓你的文字顏值炸裂

知乎專欄:人工智能小技巧,所有文章歡迎轉(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ù)覽

五角星詞云
中國(guó)地圖詞云
i句子云

小程序界面

image
image
image

基本原理

這個(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é)樹莓派愛好者俱樂部

image
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容