Python可視化單詞統(tǒng)計(jì)詞頻統(tǒng)計(jì)中文分詞的實(shí)現(xiàn)步驟
可視化單詞統(tǒng)計(jì)詞頻統(tǒng)計(jì)中文分詞
項(xiàng)目架構(gòu)
新建一個(gè)文件,輸入文件的內(nèi)容,查詢此文件中關(guān)鍵字的出現(xiàn)的次數(shù),關(guān)鍵字出現(xiàn)的位置,將所有的文本按照中文分詞的詞庫(kù)進(jìn)行切割劃分,返回JSON字符串,返回中文切分的單詞和出現(xiàn)的頻次,最后關(guān)閉程序

新建文件
新建指定文本文件,輸入一個(gè)文件名,以及里面的文件內(nèi)容建立一個(gè)文本文件。通過(guò)GUI的Entry控件實(shí)現(xiàn)一個(gè)文本框text1,作用是用來(lái)接收用戶輸入的文件名。
content1用來(lái)存儲(chǔ)文件名,如果輸入的文件名為空就彈出窗體顯示“文件名不為空!”的提示,content2用來(lái)存儲(chǔ)文件內(nèi)容文件名有效則通過(guò)open()函數(shù)以讀文件的方式打開(kāi)文件。
然后使用write()將輸入的文件內(nèi)容寫入新建好的文件中,點(diǎn)擊新建文件按鈕,彈出提示框“文件建立成功”,完成后close關(guān)閉文件。

輸入文件名,輸入一段內(nèi)容,點(diǎn)擊新建文件,成功建立文件

單詞計(jì)數(shù)
給定單詞計(jì)數(shù),輸入一個(gè)不含空格的單詞,統(tǒng)計(jì)輸出該單詞在文本中的出現(xiàn)次數(shù)。通過(guò)GUI的Entry控件實(shí)現(xiàn)一個(gè)文本框text1,作用是用來(lái)接收用戶輸入的文件名。content1用來(lái)存儲(chǔ)文件名,如果輸入的文件名為空就彈出窗體顯示“文件名不為空!”的提示。
文件名有效則通過(guò)open()函數(shù)以讀文件的方式打開(kāi)文件。Entry控件實(shí)現(xiàn)一個(gè)文本框text3,作用是用來(lái)接收用戶輸入要查詢的目標(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的長(zhǎng)度為m,主串T的長(zhǎng)度是n,枚舉主串T中每一個(gè)位置i, 然后檢查T[i,i+m-1]是否與目標(biāo)串P完全相同,相同的就將count加一,i加一,繼續(xù)往后匹配子串。
如果不同,就只將i加一,繼續(xù)往后匹配子串。直到整行結(jié)束。存儲(chǔ)下當(dāng)前行目標(biāo)單詞出現(xiàn)的次數(shù),再遍歷下一行。直到整個(gè)文件掃描結(jié)束;然后輸出文件中單詞出現(xiàn)的總次數(shù)。并且關(guān)閉文件。

全文單詞索引
查找給定單詞在文件中的位置。定義content1接收text1的值,content3接收text3的值,content1用來(lái)接收用戶輸入的文件名,如果輸入文件名為空就彈出窗體顯示“文件名不能為空!”的提示。
文件名有效則通過(guò)open()函數(shù)以讀文件的方式打開(kāi)文件,content3用來(lái)接收用戶所輸入需查詢的單詞;使用for循環(huán)逐行進(jìn)行檢索,先判斷輸入文件名是否為空,為空則彈出錯(cuò)誤對(duì)話框,并提示“文件名不能為空!”。
不為空則使用open()打開(kāi)文件,row初始化為1,再判斷文件內(nèi)容是否為空,為空則row+1且跳出此層循環(huán),不為空則使用for循環(huán)檢索出用戶指定單詞的位置與出現(xiàn)次數(shù)并輸出第x行n次。

中文分詞統(tǒng)計(jì)詞頻
導(dǎo)入jieba第三方中文分詞函數(shù)庫(kù),lcut(text),精確模式,返回text分詞后的列表變量使用函數(shù)lcut()進(jìn)行文本處理時(shí),英文文本的分詞只需要通過(guò)空格就可以分割。而中文的文本是需要一個(gè)“詞典”來(lái)實(shí)現(xiàn)分詞jieba第三方庫(kù)實(shí)現(xiàn)了“詞典” 采取了精確模式,試圖將句子最精確地切開(kāi)。
words = jieba.lcut(text)將文本的分詞實(shí)現(xiàn)切分后,返回一個(gè)分詞的列表words定義counts 的空字典循環(huán)遍歷分詞列表,分詞的長(zhǎng)度為1 就繼續(xù)遍歷,否則就進(jìn)行統(tǒng)計(jì)分詞出現(xiàn)的次數(shù)。每一個(gè)分詞作為字典中的鍵,出現(xiàn)的次數(shù)作為字典中的值counts[word] = counts.get(word, 0) + 1鍵值的添加,獲得文件中相同字符出現(xiàn)的次數(shù)有word這個(gè)分詞時(shí),時(shí)返回其值,默認(rèn)是0,+1能夠累計(jì)次數(shù);沒(méi)有word時(shí)則返回0。
counts.items()字典鍵值對(duì),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:\圖庫(kù)\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:\圖庫(kù)\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='沒(méi)有此單詞!')
else:
text4.insert(tk.END, '共有 ' + str(count) + ' 個(gè) ' + content3 + '\n')
with open(r"D:\圖庫(kù)\183\pythonProject\com\mao\text.txt", "a") as output:
output.write('共有 ' + str(count) + ' 個(gè) ' + 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:\圖庫(kù)\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:\圖庫(kù)\183\pythonProject\com\mao\text.txt", "a") as output:
output.write('\n第' + str(row) + '行,' + str(line.count(content3)) + '次')
index_list = []
# 建立索引列表
index = line.find(content3)
# 找到單詞所在的位置:索引號(hào)
while index != -1:
# 判斷索引是否結(jié)束,并將查找到的索引號(hào)添加到索引列表中
index_list.append(index)
index = line.find(content3, index + 1)
# 下標(biāo)下一位開(kāi)始,找到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:
# 無(wú)法查詢到單詞,沒(méi)有目標(biāo)單詞的行輸出此行沒(méi)有找到,進(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:\圖庫(kù)\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:\圖庫(kù)\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)
# 頁(yè)面布局
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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 一文帶你掌握Python中文詞頻統(tǒng)計(jì)
- python中文分詞+詞頻統(tǒng)計(jì)的實(shí)現(xiàn)步驟
- Python jieba 中文分詞與詞頻統(tǒng)計(jì)的操作
- python實(shí)現(xiàn)簡(jiǎn)單中文詞頻統(tǒng)計(jì)示例
- Python英文文章詞頻統(tǒng)計(jì)(14份劍橋真題詞頻統(tǒng)計(jì))
- python寫程序統(tǒng)計(jì)詞頻的方法
- python利用多種方式來(lái)統(tǒng)計(jì)詞頻(單詞個(gè)數(shù))
- Python統(tǒng)計(jì)中文詞頻的四種方法小結(jié)
相關(guān)文章
tensorflow之自定義神經(jīng)網(wǎng)絡(luò)層實(shí)例
今天小編就為大家分享一篇tensorflow之自定義神經(jīng)網(wǎng)絡(luò)層實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02
python將ansible配置轉(zhuǎn)為json格式實(shí)例代碼
這篇文章主要介紹了python將ansible配置轉(zhuǎn)為json格式實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-05-05
Python實(shí)現(xiàn)身份證號(hào)碼驗(yàn)證的示例代碼
本文主要介紹了Python實(shí)現(xiàn)身份證號(hào)碼驗(yàn)證的示例代碼,當(dāng)用戶輸入身份證號(hào),按下檢查按鈕,即可判斷身份證號(hào)是否正確,具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02
Python jieba庫(kù)分詞模式實(shí)例用法
在本篇文章里小編給大家分享的是一篇關(guān)于Python jieba庫(kù)分詞模式實(shí)例用法,有興趣的朋友們可以學(xué)習(xí)參考下。2021-01-01
Python使用pyppeteer模塊實(shí)現(xiàn)無(wú)頭瀏覽器自動(dòng)化
pyppeteer是一個(gè)基于Python的模塊,它提供了一個(gè)高級(jí)的API,可以通過(guò)控制無(wú)頭瀏覽器來(lái)實(shí)現(xiàn)自動(dòng)化網(wǎng)頁(yè)操作,下面我們就來(lái)看看Python如何使用pyppeteer模塊實(shí)現(xiàn)無(wú)頭瀏覽器自動(dòng)化吧2024-02-02
python使用pooch實(shí)現(xiàn)下載網(wǎng)絡(luò)文件
pooch是python的一個(gè)模塊,主打一個(gè)更加方便地下載文件,適用于科研人員和開(kāi)發(fā)者,目前,已經(jīng)有scikit-image, MetPy, scipy, seaborn等項(xiàng)目采用pooch作為內(nèi)置數(shù)據(jù)集的下載方法,本文給大家介紹了python用pooch便捷地下載網(wǎng)絡(luò)文件,需要的朋友可以參考下2024-01-01
Django 用戶登陸訪問(wèn)限制實(shí)例 @login_required
這篇文章主要介紹了Django 用戶登陸訪問(wèn)限制實(shí)例 @login_required,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05
Python讀寫二進(jìn)制文件的實(shí)現(xiàn)
本文主要介紹了Python讀寫二進(jìn)制文件的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
python進(jìn)行圖片相似度對(duì)比的兩種實(shí)現(xiàn)方法
Python提供了一些庫(kù)和工具可以用于圖片的相似度比對(duì),本文就詳細(xì)的介紹了兩種實(shí)現(xiàn)方法,感知哈希和結(jié)構(gòu)相似性,下面就來(lái)介紹一下,感興趣的可以了解一下2023-10-10

