python_GUI
텍스트워드클라우드
python_DV
2023. 1. 29. 18:04
728x90
from datetime import datetime
from tkinter import *
from tkinter import messagebox
from tkinter import filedialog
import re
import konlpy
import pandas as pd
import matplotlib.pyplot as plt
from wordcloud import WordCloud
from PIL import ImageTk, Image
from io import BytesIO
import numpy as np
def choose():
file_name1 = filedialog.askopenfilename(initialdir='path', title='select file',
filetypes=(('Txt Files', '*.txt'),('all files', '*.*')))
global files_im
files_im=file_name1
if files_im == '':
messagebox.showwarning("경고", "파일을 추가 하세요")
input_entry.delete(0.0, END)
input_entry.insert(INSERT,files_im)
def show_st():
scr = open(files_im,encoding='utf-8').read()
scr = re.sub('[^가-힣]',' ',scr)
hannanum = konlpy.tag.Hannanum()
nouns=hannanum.nouns(scr)
df_word=pd.DataFrame({'word':nouns})
df_word['count']=df_word['word'].str.len()
df_word=df_word.query('count>=2')
df_word.sort_values('count')
df_word=df_word.groupby('word', as_index=False) \
.agg(n=('word','count')) \
.sort_values('n', ascending=False)
dic_word=df_word.set_index('word').to_dict()['n']
radSel=radVar.get()
if radSel==1:
font='NanumGothicLight.ttf'
elif radSel==2:
font='KOTRA_BOLD.ttf'
radSel2=radVar3.get()
if radSel2 ==0 :
radSel1=radVar1.get()
if radSel1==1:
wc=WordCloud(random_state=1234,
font_path=font,
width=600,
height=400,
background_color='white')
elif radSel1==2:
wc=WordCloud(random_state=1234,
font_path=font,
width=600,
height=400,
background_color='white',
colormap='inferno')
else:
if radSel2==1:
files_im1='구름.PNG'
elif radSel2==2:
files_im1='하트.PNG'
elif radSel2==3:
files_im1='별.PNG'
elif radSel2==4:
files_im1='고래.PNG'
elif radSel2==5:
files_im1='나무.PNG'
icon=Image.open(files_im1)
img_1=Image.new('RGB', icon.size, (255,255,255))
img_1.paste(icon,icon)
img_1=np.array(img_1)
radSel1=radVar1.get()
if radSel1==1:
wc=WordCloud(random_state=1234,
font_path=font,
width=600,
height=400,
background_color='white',
mask=img_1)
elif radSel1==2:
wc=WordCloud(random_state=1234,
font_path=font,
width=600,
height=400,
background_color='white',
mask=img_1,
colormap='inferno')
img_wordcloud=wc.generate_from_frequencies(dic_word)
plt.rcParams.update({'font.family':'Malgun Gothic',
'figure.dpi':'100',
'figure.figsize' : [6,4]})
plt.Figure(figsize=(6,4))
plt.axis('off')
plt.imshow(img_wordcloud)
img_data = BytesIO()
plt.savefig(img_data)
load = Image.open(img_data)
render = ImageTk.PhotoImage(load)
canv.create_image(1, 1, anchor=NW, image=render)
def show_st1():
scr=input_entry2.get()
scr = re.sub('[^가-힣]',' ',scr)
hannanum = konlpy.tag.Hannanum()
nouns=hannanum.nouns(scr)
df_word=pd.DataFrame({'word':nouns})
df_word['count']=df_word['word'].str.len()
df_word=df_word.query('count>=2')
df_word.sort_values('count')
df_word=df_word.groupby('word', as_index=False) \
.agg(n=('word','count')) \
.sort_values('n', ascending=False)
dic_word=df_word.set_index('word').to_dict()['n']
radSel=radVar.get()
if radSel==1:
font='NanumGothicLight.ttf'
elif radSel==2:
font='KOTRA_BOLD.ttf'
radSel2=radVar3.get()
if radSel2 ==0 :
radSel1=radVar1.get()
if radSel1==1:
wc=WordCloud(random_state=1234,
font_path=font,
width=600,
height=400,
background_color='white')
elif radSel1==2:
wc=WordCloud(random_state=1234,
font_path=font,
width=600,
height=400,
background_color='white',
colormap='inferno')
else:
radSel2=radVar3.get()
if radSel2==1:
files_im1='구름.PNG'
elif radSel2==2:
files_im1='하트.PNG'
elif radSel2==3:
files_im1='별.PNG'
elif radSel2==4:
files_im1='고래.PNG'
elif radSel2==5:
files_im1='나무.PNG'
icon=Image.open(files_im1)
global img_1
img_1=Image.new('RGB', icon.size, (255,255,255))
img_1.paste(icon,icon)
img_1=np.array(img_1)
radSel1=radVar1.get()
if radSel1==1:
wc=WordCloud(random_state=1234,
font_path=font,
width=600,
height=400,
background_color='white',
mask=img_1)
elif radSel1==2:
wc=WordCloud(random_state=1234,
font_path=font,
width=600,
height=400,
background_color='white',
mask=img_1,
colormap='inferno')
img_wordcloud=wc.generate_from_frequencies(dic_word)
plt.rcParams.update({'font.family':'Malgun Gothic',
'figure.dpi':'100',
'figure.figsize' : [6,4]})
plt.Figure(figsize=(6,4))
plt.axis('off')
plt.imshow(img_wordcloud)
img_data = BytesIO()
plt.savefig(img_data)
load = Image.open(img_data)
render = ImageTk.PhotoImage(load)
canv.create_image(1, 1, anchor=NW, image=render)
def imsave():
try:
new_filesname=files_im[:-4]+'.jpg'
except:
date_t=datetime.now()
date_t1=str(date_t).replace(':','-')
date_t2=date_t1.replace(' ','')
new_filesname=str(date_t2)+'.jpg'
plt.savefig(new_filesname)
messagebox.showinfo("변경완료", "확인해 보세요")
def show_save():
plt.show()
def select_cancle():
radVar3.set(0)
win = Tk()
text= Text(win,wrap=WORD)
win.geometry("640x660+800+0") #340x250+3480+30
win.title('cloud_words')
ch_csvtoxl=LabelFrame(win, text='word_file_select')
ch_csvtoxl.grid(column=0, row=0, padx=8, pady=5)
chlb=Label(ch_csvtoxl, text="파일선택:",width=8).grid(column=0, row=0,sticky='W')
input_entry= Text(ch_csvtoxl, height=2, width=30, wrap=WORD)
input_entry.grid(column=1,columnspan=2, row=0,sticky='W')
lbID4=Label(ch_csvtoxl, text="",width=1).grid(column=3, row=0,sticky='W')
b1 = Button(ch_csvtoxl,text="검색",width=13, command=choose).grid(column=1, row=1,sticky='W')
b2 = Button(ch_csvtoxl,text="변환",width=13, command=show_st).grid(column=2, row=1,sticky='W')
ch1_csvtoxl=LabelFrame(win, text='style_select')
ch1_csvtoxl.grid(column=1, row=0, rowspan=2, padx=8, pady=5)
radVar3=IntVar()
repeat2_style=LabelFrame(ch1_csvtoxl, text='mask_style')
repeat2_style.grid(column=0, columnspan=2,row=0 ,padx=8, pady=5)
restyle5=Radiobutton(repeat2_style, text="구름", variable=radVar3, value=1).grid(column=0, row=0,sticky='W')
restyle6=Radiobutton(repeat2_style, text="하트", variable=radVar3, value=2).grid(column=1, row=0,sticky='W')
restyle7=Radiobutton(repeat2_style, text="별", variable=radVar3, value=3).grid(column=2, row=0,sticky='W')
restyle8=Radiobutton(repeat2_style, text="고래", variable=radVar3, value=4).grid(column=3, row=0,sticky='W')
restyle9=Radiobutton(repeat2_style, text="나무", variable=radVar3, value=5).grid(column=4, row=0,sticky='W')
b8 = Button(repeat2_style,text="삭제",height=1, width=3, command=select_cancle).grid(column=5, row=0)
radVar=IntVar()
repeat_style=LabelFrame(ch1_csvtoxl, text='text_style')
repeat_style.grid(column=0, row=1, padx=8, pady=5)
restyle1=Radiobutton(repeat_style, text="thin", variable=radVar, value=1).grid(column=0, row=0,sticky='W')
restyle2=Radiobutton(repeat_style, text="bold", variable=radVar, value=2).grid(column=1, row=0,sticky='W')
radVar.set(1)
radVar1=IntVar()
repeat_style1=LabelFrame(ch1_csvtoxl, text='color_style')
repeat_style1.grid(column=1, row=1, padx=8, pady=5)
restyle3=Radiobutton(repeat_style1, text="basic", variable=radVar1, value=1).grid(column=0, row=0,sticky='W')
restyle4=Radiobutton(repeat_style1, text="inferno", variable=radVar1, value=2).grid(column=1, row=0,sticky='W')
radVar1.set(1)
ch2_csvtoxl=LabelFrame(win, text='word_insert')
ch2_csvtoxl.grid(column=0, row=1, rowspan=2, padx=8, pady=5)
chlb=Label(ch2_csvtoxl, text="text:",width=8).grid(column=0, row=0,sticky='W')
input_entry2=Entry(ch2_csvtoxl, width=30)
input_entry2.grid(column=1, columnspan=2, row=0,sticky='W',ipady=15)
lbID4=Label(ch2_csvtoxl, text="",width=1).grid(column=3, row=0,sticky='W')
b5 = Button(ch2_csvtoxl,text="변환",width=29, command=show_st1).grid(column=1,columnspan=2, row=1,sticky='W')
ch3_csvtoxl=LabelFrame(win, text='save')
ch3_csvtoxl.grid(column=1, row=2, padx=8, pady=5)
b6 = Button(ch3_csvtoxl,text="저장_image_show",height=1, width=20, command=imsave).grid(column=0, row=0)
b7 = Button(ch3_csvtoxl,text="저장_other_save",height=1, width=20, command=show_save).grid(column=1, row=0)
can_vas=LabelFrame(win, text='image_show')
can_vas.grid(column=0,columnspan=3, row=3, padx=8, pady=5)
canv = Canvas(can_vas, width=600, height=400, bg='white')
canv.pack(fill=BOTH,expand=YES)
win.mainloop()
728x90
반응형