这个作业属于哪个课程 | <软件工程2024 (广东工业大学)> |
---|---|
这个作业要求在哪里 | <个人项目> |
这个作业的目标 | <熟悉个人软件开发流程、熟悉各类工具的使用,学会用PSPG进行项目规划评估程序质量并优化程序> |
一、PHP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 20 | 35 |
· Estimate | · 估计这个任务需要多少时间 | 10 | 10 |
Development | 开发 | 920 | 810 |
· Analysis | · 需求分析 (包括学习新技术) | 240 | 120 |
· Design Spec | · 生成设计文档 | 60 | 40 |
· Design Review | · 设计复审 | 20 | 10 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 30 | 20 |
· Design | · 具体设计 | 60 | 40 |
· Coding | · 具体编码 | 240 | 300 |
· Code Review | · 代码复审 | 30 | 30 |
· Test | · 测试(自我测试,修改代码,提交修改) | 60 | 90 |
Reporting | 报告 | 60 | 70 |
· Test Repor | · 测试报告 | 30 | 20 |
· Size Measurement | · 计算工作量 | 30 | 20 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 60 | 50 |
合计 | 950 | 855 |
二、计算模块接口的设计与实现过程
2.1实现查重的核心算法
- simHsh
simHash也称为相似hash,是一种特殊的信息指纹,常用来比较文章的相似度。主要步骤如下:- 通过特征将文本分词;
- 再通过hash算法获取每个词的hash值;
- 接着通过hash生成结果,需要按照单词的权重形成加权数字串;
- 然后把上面各个单词算出来的序列值累加,合并成一个序列串;
- 最后降维得到simHash签名;
- 海明距离
- 将不同文本最终转换的两个simHash值对比,差异的位数即为“海明距离”
2.2类的设计
类名 | 功能 |
---|---|
txtOIUtil | 读写txt文件操作 |
simHashUtil | 计算simHash |
HammingUtil | 计算两个simHash值的海明距离 |
shortStringException | 处理文本过短异常 |
2.3 工具包的使用
- TokenizeEngine,根据用户引入的分词库的jar来自动选择用哪个库实现分词
解析文本并分词
//自动根据用户引入的分词库的jar来自动选择使用的引擎
TokenizerEngine engine = TokenizerUtil.createEngine();
//解析文本
String text = "这两个方法的区别在于返回值";
Result result = engine.parse(text);
//输出:这 两个 方法 的 区别 在于 返回 值
String resultStr = CollUtil.join((Iterator<Word>)result, " ");
- hanLp汉语言工具包
三、计算模块接口部分的性能改进
3.1 JProflier性能分析
3.2 消耗最大的函数
由于项目有大量对文章的文字进行权重以及通过hash算法获取文字hash值的操作,因此结合上图我们可以看到Float类以及hankcs汉语包所占内存较高。
四、计算模块部分单元测试展示
4.1 测试类模块
- 测试类模块
- 测试结果
- 测试类覆盖率
五、计算模块部分异常处理说明
文本过短时,需要使用shortStringException来抛出异常。
结果如下: