天天看点

第一次个人编程作业

https://github.com/caiwx123/Caiwx123/tree/main/031902501

一、PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 10
· Estimate · 估计这个任务需要多少时间
Development 开发 730 910
· Analysis · 需求分析 (包括学习新技术) 300 360
· Design Spec · 生成设计文档
· Design Review · 设计复审
· Coding Standard · 代码规范 (为目前的开发制定合适的规范)
· Design · 具体设计
· Coding · 具体编码 180 240
· Code Review · 代码复审 30
· Test · 测试(自我测试,修改代码,提交修改)
Reporting 报告
· Test Repor · 测试报告
· Size Measurement · 计算工作量
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划
· 合计 770 950

二、计算模块接口

(3.1)计算模块接口的设计与实现过程。设计包括代码如何组织,比如会有几个类,几个函数,他们之间关系如何,关键函数是否需要画出流程图?说明你的算法的关键(不必列出源代码),以及独到之处。(18')

一共有两个类

第一个类为结点类,就是单纯的设置结点的一些属性

第二个类为AC机类,其中包括四个函数,其中前3个是关键函数,其中最关键的是函数1。

函数1:ac_build(f)用于从文件路径f中读出敏感词文件并建立ac自动机,其中在建立树时一个敏感词的单个中文我是建了不止一个结点例如 ’法‘字我建成了 ‘fa’ 与 ‘f’->'a',这样就可以将原文中的中文搜索与英文单词的搜索分开可防止将中文与英文字母混起来造成一些错误例如:’’白吃‘‘与’’b爱吃‘‘如果不加入中文的全拼音结点的话这两个词将被认为是一样的。

第一次个人编程作业

函数2:search(f)用于从文件路径f中找寻敏感词

函数3:out_f(out_file)向文件路径out_file所对的文件中输出答案

函数4:c_pinyin(c)将中文转成拼音

函数5:put_in(j, word, word_in_txt)将敏感词及一些需要输出的东西存储起来

(3.2)计算模块接口部分的性能改进。记录在改进计算模块性能上所花费的时间,描述你改进的思路,并展示一张性能分析图(由VS 2019、JProfiler或者Jetbrains系列IDE自带的Profiler的性能分析工具自动生成),并展示你程序中消耗最大的函数。(12')

第一次个人编程作业

改进之前的性能如下图,可以看到使用pypinyin进行中文转拼音竟然是耗时最多的函数,所以我对他进行了改进。

第一次个人编程作业

通过在AC机的类中定义一个字典pinyin用于存储已经翻译过的字及其他所对应的拼音这样就可以方法对于一个词反复的去进行调用pypinyin(),改进之后pypinyin的耗时从0.038s下降到了0.011s,而消耗最大的函数也变为了 search()敏感词搜索函数。

(3.3)计算模块部分单元测试展示。展示出项目部分单元测试代码,并说明测试的函数,构造测试数据的思路。并将单元测试得到的测试覆盖率截图,发表在博客中。(12')

第一次个人编程作业

(3.4)计算模块部分异常处理说明。在博客中详细介绍每种异常的设计目标。每种异常都要选择一个单元测试样例发布在博客中,并指明错误对应的场景。(6')

异常1:用于解决文件的读取异常

第一次个人编程作业

样例1:

第一次个人编程作业

异常2:用于解决命令行输入参数个数不对

第一次个人编程作业
第一次个人编程作业

三、心得

(4.1)在完成本次作业过程的心得体会(3')

1.学习了AC自动机算法

继续阅读