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

詞雲是文本大數據可視化的重要方式,可以將大段文本中的關鍵語句和辭彙高亮展示。本文介紹了詞雲製作小程序V1.0的產品需求、應用場景、技術原理、源代碼。 適用於會議記錄、年終總結、生日表白、數據挖掘、用戶畫像、微博彈幕貼吧情感分析。

知乎專欄:人工智慧小技巧,所有文章歡迎轉載!轉載請註明出處!

作者:張子豪(同濟大學在讀研究生)

知乎專欄:人工智慧小技巧

簡書專欄:人工智慧小技巧

Bilibili視頻:同濟子豪兄

2019-2-13發布

[TOC]

概述

本文介紹了詞雲製作小程序V1.0的產品需求、應用場景、技術原理、源代碼。

從遠古山洞壁畫到微信表情包,人類千百年來始終都是懶惰的視覺動物。面對連篇累牘的大段文本,人們會覺得枯燥乏味。在這個「顏值即正義」的時代,如何提高數據展示的「顏值」,對大數據進行可視化,顯得尤為重要。

詞雲是文本大數據可視化的重要方式,可以將大段文本中的關鍵語句和辭彙高亮展示。

詞雲製作小程序V1.0,可以對用戶輸入的大段文字自動進行詞頻統計,按關鍵詞繪製詞雲。

應用場景

  • 會議記錄
  • 海報製作
  • PPT製作
  • 生日表白

  • 數據挖掘

  • 情感分析
  • 用戶畫像
  • 微信聊天記錄分析
  • 微博情感分析
  • Bilibili彈幕情感分析

  • 年終總結

效果預覽

小程序界面

基本原理

這個小程序調用了Python開源社區提供的幾個優秀的第三方庫:

  • jieba:中文分詞。比如,將字元串「改革春風吹滿地」分詞成列表[改革, 春風, 吹, 滿地]。

  • wordcloud:詞雲圖片生成。

  • easygui:用戶圖形界面(GUI)製作,基於tkinter開發,包括文本輸入框、按鈕、文件目錄選取、詞雲圖片實時預覽。

  • pyinstaller:將python腳本文件打包成exe可執行文件,可以跨操作系統執行。

  • pil:圖像處理。

  • numpy:科學計算。

  • scipy:科學計算與圖像處理。

源代碼

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="詞雲製作小程序")

作者介紹:

張子豪,同濟大學在讀研究生。微信公眾號、知乎專欄:人工智慧小技巧

自媒體人工智慧小技巧由同濟大學在讀研究生張子豪於2018年11月創立。包括微信公眾號、知乎專欄、簡書專欄、Bilibili視頻專欄等。致力於用通俗易懂的大白話幫助零基礎非計算機專業的初學者快速掌握人工智慧、大數據可視化、區塊鏈、Python趣味編程、樹莓派智能硬體等前沿科技知識,並手把手指導新手迅速上手開發實戰項目。

微信公眾號:人工智慧小技巧

知乎專欄:人工智慧小技巧

簡書專欄:人工智慧小技巧

Bilibili視頻:同濟子豪兄

Github代碼倉庫:TommyZihao

個人主頁:python666.org

同濟大學開源軟體協會

同濟大學微軟學生俱樂部

西南人工智慧愛好者聯盟

重慶大學人工智慧協會 重慶大學樹莓派愛好者俱樂部


推薦閱讀:

TAG:數據可視化 | Python | 效率 |