一、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来抛出异常。
结果如下: