python_GUI
텍스트워드분석
python_DV
2023. 1. 29. 18:05
728x90
from tkinter import *
from tkinter import messagebox
from tkinter import filedialog
import re
import konlpy
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
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)
top20 = df_word.head(20)
plt.rcParams.update({'font.family':'Malgun Gothic',
'figure.dpi':'100',
'figure.figsize' : [1,1]})
f = plt.Figure(figsize=(6.5,4))
ax = f.subplots()
sns.barplot(data=top20, y='word', x='n' , ax=ax)
canvas = FigureCanvasTkAgg(f,master=canv)
canvas.draw()
canvas.get_tk_widget().grid(row=1, column=0)
win = Tk()
text= Text(win,wrap=WORD)
win.geometry("680x530+800+0") #340x250+3480+30
win.title('text_words')
ch_csvtoxl=LabelFrame(win, text='file_select')
ch_csvtoxl.grid(column=0, columnspan=2, 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=50, 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=23, command=choose).grid(column=1, row=1,sticky='W')
b2 = Button(ch_csvtoxl,text="시작",width=23, command=show_st).grid(column=2, row=1,sticky='W')
can_vas=LabelFrame(win, text='image_show')
can_vas.grid(column=0,columnspan=2, row=1, padx=8, pady=5)
canv = Canvas(can_vas, width=650, height=400, bg='white')
canv.pack(fill=BOTH, expand=YES)
win.mainloop()
728x90
반응형