之前寫過一篇WordCloud入門,里面寫了生成WordCloud的一般方法韭邓,包括參數(shù)設(shè)計和形狀修改等等
標(biāo)簽云效果圖--基礎(chǔ)
在上一次的基礎(chǔ)上拓轻,這次用easygui
做了一個界面
先展示一下界面,代碼在最后
輸入文字信息
選擇需要輸入的內(nèi)容
顯示所選文字
生成WordCloud
生成WordCloud
這是默認(rèn)圖像台妆,可選擇是否要繼續(xù)優(yōu)化
繼續(xù)優(yōu)化參數(shù):進(jìn)入后續(xù)優(yōu)化
直接保存圖像:退出程序,圖像保存在代碼相對應(yīng)的文件夾
繼續(xù)優(yōu)化
設(shè)置指定形狀
選擇你要的圖片
是否和圖片顏色保持一致
參數(shù)設(shè)置
根據(jù)上述選擇結(jié)果胖翰,這里可以看到你選擇的輪廓參照文件
和圖片順色情況
接剩,你依舊可以改動這些參數(shù)
根據(jù)剛剛的選擇,我們得到新的WordCloud
此時的圖像顯示會模糊一些萨咳,實際保存的圖像太大了懊缺,在顯示的時候,我降低了像素(不影響實際結(jié)果)
在這個結(jié)果上培他,可以繼續(xù)點擊繼續(xù)優(yōu)化參數(shù)
鹃两,重復(fù)以上步驟,設(shè)置新的參數(shù)
調(diào)整完畢后舀凛,點擊直接保存圖像
此時俊扳,就會保存高清
的圖像到你的文件夾
實際圖像
代碼說明
這個程序,還是有很多可以優(yōu)化的地方
- 剔除不要的單詞
- 預(yù)設(shè)長方形猛遍、正方形馋记、圓形
- 將顏色設(shè)為選項,而不是需要填寫
- 后續(xù)慢慢優(yōu)化
代碼主要思路
用fileopenbox
打開txt
的對話框
import easygui as g
path_text = g.fileopenbox(title = '請選擇需要輸入的內(nèi)容(后綴為.txt)', default="*.txt")
顯示txt
內(nèi)容
msg='文件內(nèi)容如下:'
title='顯示文件內(nèi)容'
text = open(path_text, encoding='utf-8').read()
g.textbox(msg,title,text)
精確切割中文字符(這樣保證中英文都可以使用)
如果只要用英文懊烤,那這一步可以省略
text = ' '.join(jieba.cut(text, cut_all = False))
設(shè)置默認(rèn)WordCloud參數(shù)
fieldValues = [
'C:/Windows/Fonts/simfang.ttf', # 字體路徑
100, # 顯示詞數(shù)
100, # 最大字號
'white', # 背景色
0, # 輪廓寬度
'steelblue', # 輪廓顏色
'False', # 輪廓參照
'False' # 和圖片順色
]
wc = SetWordCloud(fieldValues)
生成初步圖像
wc.generate(text)
wc.to_file('image.png') # 儲存圖像
判斷是否要優(yōu)化
def IfContinue(WC_continue, path_image, fieldValues) # 是否要繼續(xù)優(yōu)化
不優(yōu)化梯醒,直接保存高清圖像
優(yōu)化,繼續(xù)下一步
如果指定了背景形狀
def Para_mask(fieldValues) # 指定圖片形狀和顏色
def Para(values) # 修改其他參數(shù)
def SetWordCloudMask(mask_coloring, fieldValues)
如果不指定背景形狀
def Para(values) # 修改其他參數(shù)
def SetWordCloud(fieldValues)
根據(jù)參數(shù)奸晴,生成圖像
完整代碼
import os
from os import path
# from matplotlib import pyplot as plt
import jieba
import easygui as g
import numpy as np
from PIL import Image
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
# 用戶設(shè)定初始值
def Para(values):
msg = "你可以修改下面的默認(rèn)參數(shù)"
title = "參數(shù)設(shè)置"
fieldNames = [
"字體路徑" , # fieldValues[0]
"顯示詞數(shù)", # fieldValues[1]
"最大字號" , # fieldValues[2]
"背景色", # fieldValues[3]
"輪廓寬度", # fieldValues[4]
"輪廓顏色", # fieldValues[5]
"輪廓參照", # fieldValues[6]
"和圖片順色" # fieldValues[7]
]
fieldValues = []
fieldValues = g.multenterbox (msg, title, fieldNames,values = values)
return fieldValues
# 用戶設(shè)定初始值-背景輪廓和顏色
def Para_mask(fieldValues):
d = path.dirname(__file__) if "__file__" in locals() else os.getcwd()
mask_image = path.join(d,'mask.jpg')
if_mask = g.buttonbox("需要指定形狀嗎冤馏?\n默認(rèn)是長方形\n你可以輸入一張圖片作為輪廓", image = mask_image,choices=("需要","不需要"))
if if_mask == "需要":
fieldValues[6] = g.fileopenbox(msg = '后綴為圖片格式', title = '設(shè)置mask路徑', default="*.png")
#mask = np.array(Image.open(path_mask))
color_image = path.join(d,'colored.png')
if_color = g.buttonbox("需要和圖片順色嗎?左邊是不順色寄啼,中間是順色逮光,右邊是原圖", image = color_image, choices=("需要","不需要"))
if if_color == "需要":
fieldValues[7] = 'True'
else:
fieldValues[7] = 'False'
else:
fieldValues[6] = 'False'
return fieldValues
# 是否需要繼續(xù)優(yōu)化參數(shù)
def IfContinue(WC_continue, path_image, fieldValues):
if WC_continue == "繼續(xù)優(yōu)化參數(shù)" :
fieldValues = Para_mask(fieldValues)
fieldValues = Para(fieldValues)
if fieldValues[6] == 'False':
wc = SetWordCloud(fieldValues)
wc.generate(text)
wc.to_file('image.png') # 儲存圖像
WC_continue = g.buttonbox(title="顯示圖像",msg='是否需要優(yōu)化', image = path_image, choices=("繼續(xù)優(yōu)化參數(shù)","直接保存圖像"))
IfContinue(WC_continue, path_image, fieldValues)
else:
# 讀取圖片文件
mask_coloring = np.array(Image.open(fieldValues[6]))
wc = SetWordCloudMask(mask_coloring, fieldValues)
wc.generate(text)
if fieldValues[7] == 'False':
wc.to_file('image.png') # 儲存圖像
# 調(diào)整圖像顯示大小
im = Image.open(path_image)
(x,y) = im.size #read image size
y_s = 500 #define standard width
x_s = int(x*y_s/y) #calc height based on standard width
im = im.resize((x_s,y_s)) #resize image with high-quality
im .save('image.png')
WC_continue = g.buttonbox(title="顯示圖像",msg='是否需要優(yōu)化', image = path_image, choices=("繼續(xù)優(yōu)化參數(shù)","直接保存圖像"))
wc.to_file('image.png') # 儲存圖像
IfContinue(WC_continue, path_image, fieldValues)
else:
# 根據(jù)圖片,創(chuàng)建顏色
image_colors = ImageColorGenerator(mask_coloring)
# 儲存圖像
wc.recolor(color_func = image_colors).to_file('image.png')
# 調(diào)整圖像顯示大小
im = Image.open(path_image)
(x,y) = im.size #read image size
y_s = 500 #define standard width
x_s = int(x*y_s/y) #calc height based on standard width
im = im.resize((x_s,y_s)) #resize image with high-quality
im .save('image.png')
WC_continue = g.buttonbox(title = "顯示圖像",msg = '是否需要優(yōu)化', image = path_image, choices=("繼續(xù)優(yōu)化參數(shù)","直接保存圖像"))
wc.recolor(color_func = image_colors).to_file('image.png')
IfContinue(WC_continue, path_image, fieldValues)
# 設(shè)置WordCloud參數(shù)墩划,生成詞云
def SetWordCloud(fieldValues):
wc = WordCloud(
font_path = fieldValues[0], #字體路徑
scale = 2,
max_words = int(fieldValues[1]), #最多詞個數(shù)
max_font_size = int(fieldValues[2]), #最大字號
background_color = fieldValues[3], #背景色
contour_width = int(fieldValues[4]), #設(shè)置輪廓寬度
contour_color = fieldValues[5] #設(shè)置輪廓顏色
)
return wc
# 設(shè)置WordCloud參數(shù)涕刚,生成詞云
def SetWordCloudMask(mask_coloring, fieldValues):
wc = WordCloud(
font_path = fieldValues[0], #字體路徑
scale = 2,
max_words = int(fieldValues[1]), #最多詞個數(shù)
max_font_size = int(fieldValues[2]), #最大字號
background_color = fieldValues[3], #背景色
contour_width = int(fieldValues[4]), #設(shè)置輪廓寬度
contour_color = fieldValues[5], #設(shè)置輪廓顏色
mask = mask_coloring
)
return wc
# 選擇要輸入的文件
path_text = g.fileopenbox(title = '請選擇需要輸入的內(nèi)容(后綴為.txt)', default="*.txt")
# 顯示文件
msg='文件內(nèi)容如下:'
title='顯示文件內(nèi)容'
text = open(path_text, encoding='utf-8').read()
g.textbox(msg,title,text)
# 精確切割中文字符
text = ' '.join(jieba.cut(text, cut_all = False))
# 默認(rèn)參數(shù)
fieldValues = [
'C:/Windows/Fonts/simfang.ttf',
100,
100,
'white',
0,
'steelblue',
'False',
'False'
]
wc = SetWordCloud(fieldValues)
wc.generate(text)
wc.to_file('image.png') # 儲存圖像
# 獲取當(dāng)前文件路徑
d = path.dirname(__file__) if "__file__" in locals() else os.getcwd()
# 獲取文本txt的路徑(txt和代碼在一個路徑下面)
path_image = path.join(d,'image.png')
WC_continue = g.buttonbox(title="顯示圖像",msg='是否需要優(yōu)化', image = path_image, choices=("繼續(xù)優(yōu)化參數(shù)","直接保存圖像"))
IfContinue(WC_continue, path_image, fieldValues)
···