个人编程项目:论文查重系统
课程 | 软件工程 |
---|---|
要求 | 个人项目作业 |
题目 | 论文查重系统 |
GitHub 链接:https://github.com/EmmaZoeLeft/3218004633.git |
要求规范
输入输出采用文件输入输出。按照传递命令行参数的方式提供文件的位置,从指定的位置读取文件,并向指定的文件输出答案。
- 从命令行参数给出:论文原文的文件的绝对路径。
- 从命令行参数给出:抄袭版论文的文件的绝对路径。
- 从命令行参数给出:输出的答案文件的绝对路径。
示例:java -jar main.jar C:\tests\org.txt C:\tests\org_add.txt C:\tests\ans.txt
注意:答案文件中输出的答案为浮点型,精确到小数点后两位
环境
Eclipse 2020 + JDK 1.8
具体实现
-
结巴分词:使用了 HFUTUtils 工具程序集合中的结巴分词jar包来处理文本,分词后去除了常见停用词
-
最小编辑距离:最小编辑距离,是指两个字串之间,由一个转成另一个所需最小的编辑操作次数。编辑操作包含:插入、删除和替换三种操作。
类及接口
- Main.java:主类,调用以下类
- textSplit.java:分词
- EditDistance.java:最小编辑距离算法
- io.java:读写类
- NullTextException.java:空文本异常抛出
单元测试
eclipse 自带的 JUnit5
- 逐个文本测试
orig_0.8_add.txt测试结果
orig_0.8_del.txt测试结果
orig_0.8_dis_1.txt测试结果
orig_0.8_dis_10.txt测试结果
orig_0.8_dis_15.txt测试结果
- 一次多个文本测试
不断递归迭代会堆栈异常,故不可连续查重多个文本,应采用动态规划完成。
MainTest.java测试结果
性能测试
Main.java的性能测试
不存在程序内存泄漏严重的情况
5秒内给出了答案
占用的内存未超过2048MB
PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
Estimate | 估计这个任务需要多少时间 | 45 | 25 |
Development | 开发 | ||
Analysis | 需求分析 (包括学习新技术) | 720 | 660 |
Design Spec | 生成设计文档 | 120 | 30 |
Design Review | 设计复审 | 60 | 0 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 30 | 0 |
Design | 具体设计 | 120 | 240 |
Coding | 具体编码 | 720 | 1080 |
Code Review | 代码复审 | 240 | 360 |
Test | 测试(自我测试,修改代码,提交修改) | 720 | 240 |
Reporting | 报告 | ||
Test Repor | 测试报告 | 120 | 90 |
Size Measurement | 计算工作量 | 45 | 20 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 60 | 30 |
合计 | 3000 | 2775 |