軟工作業3:Python詞頻統計
阿新 • • 發佈:2018-10-09
alt stat 小寫 代碼 strong pla 創建 處理 inf
一、程序分析
1.讀文件到緩沖區
def process_file(dst): # 讀文件到緩沖區 try: # 打開文件 file=open(dst,"r") except IOError as s: print(s) return None try: # 讀文件到緩沖區 bvffer=file.read() except: print("Read File Error!") return None file.close()return bvffer
2.設置緩沖區,將文本度數緩沖區,並對文本的特殊符號進行修改,使其更容易處理,並讀入字典
def process_buffer(bvffer): if bvffer: word_freq = {} # 下面添加處理緩沖區 bvffer代碼,統計每個單詞的頻率,存放在字典word_freq for i in ‘!"#$%&()*+-,-./:;<=>?@“”[\\]^_{|}~‘: bvffer = bvffer.replace(i, " ") # 替換特殊字符bvffer = bvffer.lower() # 把大寫字母轉換為小寫 words = bvffer.split() # 分割字符串 for word in words: word_freq[word] = word_freq.get(word, 0)+1 return word_freq
3.輸出函數將處理好的單詞按詞頻排序,輸出詞頻Top10 的單詞
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(): parser = argparse.ArgumentParser() parser.add_argument(‘dst‘) args = parser.parse_args() dst = args.dstdst = "Gone_with_the_wind.txt" bvffer = process_file(dst) word_freq = process_buffer(bvffer) output_result(word_freq)
5.cProfile的性能評估
if __name__ == "__main__": import cProfile import pstats import argparse cProfile.run("main()", "result") # 直接把分析結果打印到控制臺 p = pstats.Stats("result") # 創建Stats對象 p.sort_stats(‘calls‘).print_stats(10) # 按照調用次數排序,打印前10函數的信息 p.strip_dirs().sort_stats("cumulative", "name").print_stats(10) p.print_callers(0.5, "process_file") # 得知哪些函數調用了process_file p.print_callers(0.5, "process_buffer") p.print_callers(0.5, "output_result")
二、代碼風格說明
縮進
if bvffer: word_freq = {}
三、程序運行命令、運行結果截圖
對Gone_with_the_wind.txt進行詞頻統計:
運行截圖:
按執行次數:
按執行時間:
四、性能分析結果及改進
執行次數最多:
執行時間最多:
改進代碼:
分析:可以去掉其中的部分不可能出現的符號
原來代碼:
for i in ‘!"#$%&()*+-,-./:;<=>?@“”[\\]^_{|}~‘: bvffer = bvffer.replace(i, " ") # 替換特殊字符
改進之後:
for i in ‘!"()+-,-./:;<=>?“”^~‘: bvffer = bvffer.replace(i, " ") # 替換特殊字符
軟工作業3:Python詞頻統計