Python可視化單詞統(tǒng)計(jì)詞頻統(tǒng)計(jì)中文分詞的實(shí)現(xiàn)步驟
可視化單詞統(tǒng)計(jì)詞頻統(tǒng)計(jì)中文分詞
項(xiàng)目架構(gòu)
新建一個文件,輸入文件的內(nèi)容,查詢此文件中關(guān)鍵字的出現(xiàn)的次數(shù),關(guān)鍵字出現(xiàn)的位置,將所有的文本按照中文分詞的詞庫進(jìn)行切割劃分,返回JSON
字符串,返回中文切分的單詞和出現(xiàn)的頻次,最后關(guān)閉程序
新建文件
新建指定文本文件,輸入一個文件名,以及里面的文件內(nèi)容建立一個文本文件。通過GUI
的Entry
控件實(shí)現(xiàn)一個文本框text1
,作用是用來接收用戶輸入的文件名。
content1
用來存儲文件名,如果輸入的文件名為空就彈出窗體顯示“文件名不為空!”的提示,content2
用來存儲文件內(nèi)容文件名有效則通過open()
函數(shù)以讀文件的方式打開文件。
然后使用write()
將輸入的文件內(nèi)容寫入新建好的文件中,點(diǎn)擊新建文件按鈕,彈出提示框“文件建立成功”,完成后close
關(guān)閉文件。
輸入文件名,輸入一段內(nèi)容,點(diǎn)擊新建文件,成功建立文件
單詞計(jì)數(shù)
給定單詞計(jì)數(shù),輸入一個不含空格的單詞,統(tǒng)計(jì)輸出該單詞在文本中的出現(xiàn)次數(shù)。通過GUI
的Entry
控件實(shí)現(xiàn)一個文本框text1
,作用是用來接收用戶輸入的文件名。content1
用來存儲文件名,如果輸入的文件名為空就彈出窗體顯示“文件名不為空!”的提示。
文件名有效則通過open()
函數(shù)以讀文件的方式打開文件。Entry
控件實(shí)現(xiàn)一個文本框text3
,作用是用來接收用戶輸入要查詢的目標(biāo)單詞,count = 0
將計(jì)數(shù)器初始化為0
。
利用了模式匹配算法:循環(huán)讀入文件,每次讀入一行,逐行掃描文本文件,利用strip()
去掉每行頭尾空白字符,一行調(diào)用count(keyword)
函數(shù)匹配到目標(biāo)單詞返回目標(biāo)單詞出現(xiàn)的次數(shù)count
函數(shù)封裝了字符串匹配,目標(biāo)串P的長度為m
,主串T
的長度是n,
枚舉主串T
中每一個位置i
, 然后檢查T[i,i+m-1]
是否與目標(biāo)串P
完全相同,相同的就將count
加一,i
加一,繼續(xù)往后匹配子串。
如果不同,就只將i
加一,繼續(xù)往后匹配子串。直到整行結(jié)束。存儲下當(dāng)前行目標(biāo)單詞出現(xiàn)的次數(shù),再遍歷下一行。直到整個文件掃描結(jié)束;然后輸出文件中單詞出現(xiàn)的總次數(shù)。并且關(guān)閉文件。
全文單詞索引
查找給定單詞在文件中的位置。定義content1
接收text1
的值,content3
接收text3
的值,content1
用來接收用戶輸入的文件名,如果輸入文件名為空就彈出窗體顯示“文件名不能為空!”的提示。
文件名有效則通過open()
函數(shù)以讀文件的方式打開文件,content3
用來接收用戶所輸入需查詢的單詞;使用for循環(huán)逐行進(jìn)行檢索,先判斷輸入文件名是否為空,為空則彈出錯誤對話框,并提示“文件名不能為空!”。
不為空則使用open()
打開文件,row
初始化為1
,再判斷文件內(nèi)容是否為空,為空則row+1
且跳出此層循環(huán),不為空則使用for
循環(huán)檢索出用戶指定單詞的位置與出現(xiàn)次數(shù)并輸出第x
行n
次。
中文分詞統(tǒng)計(jì)詞頻
導(dǎo)入jieba
第三方中文分詞函數(shù)庫,lcut(text)
,精確模式,返回text
分詞后的列表變量使用函數(shù)lcut()
進(jìn)行文本處理時,英文文本的分詞只需要通過空格就可以分割。而中文的文本是需要一個“詞典”來實(shí)現(xiàn)分詞jieba
第三方庫實(shí)現(xiàn)了“詞典” 采取了精確模式,試圖將句子最精確地切開。
words = jieba.lcut(text)
將文本的分詞實(shí)現(xiàn)切分后,返回一個分詞的列表words
定義counts
的空字典循環(huán)遍歷分詞列表,分詞的長度為1
就繼續(xù)遍歷,否則就進(jìn)行統(tǒng)計(jì)分詞出現(xiàn)的次數(shù)。每一個分詞作為字典中的鍵,出現(xiàn)的次數(shù)作為字典中的值counts[word] = counts.get(word, 0) + 1
鍵值的添加,獲得文件中相同字符出現(xiàn)的次數(shù)有word這個分詞時,時返回其值,默認(rèn)是0
,+1
能夠累計(jì)次數(shù);沒有word
時則返回0
。
counts.items()
字典鍵值對,list()
轉(zhuǎn)化為列表賦值給items,列表items
進(jìn)行按照鍵從小到大的順序進(jìn)行排序,在dict
轉(zhuǎn)化為字典輸出,輸出后關(guān)閉文件。
最后將查詢的所有結(jié)果都追加到輸出文件中
源代碼
import tkinter as tk from tkinter import messagebox, END, RIDGE import jieba root = tk.Tk() root.title("單詞檢索統(tǒng)計(jì)系統(tǒng)") root.resizable(False, False) root.geometry('450x400') root.configure(bg='white') # 新建文件 def fun1(): content1 = text1.get() content2 = text2.get('1.0', END) if content1 == '': messagebox.showerror(title='Error', message='文件名不為空!') else: file = open(r'D:\圖庫\183\pythonProject\com\mao\\' + content1 + '.txt', 'w', encoding='GBK') file.writelines(content2) file.write('\n') messagebox.showinfo(title='Success', message='新建成功!') file.close() # 單詞的統(tǒng)計(jì) def fun2(): content1 = text1.get() content3 = text3.get() if content1 == '': messagebox.showerror(title='Error', message='文件名不為空!') else: try: file = open(r'D:\圖庫\183\pythonProject\com\mao\\' + content1 + '.txt', 'r') if content3 != '': count = 0 # 計(jì)數(shù)器初始化為0 for line in file.readlines(): line = line.strip() # 依次讀取每行, 去掉每行頭尾空白 count += line.count(content3) # 逐行累加計(jì)數(shù) if count == 0: messagebox.showerror(title='Error', message='沒有此單詞!') else: text4.insert(tk.END, '共有 ' + str(count) + ' 個 ' + content3 + '\n') with open(r"D:\圖庫\183\pythonProject\com\mao\text.txt", "a") as output: output.write('共有 ' + str(count) + ' 個 ' + content3 + '\n') file.close() else: messagebox.showerror(title='Error', message='查詢目標(biāo)單詞不為空!') except Exception as e: messagebox.showerror(title='Error', message=e) # 單詞的定位 def fun3(): content1 = text1.get() content3 = text3.get() if content1 == '': messagebox.showerror(title='Error', message='文件名不為空!') else: try: file = open(r'D:\圖庫\183\pythonProject\com\mao\\' + content1 + '.txt', 'r') row = 1 # 行初始化為1 for line in file.readlines(): # 檢索每一行 if content3 == '': messagebox.showerror(title='Error', message='查詢目標(biāo)單詞不為空!') break else: if line.count(content3): # 每一行目標(biāo)單詞出現(xiàn)的次數(shù) text4.insert(tk.END, '\n第' + str(row) + '行,' + str(line.count(content3)) + '次') with open(r"D:\圖庫\183\pythonProject\com\mao\text.txt", "a") as output: output.write('\n第' + str(row) + '行,' + str(line.count(content3)) + '次') index_list = [] # 建立索引列表 index = line.find(content3) # 找到單詞所在的位置:索引號 while index != -1: # 判斷索引是否結(jié)束,并將查找到的索引號添加到索引列表中 index_list.append(index) index = line.find(content3, index + 1) # 下標(biāo)下一位開始,找到word之后添加到列表中 text4.insert(tk.END, '\n相應(yīng)位置在:') for index in index_list: # 遍歷索引列表并輸出 text4.insert(tk.END, str(index + 1) + ' ') text4.insert(tk.END, '\n') row += 1 else: # 無法查詢到單詞,沒有目標(biāo)單詞的行輸出此行沒有找到,進(jìn)入下一行繼續(xù)查找 row += 1 continue fun2() except Exception as e: messagebox.showerror(title='Error', message=e) # 分詞統(tǒng)計(jì) def sign4(): content1 = text1.get() def read(path): if path == '': messagebox.showerror(title='Error', message='文件名不為空!') else: try: text = open(r'D:\圖庫\183\pythonProject\com\mao\\' + path + '.txt', 'r') content = text.read() words = jieba.lcut(content) counts = {} for word in words: if len(word) == 1: continue else: counts[word] = counts.get(word, 0) + 1 items = list(counts.items()) items.sort(key=lambda x: x[1], reverse=True) counts = dict(items) text4.insert(tk.END, counts) with open(r"D:\圖庫\183\pythonProject\com\mao\text.txt", "a") as output: output.write(str(counts)) text.close() except Exception as e: messagebox.showerror(title='Error', message=e) read(content1) # 頁面布局 button1 = tk.Button(root, text='新建文件', bg='pink', font=('微軟雅黑', 15), relief=RIDGE, command=fun1) button1.place(x=0, y=0, width=100, height=80) label1 = tk.Label(root, text='文件名:', font=('微軟雅黑', 15), ) label1.grid(padx=100) text1 = tk.Entry(root, font=('MingLiU', 13)) text1.place(x=200, width=200, height=40) label2 = tk.Label(root, text='文件內(nèi)容:', font=('微軟雅黑', 15)) label2.grid(pady=25) text2 = tk.Text(root) text2.place(x=200, y=45, width=200, height=40) button2 = tk.Button(root, text='單詞計(jì)數(shù)', bg='pink', font=('微軟雅黑', 15), relief=RIDGE, command=fun2) button2.place(x=0, y=80, width=100, height=80) button3 = tk.Button(root, text='單詞定位', bg='pink', font=('微軟雅黑', 15), relief=RIDGE, command=fun3) button3.place(x=0, y=160, width=100, height=80) button4 = tk.Button(root, text='分詞統(tǒng)計(jì)', bg='pink', font=('微軟雅黑', 15), relief=RIDGE, command=sign4) button4.place(x=0, y=240, width=100, height=80) label3 = tk.Label(root, text='查詢目標(biāo):', font=('微軟雅黑', 15)) label3.grid(padx=100) text3 = tk.Entry(root, font=('MingLiU', 13)) text3.place(x=200, y=90, width=200, height=58) label4 = tk.Label(root, text='查詢結(jié)果:', font=('微軟雅黑', 15)) label4.grid(pady=75) text4 = tk.Text(root, font=('楷體', 13)) text4.place(x=200, y=160, width=200, height=200) button5 = tk.Button(root, text='退出程序', bg='pink', font=('微軟雅黑', 15), relief=RIDGE, command=root.destroy) button5.place(x=0, y=320, width=100, height=80) root.mainloop()
到此這篇關(guān)于Python-可視化單詞統(tǒng)計(jì)詞頻統(tǒng)計(jì)中文分詞的文章就介紹到這了,更多相關(guān)python中文詞頻統(tǒng)計(jì)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
tensorflow之自定義神經(jīng)網(wǎng)絡(luò)層實(shí)例
今天小編就為大家分享一篇tensorflow之自定義神經(jīng)網(wǎng)絡(luò)層實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02python將ansible配置轉(zhuǎn)為json格式實(shí)例代碼
這篇文章主要介紹了python將ansible配置轉(zhuǎn)為json格式實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-05-05Python實(shí)現(xiàn)身份證號碼驗(yàn)證的示例代碼
本文主要介紹了Python實(shí)現(xiàn)身份證號碼驗(yàn)證的示例代碼,當(dāng)用戶輸入身份證號,按下檢查按鈕,即可判斷身份證號是否正確,具有一定的參考價值,感興趣的可以了解一下2024-02-02Python使用pyppeteer模塊實(shí)現(xiàn)無頭瀏覽器自動化
pyppeteer是一個基于Python的模塊,它提供了一個高級的API,可以通過控制無頭瀏覽器來實(shí)現(xiàn)自動化網(wǎng)頁操作,下面我們就來看看Python如何使用pyppeteer模塊實(shí)現(xiàn)無頭瀏覽器自動化吧2024-02-02python使用pooch實(shí)現(xiàn)下載網(wǎng)絡(luò)文件
pooch是python的一個模塊,主打一個更加方便地下載文件,適用于科研人員和開發(fā)者,目前,已經(jīng)有scikit-image, MetPy, scipy, seaborn等項(xiàng)目采用pooch作為內(nèi)置數(shù)據(jù)集的下載方法,本文給大家介紹了python用pooch便捷地下載網(wǎng)絡(luò)文件,需要的朋友可以參考下2024-01-01Django 用戶登陸訪問限制實(shí)例 @login_required
這篇文章主要介紹了Django 用戶登陸訪問限制實(shí)例 @login_required,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05Python讀寫二進(jìn)制文件的實(shí)現(xiàn)
本文主要介紹了Python讀寫二進(jìn)制文件的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04python進(jìn)行圖片相似度對比的兩種實(shí)現(xiàn)方法
Python提供了一些庫和工具可以用于圖片的相似度比對,本文就詳細(xì)的介紹了兩種實(shí)現(xiàn)方法,感知哈希和結(jié)構(gòu)相似性,下面就來介紹一下,感興趣的可以了解一下2023-10-10