课后作业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不熟悉,开始没有头绪,后使用百度解决了很多问题,会用课余时间把空缺慢慢补回来。

 

posted on 2019-03-27 15:59  我叫陈文瀚  阅读(203)  评论(2编辑  收藏  举报