个人项目
| 这个作业属于哪个课程 | 课程链接 |
|---|---|
| 这个作业要求在哪里 | 作业要求 |
| 这个作业的目标 | 学习论文查重算法和工程项目的实现 |
Github仓库连接
类与接口设计
-
PaperCheck类,调用该类的paperCheck()方法并传入原文章与抄袭文章得出文章相似度
-
FileUtils类,调用该类的readFile()接口,用于读取文件
-
MergeSortInversePairs类,调用内部方法mergeSort()内部实现对序列归并排序并计算出逆序对
对应的接口调度流程图
graph TD
A[命令行参数解析] --> B[参数校验]
B --> C{参数合法?}
C --> |是| D[读取原文文件]
C --> |否| E[输出错误信息]
D --> F[读取抄袭版文件]
F --> G[文本预处理]
G --> H[计算相似度]
H --> I[写入结果文件]
I --> J[程序结束]
E --> J
PSP表格
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 50 | 60 |
| Estimate | 估计这个任务需要多少时间 | 350 | 400 |
| Development | 开发 | 400 | 420 |
| Analysis | · 需求分析 (包括学习新技术) | 250 | 280 |
| Design Spec | 生成设计文档 | 140 | 120 |
| Design Review | Design Review | 35 | 20 |
| Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 25 | 20 |
| Design | 具体设计 | 150 | 190 |
| Coding | · 具体编码 | 170 | 280 |
| · Code Review | · 代码复审 | 70 | 65 |
| Test | · 测试(自我测试,修改代码,提交修改) | 70 | 800 |
| Reporting | 报告 | 70 | 90 |
| Test Repor | 测试报告 | 50 | 65 |
| Size Measurement | 计算工作量 | 15 | 15 |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 10 | 10 |
| 合计 | 1870 | 2560 |
涉及到的核心算法设计
1.读取原文文件和抄袭版论文文件的内容。
2.使用分词器对原文和抄袭版进行分词,并得到各自的分词序列。
3.提取原文和抄袭版的公共分词,得到公共分词序列。
4.对抄袭版文章的分词序列进行归并排序,并计算逆序对的个数。
5.计算相似度公式:相似度S = (正序对 - 逆序对) / 正序对。
6.将相似度结果写入答案文件。
异常处理
- 开始运行时判断命令行参数是否符合参数
//检查参数个数
if (args.length != 3){
System.out.println("参数个数错误或文件路径不正确!\n");
return;
}
//判断参数文件是否以.txt结尾
for(String index : args){
if(!index.endsWith(".txt")){
System.out.println("文件格式错误!\n");
return;
}
}
- 读取文件时判断文件路径是否正确
try {
double result = check.paperCheck(args[0], args[1], args[2]);
System.out.printf("%s 文章查重率:%.2f%% \n",args[1],result * 100);
//将结果result写入args[2]的文件路径中
writeResultToFile(args[2], result);
} catch (IOException e){
LOGGER.error("文件打开失败", e);
}
测试结果

性能
- (采用了Java自带的命令行性能分析工具)


浙公网安备 33010602011771号