Python統(tǒng)計(jì)中文詞頻的四種方法小結(jié)
統(tǒng)計(jì)中文詞頻是Python考試中常見的操作,由于考察內(nèi)容較多,因此比較麻煩,那么有沒有好的方法來實(shí)現(xiàn)呢?今天,我們總結(jié)了四種常見的中文詞頻統(tǒng)計(jì)方法,并列出代碼,供大家學(xué)習(xí)參考。
中文詞頻統(tǒng)計(jì)主要是通過open()打開文本,然后read()方法讀取后,采用結(jié)巴分詞(jieba)模塊進(jìn)行分詞,接著用推表推導(dǎo)式、Counter或者是字典的方法來統(tǒng)計(jì)詞頻,也可以采用NLTK的方法,最后格式化打印出來。
題目:統(tǒng)計(jì)中文文本文件【詞頻統(tǒng)計(jì)文本.txt】中長(zhǎng)度大于1的詞的詞頻,然后打印出詞頻數(shù)最高的10個(gè)詞。
默認(rèn)系統(tǒng)里已經(jīng)安裝好了jieba這個(gè)模塊。如果還沒有安裝,可以在cmd下通過pip install jieba來安裝這個(gè)模塊。
一、字典法——常用的方法
先讀取文本,然后jieba分詞,再對(duì)分詞后的列表進(jìn)行遍歷,然后用字典統(tǒng)計(jì)詞頻。這里排除了單個(gè)詞,代碼如下:
import jieba
txt = open("詞頻統(tǒng)計(jì)文本.txt", "r").read()
words = jieba.lcut(txt)
counts = {}
for word in words:
if len(word) == 1: #排除單個(gè)字符的分詞結(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)計(jì)數(shù)量排前10的詞')二、Counter法——代碼簡(jiǎn)單,速度快
先生成Counter對(duì)象,再排序,最后再打印出來。這里我們使用了most_common的方法,代碼更為簡(jiǎn)潔,更好理解一點(diǎn)。代碼如下:
import jieba
from collections import Counter
with open("詞頻統(tǒng)計(jì)文本.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)計(jì)數(shù)量排前10的詞')三、NLTK方法——有點(diǎn)兒小麻煩
利用列表推導(dǎo)式篩選列表,利用NLTK中的FreqDist來統(tǒng)計(jì)列表中的詞步,代碼如下。
import jieba,os
from nltk.probability import FreqDist
with open("詞頻統(tǒng)計(jì)文本.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)計(jì)數(shù)量排前10的詞')使用這種方法,得安裝nltk包,較為麻煩。
四、列表推導(dǎo)式法
如果不借助其它包,我們可以充分利用Python自帶的count方法和列表推導(dǎo)式,實(shí)現(xiàn)詞頻的統(tǒng)計(jì)。這其中與前面排序的方法不同的是,我們采用了sorted的方法,完整代碼如下:
import jieba,os
with open("詞頻統(tǒng)計(jì)文本.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: #排除單個(gè)字符的分詞結(jié)果
continue
else:
print(f"{word:<10}\t{count:<5}")
print ('已統(tǒng)計(jì)數(shù)量排前10的詞')五、學(xué)后反思
1. 中文詞頻統(tǒng)計(jì)主要考察文本的讀取、列表的遍歷、jieba分詞、詞頻統(tǒng)計(jì)、排序、結(jié)果的格式化和打印輸出等綜合能力。因此,它是Python二級(jí)中??嫉念}目,認(rèn)真學(xué)習(xí),并找出多種詞頻統(tǒng)計(jì)的方法可以更好地理解Python中的相關(guān)概念和基礎(chǔ)語(yǔ)法知識(shí)。
2. 四種方法中最麻煩的是NLTK法和列表推導(dǎo)式化,字典法和Counter方法最為常用,字典法常出現(xiàn)在考試中,而Counter的方法實(shí)用性更強(qiáng),大家可以有選擇地使用。
3. 有了詞頻表,后續(xù)可以進(jìn)行可視化的圖表生成,包括詞云圖和線形圖等,以便更直觀地觀察語(yǔ)篇中詞的特點(diǎn)。
到此這篇關(guān)于Python統(tǒng)計(jì)中文詞頻的四種方法小結(jié)的文章就介紹到這了,更多相關(guān)Python統(tǒng)計(jì)中文詞頻內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)現(xiàn)的可可愛愛的小粽子詳解
我突發(fā)奇想做一個(gè)關(guān)于粽子的小游戲,基本原理:操控粽子吃掉愛心,即可增加分?jǐn)?shù),經(jīng)過朋友game多測(cè)嘗試最終完成小游戲2022-06-06
自己搭建resnet18網(wǎng)絡(luò)并加載torchvision自帶權(quán)重的操作
這篇文章主要介紹了自己搭建resnet18網(wǎng)絡(luò)并加載torchvision自帶權(quán)重的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05
解決Pycharm中import時(shí)無法識(shí)別自己寫的程序方法
今天小編就為大家分享一篇解決Pycharm中import時(shí)無法識(shí)別自己寫的程序方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-05-05
Pytorch中torch.cat()函數(shù)舉例解析
一般torch.cat()是為了把多個(gè)tensor進(jìn)行拼接而存在的,下面這篇文章主要給大家介紹了關(guān)于Pytorch中torch.cat()函數(shù)舉例解析的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12
詳解Python如何巧妙實(shí)現(xiàn)數(shù)學(xué)階乘n!
一個(gè)正整數(shù)的階乘(factorial)是所有小于及等于該數(shù)的正整數(shù)的積,并且0的階乘為1。自然數(shù)n的階乘寫作n!,本文就給大家介紹如何使用python和第三方庫(kù)來實(shí)現(xiàn)數(shù)學(xué)運(yùn)算中的階乘以及階乘累計(jì)求和2023-03-03
Python各類圖像庫(kù)的圖片讀寫方式總結(jié)(推薦)
這篇文章主要介紹了Python各類圖像庫(kù)的圖片讀寫方式總結(jié)(推薦),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-02-02
django中模板的html自動(dòng)轉(zhuǎn)意方法
今天小編就為大家分享一篇django中模板的html自動(dòng)轉(zhuǎn)意方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-05-05

