第一次个人编程作业

https://github.com/929580032/031902123

一、PSP表格

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

二、计算模块接口

  • (3.1)计算模块接口的设计与实现过程

    • 类和主要函数

      class WordNode:用来存储DFA树的节点。
      class FilterSet:枚举了0~65535的所有char,判断当前字符是否是敏感词开头。
      class WordFilter:用来过滤待检测文件的类。
      class FileUtil:用来读写文件
      class PinYinConvert:导入jar包pinyin4j来获取汉字小写全拼和获取汉字拼音首字母
      class BCConvert:用来实现全角/半角转换
      WordFilter中的主要函数:
      函数init:初始化,获取敏感词文件和停顿词(当遍历到停顿词时直接跳过,解决敏感词中插入字符的情况)
      函数sensitiveWordCombination:递归生成敏感词各种排列组合变形
      函数addSensitiveWord:根据敏感词组合添加DFA树的节点
      函数doFilter:遍历待检测文件,记录结果

    • 算法

      在实现文字过滤的算法中,DFA是比较好的实现算法。DFA 即 Deterministic Finite Automaton,也就是确定有穷自动机,它是是通过event和当前的state得到下一个state,即event+state=nextstate。
      下面我用Java中的HashMap为例来实现DFA算法。
      以“黄片”为例
      1、在hashMap中查询“黄”看其是否在hashMap中存在,如果不存在,则证明已“黄”开头的敏感词还不存在,则我们直接构建这样的一棵树。跳至3。
      2、如果在hashMap中查找到了,表明存在以“卖”开头的敏感词,设置hashMap = hashMap.get(“黄”),跳至1,依次匹配“片”。
      3、判断该字是否为该词中的最后一个字。若是表示敏感词结束,设置标志位 isEnd = 1,否则设置标志位 isEnd = 0;

  • (3.2)计算模块接口部分的性能改进


发现消耗最大的是遍历待检测文件的函数。在内存空间占用上,由于函数中频繁地对String进行插入操作,每一次对String的插入操作,String都会在字符串常量池创建对象,所以可以改为用StringBuilder,这样可以占用更少的内存空间。

  • (3.3)计算模块部分单元测试展示

    sensitiveWordCombination函数测试:判断是否能够正确生成预期的敏感词排列组合。

    doFilter函数测试:测试部分过滤结果是否正确。
  • (3.4)计算模块部分异常处理说明

    当文件路径格式不正确时会在控制台上打印错误信息和错误提示。

三、心得

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

    花了好几天才慢慢完成了这个作业,虽然过程很痛苦,很折磨,但是自己也从中学到了不少东西,学会了Maven工具的使用,如何打包成jar包,获取命令行参数等等。每天不断改善自己的代码,当自己离结果更进一步的时候,自己也会有很强的成就感和满足感
posted @ 2021-09-16 21:50  断了的弦丿  阅读(38)  评论(0)    收藏  举报