作业三

1) 自己的基本信息:

  • 学号:2017*****1035;
  • 姓名:陈慧霖
  • 码云仓库地址:https://gitee.com/chl035/word_frequency

2) 程序分析,对程序中的四个函数做简要说明。要求附上每一段代码及对应的说明。

第一段:打开并读取文件到缓冲区

 1 def process_file(dst):     # 读文件到缓冲区
 2     try:     # 打开文件
 3         f = open(dst)
 4     except IOError as s:
 5         print (s)
 6         return None
 7     try:     # 读文件到缓冲区
 8         bvffer = f.read()
 9     except:
10         print ("Read File Error!")
11         return None
12     f.close()
13     return bvffer

 

第二段:添加处理缓冲区bvffer代码,统计每个单词的频率,对文本特殊符号进行修改,并读入字典word_freq

 1 def process_buffer(bvffer):
 2     if bvffer:
 3         word_freq = {}
 4         # 下面添加处理缓冲区 bvffer代码,统计每个单词的频率,存放在字典word_freq
 5         for item in bvffer.strip().split():
 6             word = item.strip(punctuation+' ')
 7             if word in word_freq.keys():
 8                 word_freq[word] += 1
 9             else:
10                 word_freq[word] = 1
11         return word_freq

 

第三段:设置输出函数,进行排序并输出Top 10 的单词,统计词频

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)

 

第四段:调用main函数,输出至控制台

1 if __name__ == "__main__":
2     import argparse
3     parser = argparse.ArgumentParser()
4     parser.add_argument('dst')
5     args = parser.parse_args()
6     dst = args.dst
7     bvffer = process_file(dst)
8     word_freq = process_buffer(bvffer)
9     output_result(word_freq)

 

3) 性能分析结果及改进。

程序运行命令、运行结果截图

用命令python -m cProfile word_freq.py Gone_with_the_wind.txt运行:

分析:Gone_with_the_wind.txt文件大小是2.25 M

   总共有869127次函数调用,程序总共耗时0.443秒

 

指出执行次数最多的代码

 

 

执行时间最长的代码

给出改进优化的方法以及你的改进代码

 应改把执行时间最长的代码优化一下,函数process_buffer函数中有一行代码:

if word in word_freq.keys():

该代码在for循环中,有多少单词,这个循环就会执行多少遍,每次进行条件判断的时候都要执行一次字典的keys方法,所以耗时很多。于是把keys去除,该行代码变为:

if word in word_freq:

 

4)改进后的程序运行命令及结果截图 。

 运行命令python word_freq.py  Gone_with_the_wind.txt

 改进后:

分析:总共有449147次函数调用,程序总共耗时0.349秒

运行速度提升明显。

5) 给出你对此次任务的总结与反思。

 复习了词频统计这个程序,这次作业让我了解了性能分析,更加深入学习了python这门语言,我应该多看一些如何优化代码的教程,以后有能力继续优化这个程序。

posted on 2019-03-30 16:06  昵称都被注册了  阅读(300)  评论(1编辑  收藏  举报

导航