个人项目:论文查重
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/gdgy/Networkengineering1834 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/gdgy/Networkengineering1834/homework/11146 |
这个作业的目标 | 学习使用PSP表格,使用git管理项目 |
一、模块接口的设计与实现过程
该项目实现语言为Java,jdk版本为jdk11,编译器为idea
1.1项目结构
主要类
simhash算法实现类
余弦相似度算法实现类
程序运行入口
1.2实现过程以及改进
1.2.1 simhash算法
实现关键:采用simhash算法来计算文本相似度,需要计算得到汉明距离
-
最后由公式
,将汉明距离带入x即可计算出文本相似度
-
不足:在开发测试的过程中发现simhash算法在短文本上有着很大缺陷,比如由作业中的文本示例:
-
原文示例:今天是星期天,天气晴,今天晚上我要去看电影。
-
抄袭版示例:今天是周天,天气晴朗,我晚上要去看电影。
-
经过simhash算法计算所得文本相似度为约为0.00000007,可见若对短文本使用simhash算法将会带来较大偏差,因此在查询资料后,决定对于短文本使用余弦相似度算法
1.2.2 余弦相似度算法
算法关键:对比文本分词得到词表、合并去重、计算特征值并向量化、计算余弦值
1.3异常处理
考虑到可能会出现比较空文本的情况,由于这种情况的操作属于没有意义的,因此自定义了空文本异常。
同时,程序中输入路径部分,对于不存在文件的路径进行了限制以此完善程序健壮性
二、计算模块结构接口部分的性能改进
性能分析:
类内存消耗:绝大部分消耗在了分词
四、计算模块部分单元测试展示
sim算法单侧:
余弦相似度算法单测:
特殊情况(空文本)情况单测:
以下为测试代码覆盖情况:
三、程序运行展示
程序运行入口:
运行过程:
运行结果:
四、PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 40 | 30 |
· Estimate | · 估计这个任务需要多少时间 | 5 | 5 |
Development | 开发 | 240 | 150 |
· Analysis | · 需求分析 (包括学习新技术) | 300 | 360 |
· Design Spec | · 生成设计文档 | 30 | 90 |
· Design Review | · 设计复审 | 30 | 30 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 30 | 10 |
· Design | · 具体设计 | 120 | 60 |
· Coding | · 具体编码 | 240 | 200 |
· Code Review | · 代码复审 | 60 | 30 |
· Test | · 测试(自我测试,修改代码,提交修改) | 60 | 90 |
Reporting | 报告 | 40 | 100 |
· Test Repor | · 测试报告 | 20 | 20 |
· Size Measurement | · 计算工作量 | 15 | 10 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 120 | 60 |
· 合计 | 1350 | 1245 |