英文文本
首先我們準備一個待做詞頻分析的英文文本,我選擇了黴黴的《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