文章目录

  • 一、程序分析
    • (1)将文件读到缓冲区
    • (2)对读到缓冲区的文件内容进行词频统计
    • (3)得出单词频率统计结果,输出出现频率前10的单词
    • (4)设置一个main函数,将前面的函数进行调用封装
    • (5)测试
  • 二、代码风格说明
  • 三、程序运行命令、运行结果
  • 四、性能分析结果及改进
    • (1)按调用次数排序,打印前10函数的信息
    • (2)按运行时间和函数名进行排序,打印前10行函数的信息
    • (3)每个函数具体占用时间
    • (4)具体看一下process_buffer函数调用了什么(代码改进)
  • 五、使用可视化分析

一、程序分析

(1)将文件读到缓冲区

(2)对读到缓冲区的文件内容进行词频统计

(3)得出单词频率统计结果,输出出现频率前10的单词

(4)设置一个main函数,将前面的函数进行调用封装

(5)测试

二、代码风格说明

(1)函数名应该小写,单词与单词之间使用"_"相隔

(2)代码块之间相隔两行

(3)注释以 # 和 一个空格 开始

(4)函数注释 一对"""之间

三、程序运行命令、运行结果

对 文件Gone_with_the_wind 进行词频统计

四、性能分析结果及改进

(1)按调用次数排序,打印前10函数的信息

总的运行时间 0.256秒

ncalls:表示函数调用的次数;
tottime:表示指定函数的总的运行时间,除掉函数中调用子函数的运行时间;
percall:(第一个percall)等于 tottime/ncalls;
cumtime:表示该函数及其所有子函数的调用运行的时间,即函数开始调用到返回的时间;
percall:(第二个percall)即函数运行一次的平均时间,等于 cumtime/ncalls;
filename:lineno(function):每个函数调用的具体信息;

(2)按运行时间和函数名进行排序,打印前10行函数的信息

(3)每个函数具体占用时间

process_buffer函数运行的时间最长。

(4)具体看一下process_buffer函数调用了什么(代码改进)


代码改进:

从分析结果的截图中我们可以看出process_buffer函数在replace上花费了巨大的时间。
因此,将下方代码进行改进:for i in punctuation_en:  # 将文本中的所有英文标点都换为空格buffer = buffer.replace(i, " ")for i in punctuation_zh:  # 将文本中的所有中文标点都换为空格buffer = buffer.replace(i, " ")改为:for i in "!\"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"#$%&'()*+,-/:;<=>@[\]^_`{|}~⦅⦆、 、〃〈〉《》【】〜〝〞〟–—‘’‛“”„‟…‧﹏﹑﹔·!?。。'":buffer = buffer.replace(i, " ")

可以看出运行时间变快了

五、使用可视化分析

  1. 性能分析:python -m cProfile -o result.out -s cumulative word_freq.py Gone_with_the_wind.txt;分析结果保存到 result.out 文件;

  2. 转换为图形;gprof2dot 将 result.out 转换为 dot 格式;再由 graphvix 转换为 png 图形格式。 命令:python gprof2dot.py -f pstats result.out | dot -Tpng -o result.png

2022(春)软工作业2:个人编程练习相关推荐

  1. 2022秋软工实践 第一次结对编程作业

    2022秋软工实践 第一次结对编程作业 需求分析 (1)Need,需求 (2)Approach,做法 (3)Benfit,好处 (4)Competitors,竞争 (5)Delivery,推广 UML ...

  2. 2022秋软工实践 第二次结对编程作业

    这个作业属于哪个课程 fzusdn 这个作业要求在哪里 作业要求 这个作业的目标 生成指定条件数据集,实现效益最大的点名策略 学号 032004110 队友学号 032004119 commit记录 ...

  3. 2021秋软工实践第一次结对编程作业

    这个作业属于哪个课程 构建之法-2021秋-福州大学软件工程 这个作业要求在哪里 2021秋软工实践第一次结对编程作业 这个作业的目标 实现博饼软件原型并进行博客写作 学号 031902139 队友学 ...

  4. 2022秋软工实践个人作业二

    2022秋软工实践个人作业二 Task I Task II 这个作业属于哪个课程 软工实践 这个作业要求在哪里 2022秋软工实践个人作业二 这个作业的目标 git html 学号 032002342 ...

  5. 软工作业 5:词频统计——增强功能

    一.基本信息 1.1 编译环境.项目名称.作者 1 #编译环境:python3.6 2 #项目名称:软工作业5-词频统计-增强功能 3 #作者:1613072055 潘博 4 # 1613072056 ...

  6. 第三次软工作业——实现最大字段和算法并进行判定条件覆盖

    第三次软工作业 实现最大子段和的算法并进行条件组合覆盖测试 (一)什么是最大子段和? 我自己的理解: 一个数组可以若干个子数组,包含自身.每一个字数组都有一个数组元素之和,求这些和之间的最大值. 最朴 ...

  7. 第一次软工作业(构建之法)

    第一次软工作业(构建之法) 关于构建之法的若干个问题 1.第一章32页,原文:"有人认为,"中文编程",是解决程序员编程效率的一个秘密武器,请问它是一个"银弹& ...

  8. 第一次软工作业展示——潘学

    第一次软工作业完成啦! 回首这个作业的完成过程,我是很有收获.这个作业有几个难点:1.在给定目录下读取TXT文件的内容:2.从读到的内容中分析出单词:3.统计单词的出现频率并输出. 我之前只学习过C和 ...

  9. 第一次软工作业(数独)

    第一次软工作业(数独) 1.该项目的github地址: https://github.com/514DNA/sudoku 2.各个模块耗费的时间: PSP2.1 Personal Software P ...

  10. 结对编程实况录像-2022北航软工

    项目 内容 这个作业属于哪个课程 2022春季软件工程(罗杰 任健) 这个作业的要求在哪里 结对编程项目-最长英语单词链 我在这个课程的目标是 学习软工的项目合作管理知识,提升软件开发技术 这个作业在 ...

最新文章

  1. 黑科技,教你用Python打电话,控制手机技术,快来学一下
  2. Java8的集合:ArrayList的实现原理
  3. 云主机和物理机PK图
  4. makefile 的export问题
  5. 中国计算机学会通讯杂志,何积丰. Cyber-physical systems [J]. 中国计算机学会通讯, 2010, 6(1): 25-29....
  6. springboot发送邮件_SpringBoot发送邮件如何实现,SpringBoot发送邮件详解(附代码)...
  7. DBA自述:非科班出身,如何成为Oracle ACE
  8. 5个月内要完成的东西
  9. 关于Java的多线程Runnable的个人理解(基础,不讲概念)
  10. package.json作用
  11. L1正则化与嵌入式特征选择(稀疏性)
  12. scrapy生成json中文为ASCII码解决
  13. 表的主键用数字还是UUID
  14. ora01017 linux,Oracle linux 7.5安装oracle 12c dg一直提示ORA-01017
  15. Qt实现职工信息管理系统
  16. 程序员用C/C++打造车牌识别系统!同学眼中只有膜拜!
  17. window10配置OpenGL ES3.0
  18. 会说话的PPT,从开发者角度十分钟理解区块链
  19. makefile 指定文件搜索路径和文件生成路径
  20. 进程间通信:通俗理解信号量方式

热门文章

  1. Git问题Everything up-to-date正确解决方法
  2. hapi.js_Hapi.js入门
  3. Mathematica绘制动态椭圆摆线(一)
  4. SAP 固定资产主数据
  5. 模板码:个性二维码制作,改变二维码设计方式
  6. 复习笔记1-java基础
  7. 调用企查查第三方Api:企业工商模糊搜索
  8. qq邮箱发送html文本,使用qq邮箱发送html格式的邮件
  9. 远心镜头与普通镜头拍摄工件孔径对比
  10. 第四讲 比值、根值和积分审敛法