Python統(tǒng)計(jì)中文詞頻的四種方法小結(jié)
統(tǒng)計(jì)中文詞頻是Python考試中常見的操作,由于考察內(nèi)容較多,因此比較麻煩,那么有沒有好的方法來(lái)實(shí)現(xiàn)呢?今天,我們總結(jié)了四種常見的中文詞頻統(tǒng)計(jì)方法,并列出代碼,供大家學(xué)習(xí)參考。
中文詞頻統(tǒng)計(jì)主要是通過open()打開文本,然后read()方法讀取后,采用結(jié)巴分詞(jieba)模塊進(jìn)行分詞,接著用推表推導(dǎo)式、Counter或者是字典的方法來(lái)統(tǒng)計(jì)詞頻,也可以采用NLTK的方法,最后格式化打印出來(lái)。
題目:統(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來(lái)安裝這個(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ì)象,再排序,最后再打印出來(lái)。這里我們使用了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來(lái)統(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爬蟲之利用selenium模塊自動(dòng)登錄CSDN
這篇文章主要介紹了python爬蟲之利用selenium模塊自動(dòng)登錄CSDN,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有很好地幫助,需要的朋友可以參考下2021-04-04Python隨機(jī)生成均勻分布在單位圓內(nèi)的點(diǎn)代碼示例
這篇文章主要介紹了Python隨機(jī)生成均勻分布在單位圓內(nèi)的點(diǎn)代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11Python中的引用知識(shí)點(diǎn)總結(jié)
在本文里我們給大家整理了關(guān)于Python中的引用知識(shí)點(diǎn)以及相關(guān)代碼總結(jié),需要的朋友們跟著學(xué)習(xí)下。2019-05-05Python中將文件從一個(gè)服務(wù)器復(fù)制到另一個(gè)服務(wù)器的4種方法
Python中將文件從一個(gè)服務(wù)器復(fù)制到另一個(gè)服務(wù)器通常涉及到網(wǎng)絡(luò)傳輸,這個(gè)過程可以通過多種方式實(shí)現(xiàn),本文主要為大家介紹了4種常用方法,需要的可以參考下2024-10-10python求最大值,不使用內(nèi)置函數(shù)的實(shí)現(xiàn)方法
今天小編就為大家分享一篇python求最大值,不使用內(nèi)置函數(shù)的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2019-07-07