第三次作业(词频统计及其效能分析)
?博客開頭給出自己的基本信息,格式建議如下:
- 學號2017035107122;
- 姓名:張煒一
- 碼云地址:https://gitee.com/weiyi1208/word_frequency
調用次數最多的
執行時間最長的
?
將文件讀入緩沖區(dst指文本文件存放路徑,設置成形參,也可以不設,具體到函數里設置)
def process_file(dst): # 讀文件到緩沖區
try: # 打開文件
txt=open(dst,"r")
except IOError as s:
print (s)
return None
try: # 讀文件到緩沖區
bvffer=txt.read()
except:
print ("Read File Error!")
return None
txt.close()
return bvffer
?
設置緩沖區,將文本度數緩沖區,并對文本的特殊符號進行修改,使其更容易處理,并讀入字典。
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
?
設置輸出函數,運用lambda函數對詞頻排序,并以“詞”——“頻”格式輸出
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)
?
封裝main函數,以便接下來的cProfile的性能評估
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() # 按執行時間次數排序
?
本次作業使我學習了python中cProfile的使用方式,通過此次作業是我對如何減少軟件執行時間有了新的想法。
轉載于:https://www.cnblogs.com/weiyi08/p/10616809.html
總結
以上是生活随笔為你收集整理的第三次作业(词频统计及其效能分析)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: P1605 迷宫 dfs回溯法
- 下一篇: 2019春第五周作业