wordcount作业
| 这个作业属于哪个课程 | https://edu.cnblogs.com/campus/nue/SE202010/homework/11481 |
| 这个作业要求在哪里 | 完成对txt文档中单词的词频统计 |
| 这个作业的目标 |
1.进一步熟悉python语言的编程 2.复习前期软件课程中关于软件单人开发流程的相关内容 3.进一步巩固编写单元测试的能力 4.掌握性能分析的方法 |
| 学号 | 2020111 |
项目代码地址:https://gitee.com/zqysoftware/pythonProject1
一、PSP表格

二、学习情况
根据作业要求,主要学习了关于定义函数、字典、列表、文件处理的用法。
(一)学习内容
1.《python语言程序设计》慕课第六周数据类型和第七周文件内容;
2.学习《python基础教程》第十一章文件和第十六章测试
3.学习性能分析相关内容:https://blog.csdn.net/u011596455/article/details/82888906
(二)学习日志

三、计算模块的设计和实现过程
程序参考《python程序语言设计》课程第六周组合数据类型课程实例:统计哈姆雷特词频
https://www.icourse163.org/learn/BIT-268001?tid=1450323450#/learn/content?type=detail&id=1214623055&cid=1218431250
(一)计算模块设计
1.文本导入处理:用于将指定的txt文档导入程序,同时处理文档中存在的标点符号;
2.统计文本的词数和行数;
3.统计文本中的单词及出现的次数,输出前十位的单词
(二)实现过程
1.文本导入处理:
1.1使用.read()方法将文本读取成一个字符串;
1.2由于文本中单词存在大小写,使用.lower()将文本处理成全部为小写进行统计;
1.3文本中标点符号使用.replace()方法进行替换,使用for 函数将指定的符号全部转换为空格;
2.统计文本的词数和行数:
2.1使用.readlines()方法将文本处理成列表,直接输出列表的长度就是行数;
2.2将上一步建立的字符串使用.split()方法变为一个列表,输出列表长度就是单词数量
3.统计单词:
3.1使用字典,将单词的名称和数量转换为一个键值对关系;
3.2使用for函数遍历整个列表,对单词进行统计。如果单词已经在键中,增加对应值;如果单词没在键中,就新增加一个键;
3.3将处理的字典使用.items返回一个键值对元组,使用list转换为一个列表
3.4对列表进行指定列进行排序,使用.sort()
3.5使用for进行打印输出
测试文本:https://files.cnblogs.com/files/juking/Gone_with_the_wind.rar
部分程序:

结果:

四、单元测试及异常处理
根据前面的分析,程序主要包括三个模块,应当根据各个模块的功能分别写出单元测试,包括导入文件、计算行数和单词词频统计排序。
进行了单元测试的编写尝试,但在具体编写中,由于水平和时间有限,未完成本内容。
五、性能分析:
参考资料:https://blog.csdn.net/u011596455/article/details/82888906


(一)结果分析:
从结果中可以看到在导入文本大小为2.25M的Gone_with_the_wind时,总共耗时444ms,占用时间较多的部分为调用getTXT和lineTXT函数,各占108ms,24.3%和57ms,12.8.0%。
(二)改进措施:
getTXT和lineTXT函数将分别将文本各导入了一次,导入工作重复进行,可以将两个函数进行整合以减少运行时间。
(三)改进分析:


改进后为395ms,getTXT函数占用134ms,33.9%,减少了运行时间。
(四)后续:
由于导入的文本大小为 几个MB,如果导入更大的文本时需要改进现在采用的一次性导入的方式,采取逐行导入的方式进行边导入边处理。
六、学习体会
1.基本掌握了python中数据类型的处理方法,掌握了文件的操作方法;
2.巩固复习了单人软件开发流程的知识,但离真正熟练运用还有很大差距;
3.学习了性能分析的工具,初步掌握性能分析的方法;
4.单元测试掌握不好,编写测试程序困难,需要在后面进一步针对性学习;
5.部分作业要求,例如:封装等未能完成,主要是因为知识水平受限,实践不够充分。

浙公网安备 33010602011771号