课后作业3:个人项目(词频统计及其效能分析)

  • 学号:2017*****7096
  • 姓名:王冬葛

一,程序分析

(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() # 按执行时间次数排序
 

二,性能分析結果

執行次數最多

 執行次數最長

運行結果

 

 

三,改進優化方法

改进可以从二个方面入手,(1)减少耗时;(2)减少调用次数

 

 想出來了,但不會。

四,總結反思

这次的项目用时还是很长的,主要原因在于对语言运用的不够熟练。但有些地方由于个人水平有限没能完全改完,日后会再努力如何优化。

 

posted on 2019-03-27 16:39  王冬葛  阅读(151)  评论(0编辑  收藏  举报

导航