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.部分作业要求,例如:封装等未能完成,主要是因为知识水平受限,实践不够充分。

 

posted @ 2020-11-17 10:31  badtemper  阅读(120)  评论(0)    收藏  举报