欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python可視化單詞統(tǒng)計(jì)詞頻統(tǒng)計(jì)中文分詞的實(shí)現(xiàn)步驟

 更新時間:2022年11月30日 10:35:15   作者:coffee_mao  
這篇文章主要介紹了Python可視化單詞統(tǒng)計(jì)詞頻統(tǒng)計(jì)中文分詞,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

可視化單詞統(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)容建立一個文本文件。通過GUIEntry控件實(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ù)。通過GUIEntry控件實(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ù)并輸出第xn次。

中文分詞統(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)文章

最新評論