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
반응형