课后作业3:个人项目(词频统计及其效能分析)
- 学号:2017*****7061
- 姓名:安帅
(一)程序分析说明
1 def process_file(dst): # 读文件到缓冲区 2 try: # 打开文件 3 txt=open(dst,"r") 4 except IOError as s: 5 print (s) 6 return None 7 try: # 读文件到缓冲区 8 bvffer=txt.read() 9 except: 10 print ("Read File Error!") 11 return None 12 txt.close() 13 return bvffer
说明:读取文件,将文件读入缓冲区
1 def process_buffer(bvffer): 2 if bvffer: 3 word_freq = {} 4 # 下面添加处理缓冲区 bvffer代码,统计每个单词的频率,存放在字典word_freq 5 bvffer=bvffer.lower() 6 for x in '~!@#$%^&*()_+/*-+\][': 7 bvffer=bvffer.replace(x, " ") 8 words=bvffer.strip().split() 9 for word in words: 10 word_freq[word]=word_freq.get(word,0)+1 11 return word_freq
说明:处理缓冲区,统计每个单词的频率,对文本的特殊符号进行修改
1 def output_result(word_freq): 2 if word_freq: 3 sorted_word_freq = sorted(word_freq.items(), key=lambda v: v[1], reverse=True) 4 for item in sorted_word_freq[:10]: # 输出 Top 10 的单词 5 print(item)
说明:设置输出,输出频率排名前十单词
1 def main(): 2 3 dst = "Gone_with_the_wind.txt" 4 bvffer = process_file(dst) 5 word_freq = process_buffer(bvffer) 6 output_result(word_freq) 7 8 if __name__ == "__main__": 9 import cProfile 10 import pstats 11 cProfile.run("main()", "result") 12 # 直接把分析结果打印到控制台 13 p = pstats.Stats("result") 14 p.strip_dirs().sort_stats("call").print_stats() 15 p.strip_dirs().sort_stats("cumulative").print_stats() 16 p.print_callers(0.5, "process_file") 17 p.print_callers(0.5, "process_buffer") 18 p.print_callers(0.5, "output_result")
说明:封装main函数,输出打印
(二)性能分析结果及改进情况
1)执行次数最多的代码
2)执行时间最长的代码
3)改进优化方法
耗时长 (把大写字母转换为小写)
words=bvffer.lower().strip().split()
(三)程序运行命令、运行结果截图以及改进后的程序运行命令及结果截图
程序运行命令结果:
改进后结果:(提高了0.086s)
(四)总结反思
任务量相对较大,因为对python不熟悉,开始没有头绪,后使用百度解决了很多问题,会用课余时间把空缺慢慢补回来。