Python統(tǒng)計中文詞頻的四種方法小結(jié)
統(tǒng)計中文詞頻是Python考試中常見的操作,由于考察內(nèi)容較多,因此比較麻煩,那么有沒有好的方法來實現(xiàn)呢?今天,我們總結(jié)了四種常見的中文詞頻統(tǒng)計方法,并列出代碼,供大家學(xué)習(xí)參考。
中文詞頻統(tǒng)計主要是通過open()打開文本,然后read()方法讀取后,采用結(jié)巴分詞(jieba)模塊進行分詞,接著用推表推導(dǎo)式、Counter或者是字典的方法來統(tǒng)計詞頻,也可以采用NLTK的方法,最后格式化打印出來。
題目:統(tǒng)計中文文本文件【詞頻統(tǒng)計文本.txt】中長度大于1的詞的詞頻,然后打印出詞頻數(shù)最高的10個詞。
默認系統(tǒng)里已經(jīng)安裝好了jieba這個模塊。如果還沒有安裝,可以在cmd下通過pip install jieba來安裝這個模塊。
一、字典法——常用的方法
先讀取文本,然后jieba分詞,再對分詞后的列表進行遍歷,然后用字典統(tǒng)計詞頻。這里排除了單個詞,代碼如下:
import jieba txt = open("詞頻統(tǒng)計文本.txt", "r").read() words = jieba.lcut(txt) counts = {} for word in words: if len(word) == 1: #排除單個字符的分詞結(jié)果 continue else: counts[word] = counts.get(word,0) + 1 items = list(counts.items()) items.sort(key=lambda x:x[1], reverse=True) for i in range(10): word, count = items[i] print("{0:<10}{1:>5}".format(word,count)) print ('已統(tǒng)計數(shù)量排前10的詞')
二、Counter法——代碼簡單,速度快
先生成Counter對象,再排序,最后再打印出來。這里我們使用了most_common的方法,代碼更為簡潔,更好理解一點。代碼如下:
import jieba from collections import Counter with open("詞頻統(tǒng)計文本.txt", "r",encoding="utf-8") as f: words = jieba.lcut(f.read()) words = [item for item in words if len(item)>1] counts = Counter(words) for word,count in counts.most_common(10): print(word,count) print ('已統(tǒng)計數(shù)量排前10的詞')
三、NLTK方法——有點兒小麻煩
利用列表推導(dǎo)式篩選列表,利用NLTK中的FreqDist來統(tǒng)計列表中的詞步,代碼如下。
import jieba,os from nltk.probability import FreqDist with open("詞頻統(tǒng)計文本.txt","r",encoding="utf-8") as f: text = f.read() words = jieba.lcut(text) lst = [i for i in words if len(i)>1] freq = FreqDist(lst) for item in freq.most_common(10): word,count=item print(f"{word:<10}\t{count:<5}") print ('已統(tǒng)計數(shù)量排前10的詞')
使用這種方法,得安裝nltk包,較為麻煩。
四、列表推導(dǎo)式法
如果不借助其它包,我們可以充分利用Python自帶的count方法和列表推導(dǎo)式,實現(xiàn)詞頻的統(tǒng)計。這其中與前面排序的方法不同的是,我們采用了sorted的方法,完整代碼如下:
import jieba,os with open("詞頻統(tǒng)計文本.txt","r",encoding="utf-8") as f: text = f.read() words = jieba.lcut(text) lst = [(key,words.count(key)) for key in set(words) if len(key)>1] items = sorted(lst,key=lambda x:x[1],reverse=True) for i in range(10): word, count = items[i] if len(word) == 1: #排除單個字符的分詞結(jié)果 continue else: print(f"{word:<10}\t{count:<5}") print ('已統(tǒng)計數(shù)量排前10的詞')
五、學(xué)后反思
1. 中文詞頻統(tǒng)計主要考察文本的讀取、列表的遍歷、jieba分詞、詞頻統(tǒng)計、排序、結(jié)果的格式化和打印輸出等綜合能力。因此,它是Python二級中??嫉念}目,認真學(xué)習(xí),并找出多種詞頻統(tǒng)計的方法可以更好地理解Python中的相關(guān)概念和基礎(chǔ)語法知識。
2. 四種方法中最麻煩的是NLTK法和列表推導(dǎo)式化,字典法和Counter方法最為常用,字典法常出現(xiàn)在考試中,而Counter的方法實用性更強,大家可以有選擇地使用。
3. 有了詞頻表,后續(xù)可以進行可視化的圖表生成,包括詞云圖和線形圖等,以便更直觀地觀察語篇中詞的特點。
到此這篇關(guān)于Python統(tǒng)計中文詞頻的四種方法小結(jié)的文章就介紹到這了,更多相關(guān)Python統(tǒng)計中文詞頻內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
django表單中的按鈕獲取數(shù)據(jù)的實例分析
在本篇文章里小編給大家詳解了關(guān)于django表單中的按鈕獲取數(shù)據(jù)的內(nèi)容,需要的朋友們可以參考下。2020-07-07Python中的type與isinstance的區(qū)別詳解
本文主要介紹了Python中的type與isinstance的區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04Python網(wǎng)絡(luò)編程之網(wǎng)絡(luò)與通信介紹
這篇文章主要介紹了Python網(wǎng)絡(luò)編程之網(wǎng)絡(luò)與通信介紹,計算機網(wǎng)絡(luò)就是分布在不同的地區(qū)的計算機與專門的外部設(shè)備通信線路互聯(lián)在一起,2023-08-08
成為一個功能強,規(guī)模大的網(wǎng)絡(luò)系統(tǒng),本期就主要介紹網(wǎng)絡(luò)與通信的相關(guān)知識和原理,需要的朋友可以參考下Python基于select實現(xiàn)的socket服務(wù)器
這篇文章主要介紹了Python基于select實現(xiàn)的socket服務(wù)器,實例分析了Python基于select與socket模塊實現(xiàn)socket通信的相關(guān)技巧,需要的朋友可以參考下2016-04-04Python實現(xiàn)二值掩膜影像去噪與邊緣強化方法詳解
這篇文章主要介紹了Python實現(xiàn)二值掩膜影像去噪與邊緣強化方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-01-01