【Python】周董歌詞文本和黴黴歌詞文本的詞頻統計實例分析

英文文本
首先我們準備一個待做詞頻分析的英文文本,我選擇了黴黴的《Red》全部歌詞部分

下面我們來做詞頻分析

#CalRed.py
def getText():
	txt = open("Red.Txt","r").read()
	txt = txt.lower()
	for ch in '!,?':
		txt = txt.replace(ch," ")
	return txt

RedTxt = getText()
words = RedTxt.split()
counts = {}
for word in words:
	counts[word] = counts.get(word,0)+1
items = list(counts.items())
items.sort(key=lambda x:x[1],reverse=True)
for i in range(5):
	word,count = items[i]
	print("{0:<10}{1:>5}".format(word,count))

首先我們定義了一個函數 getText(),它能夠對獨立的文本進行歸一處理,將所有的英文字符統一變爲小寫,所有的符號變爲空格

然後我們用一個字典對所有的單詞,以及出現的次數進行了映射對應

再一步我們將字典類型轉換爲列表類型,通過排序獲得當前最高的單詞出現次數,最後用 for in 對前五位單詞出現次數的元素以及它的次數進行打印

輸出結果如下:

him          22
was          20
like         13
red          11
loving        7

待進行詞頻統計的文本一定要保存在你所安裝python文件夾中,否則讀取文本的時候就會報錯

中文文本
中文我選取了周董的《說好了不哭》來做詞頻分析

import jieba
txt = open("說好不哭.txt","r",encoding="utf-8").read()
words = jieba.lcut(txt)
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)
for i in range(15):
    word,count = items[i]
    print("{0:<10}{1:>5}".format(word,count))

由於要對中文文本進行分詞,我們引入jieba庫,jieba庫中的分詞不考慮標點符號,以及大小寫問題,所以只需要將分詞結果及對應的數值存放在字典中

我們用大括號創建一個字典,遍歷所有分詞結果組成的列表,排除只要一個字的分詞,其餘的做統計儲存在字典中

最後我們將字典中鍵值對轉換爲列表類型,對列表進行排序並輸出排名前十五的值。

輸出結果如下:

怎麼            7
沒有            5
別人            4
生活            3
時候            3
電話            2
開始            2
從不            2
習慣            2
一個            2
離開            2
以後            2
好好            2
打擾            2
自由            2
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章