基于Python的漢字字頻統(tǒng)計實驗
完整資料進入【數(shù)字空間】查看——baidu搜索"writebug"
實驗內(nèi)容
針對不同語料統(tǒng)計漢字的字頻,并進行比較。
實驗要求和目的
給出前 100 個漢字高頻字的頻率統(tǒng)計結(jié)果;
分別給出前 1、20、100、600、2000、3000、6000 漢字的字頻總和;
計算漢字的熵值;
針對不同規(guī)模語料重復上述實驗;
以圖表的形式表示上述結(jié)果;
提交實驗報告,給出詳細實驗過程和結(jié)果;提交源代碼和可執(zhí)行程序。
實驗環(huán)境
操作系統(tǒng) macOS Sierra
內(nèi)存 16G
開發(fā)語言 Python
程序主要算法
統(tǒng)計字頻,利用 Python 內(nèi)置的逐行讀取和行內(nèi)逐字讀取功能進行字頻統(tǒng)計,建立一個 dict 類型的變量用于記錄每個字對應的個數(shù),如果讀取的字在 dict 中出現(xiàn)過,則 value 值加一,如果讀取到的字在 dict 中未出現(xiàn)過,則在 key 值中添加新讀取的字。核心代碼如下:
with open(filepath, 'r') as txt_file:for line in txt_file:ustr = line.decode(encoding) ? ? ? for uchar in ustr: ? ? ? ? ? if is_chinese(uchar): ? ? ? ? ? ? ? ? ? ? ? account += 1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?if _dict.has_key(uchar): ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?_dict[uchar] = _dict[uchar] + 1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? else: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? _dict[uchar] = 1
實驗過程
首先進行語料的收集,我收集到有“人民日報 800 萬字語料庫”、“搜狗新聞庫”,并在網(wǎng)上找了一些金庸的小說 TXT 版本。
然后進行代碼的編寫,先確定了核心算法,就是第四步中提及的代碼,然后編寫了如下函數(shù)完成實驗指導中的要求:
給出前 100 個漢字高頻字的頻率統(tǒng)計結(jié)果,對應函數(shù)為:def cal_chinese_word_top100(_dict,_account):
分別給出前 1、20、100、600、2000、3000、6000 漢字的字頻總和。對應代碼為:def cal_chinese_word_7(_dict,_account):
計算漢字的熵值。對應代碼為:def cal_entropy(_list):





