python統計詞頻
阿新 • • 發佈:2018-10-10
讀取 程序 lac install 分析文件 __name__ __main__ all pytho
一、程序分析
(1)讀取文件到緩沖區
def process_file(dst): # 讀文件到緩沖區 try: # 打開文件 f1=open(dst,"r") except IOError as s: print (s) return None try: # 讀文件到緩沖區 bvffer=f1.read() except: print ("Read File Error!") return None f1.close() return bvffer
(2)緩沖區字符串分割成帶有詞頻的字典
def process_buffer(bvffer): if bvffer: word_freq = {} # 下面添加處理緩沖區 bvffer代碼,統計每個單詞的頻率,存放在字典word_freq bvffer=bvffer.lower() for x in ‘~!@#$%^&*()_+/*-+\][‘: bvffer=bvffer.replace(x, " ") words=bvffer.strip().split() for word in words: word_freq[word]=word_freq.get(word,0)+1 return word_freq
(3)將字典按詞頻排序並輸出排名前十的詞頻對
def output_result(word_freq): if word_freq: sorted_word_freq = sorted(word_freq.items(), key=lambda v: v[1], reverse=True) for item in sorted_word_freq[:10]: # 輸出 Top 10 的單詞 print (item)
(4)封裝main函數
def main(): dst = "Gone_with_the_wind.txt" bvffer = process_file(dst) word_freq = process_buffer(bvffer) output_result(word_freq) if __name__ == "__main__": import cProfile import pstats cProfile.run("main()", "result") # 直接把分析結果打印到控制臺 p = pstats.Stats("result") # 創建Stats對象 p.strip_dirs().sort_stats("call").print_stats() # 按照調用的次數排序 p.strip_dirs().sort_stats("cumulative").print_stats() # 按執行時間次數排序 p.print_callers(0.5, "process_file") # 如果想知道有哪些函數調用了process_file,小數,表示前百分之幾的函數信息 p.print_callers(0.5, "process_buffer") # 如果想知道有哪些函數調用了process_buffer p.print_callers(0.5, "output_result") # 如果想知道有哪些函數調用了output_res
二、代碼風格
縮進
使用4個空格進行縮進
ef process_buffer(bvffer): if bvffer:
行寬
每行代碼盡量不超過80個字符
三、程序運行命令、運行結果截圖
四、性能分析結果及改進
執行次數最多
執行時間最多
五、可視化操作
- 需要安裝:graphviz , "pip install graphviz"; 參考使用cProfile分析Python程序性能:鏈接
-
下載轉換 dot 的 python 代碼gprof2dot 官方下載,下載完了,解壓縮,將『gprof2dot.py』 copy 到當前分析文件的路徑,或者你系統 PATH 環境變量設置過的路徑
1. 性能分析:python -m cProfile -o result -s cumulative word_freq.py Gone_with_the_wind.txt;分析結果保存到 result 文件;
2. 轉換為圖形;gprof2dot 將 result 轉換為 dot 格式;再由 graphvix 轉換為 png 圖形格式。
命令:python gprof2dot.py -f pstats result | dot -Tpng -o result.png
得到以下圖
python統計詞頻