tkinter+python文本分析

基于tkinter的交互式文本分析

功能
  • 對(duì)文本進(jìn)行切詞香拉,切詞結(jié)果會(huì)出現(xiàn)在桌面岁疼,并且能夠動(dòng)態(tài)查詢每個(gè)詞的前后幾個(gè)字
  • 根據(jù)關(guān)鍵詞匹配excel每一行文本以定位具體問題(該部分代碼未給出)
要求
  • windows系統(tǒng)
  • 文本存放在excel中实牡,并且位于最右邊一列
分析過程
  • 點(diǎn)擊運(yùn)行會(huì)出現(xiàn)彈窗,選擇需要分析的文本文件(文本存于excel中)
  • jieba切詞完成后結(jié)果文件會(huì)出現(xiàn)在桌面上虽抄,接著會(huì)彈出如下窗口脸侥,


    8605744-dad8de35163871e9.png
  • 可以查詢?nèi)我庠~前后出現(xiàn)的字,以確定該詞的主要語境扇住。如


    8605744-74aacbf4aaccf0f8.png
完整代碼
import pandas as pd
import tkinter.messagebox
import winreg
import tkinter as tk
import win32ui
from os import chdir, path
from jieba.analyse import extract_tags
from re import sub, findall
from collections import Counter

cut_wr=None  # 全局變量
class txt():
    '''初始化屬性
    word_cut切詞春缕,word_count詞頻,word_before_after詞的前后幾個(gè)字
    '''
    def __init__(self,filename):
        self.filename=filename

    def word_cut(self): #cut_w=[] # 存放數(shù)據(jù)
        cut_w=[];ct=0;cut_words=""
        Target=pd.read_excel(self.filename).fillna("A").iloc[:, -1] # 文本在最后一行
        for word in Target:
            ct+=1
            if ct%2000==0: print(ct) # 看速度
            word=sub("[\:\·\—\艘蹋,\锄贼。\“ \”\>\)\【\】\?\簿训!\,\/\ ]", "|", str(word).strip("\n").strip("\r\n"))
            cut_w.append(word)
            seg_list = extract_tags(word, topK=None)  # textrank
            cut_words += ("/".join(seg_list)+"/||")
        global cut_wr
        cut_wr = "||".join(cut_w) # 段落||隔開
        self.all_words = cut_words.split("/") # 詞/隔開
        
    def word_count(self):
        self.word_cut() #!!!!!!!!!!!!記得引用
        cout = Counter(self.all_words) # # 用于統(tǒng)計(jì)詞和詞頻
        wd = []; quent = [] # 詞咱娶、頻
        for (k, v) in cout.most_common():
            wd.append(k)
            quent.append(v)
        qieci = pd.DataFrame([wd, quent]).T
        qieci.to_excel("切詞結(jié)果textrank.xlsx", encoding='GB18030')
    
    def word_before_after(self, wrd, m, n, L):
        sword = "("+"\S"*m+wrd+"\S"*n+")" # 前m個(gè)字,后n個(gè)字
        w = findall(sword,cut_wr)
        c2 = Counter(w)
        wd2 = []; quent2 = []
        for (k, v) in c2.most_common():
            if v > L:  # 出現(xiàn)L次之上
                wd2.append(k)
                quent2.append(v)
        pd.set_option('max_rows', 500)
        return pd.DataFrame([wd2, quent2]).T

key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders')
desk=winreg.QueryValueEx(key, "Desktop")[0] # windows的桌面路徑
dlg = win32ui.CreateFileDialog(1) # 1表示打開文件對(duì)話框
dlg.SetOFNInitialDir(desk)
dlg.DoModal()  # 設(shè)置打開文件對(duì)話框中的初始顯示目錄
filename = dlg.GetPathName()  # 獲取選擇的文件名稱
mytxt=txt(filename) # 初始化

mytxt.word_count() # 切詞輸出
print("-----------------分析完成-----------------")

# ..................................窗口初始化.............................
# 大小强品、文本框膘侮、文本框說明
window = tk.Tk()
window.title('文本切詞')  # 控件名
window.geometry('270x415')  # 窗口大小
e1 = tk.Entry(window, show='', width=10)  # 交互式文本框
e1.grid(row=1, column=1, sticky=tk.W)  # 文本框的位置
e2 = tk.Entry(window, show='', width=5)
e2.grid(row=2, column=1, sticky=tk.W)
e3 = tk.Entry(window, show='', width=5)
e3.grid(row=3, column=1, sticky=tk.W)
e4 = tk.Entry(window, show='', width=5)
e4.grid(row=4, column=1, sticky=tk.W)
tk.Label(window, text=filename.split("\\")[-1], bg='lightblue').grid(row=0, column=1, sticky=tk.W)  # 框的標(biāo)簽
tk.Label(window, text="正在分析:").grid(row=0, column=0, sticky=tk.E)
tk.Label(window, text="詞(不要復(fù)制粘貼)", bg='red').grid(row=1, column=0, sticky=tk.E)
tk.Label(window, text="前_個(gè)字:").grid(row=2, column=0, sticky=tk.E)
tk.Label(window, text="后_個(gè)字:").grid(row=3, column=0, sticky=tk.E)
tk.Label(window, text="出現(xiàn)_次以上").grid(row=4, column=0, sticky=tk.E)
tk.Label(window, text="結(jié)果:", bg='red').grid(row=6, column=0, sticky=tk.E)

# ..................................添加按鈕 執(zhí)行.............................
def insert_end():
    var1 = str(e1.get())
    var2 = int(e2.get())
    var3 = int(e3.get())
    var4 = int(e4.get())
    t.delete(1.0, tk.END)
    t.insert("end", mytxt.word_before_after(wrd=var1, m=var2, n=var3, L=var4), 'tag_1')
    t.insert("end", "\n查找完成")
b2 = tk.Button(window, text="執(zhí)行", command=insert_end)  # 按鈕,函數(shù)
b2.grid(row=5, column=1, sticky=tk.W)
t = tk.Text(window, height=18, width=25)
t.tag_config("tag_1", backgroun="yellow", foreground="red")
t.grid(row=6, column=1, sticky=tk.W)

# ..................................添加按鈕 提示.............................
def hit_me():
    tk.messagebox.showinfo(
        title='提示', message='文本內(nèi)容需要位于首個(gè)sheet的榛,并且位于最后一列琼了。最后的切詞結(jié)果textrank.xlsx會(huì)出現(xiàn)在桌面')
tk.Button(window, text='提示', command=hit_me).grid(
    row=7, column=0, sticky=tk.E)  # 按鈕,提示
window.mainloop()  # 動(dòng)態(tài)

【分析部分代碼及示例見OneNote】

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末夫晌,一起剝皮案震驚了整個(gè)濱河市雕薪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌晓淀,老刑警劉巖所袁,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異凶掰,居然都是意外死亡燥爷,警方通過查閱死者的電腦和手機(jī)蜈亩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來前翎,“玉大人稚配,你說我怎么就攤上這事「刍” “怎么了道川?”我有些...
    開封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長立宜。 經(jīng)常有香客問我冒萄,道長,這世上最難降的妖魔是什么赘理? 我笑而不...
    開封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任宦言,我火速辦了婚禮,結(jié)果婚禮上商模,老公的妹妹穿的比我還像新娘奠旺。我一直安慰自己,他們只是感情好施流,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開白布响疚。 她就那樣靜靜地躺著,像睡著了一般瞪醋。 火紅的嫁衣襯著肌膚如雪忿晕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天银受,我揣著相機(jī)與錄音践盼,去河邊找鬼。 笑死宾巍,一個(gè)胖子當(dāng)著我的面吹牛咕幻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播顶霞,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼肄程,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了选浑?” 一聲冷哼從身側(cè)響起蓝厌,我...
    開封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎古徒,沒想到半個(gè)月后拓提,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡隧膘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年代态,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了狐粱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡胆数,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出互墓,到底是詐尸還是另有隱情必尼,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布篡撵,位于F島的核電站判莉,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏育谬。R本人自食惡果不足惜券盅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望膛檀。 院中可真熱鬧锰镀,春花似錦、人聲如沸咖刃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嚎杨。三九已至花鹅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間枫浙,已是汗流浹背刨肃。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留箩帚,地道東北人真友。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像膏潮,于是被迫代替她去往敵國和親锻狗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354