个人项目
1. 项目简介
本项目是论文查重项目,项目默认使用UTF-8编码,由于本项目的算法原因,两篇完全不同的重复率都有30%的重复率,经过多次测试,决定是以50%为界限,超过则判定抄袭。
查看我的gitCode仓库
查看我的博客
查看我的班级
2.需求分析
需求
- 给出两篇文章,查重,然后再答案文件输出重复率
- 要从命令行参数给出文件的路径(绝对路径)
- 答案精确到小数后两位
分析
可以用Scanner类获取路径,然后对文章的内容进行比对,以句子与句子来比对,获取最高的重复率,然后算取综合下来的平均数。
3.PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 10 | 10 |
Estimate | 估计这个任务需要多少时间 | 10 | 10 |
Development | 开发 | 90 | 120 |
Analysis | 需求分析(包括学习新技术) | 40 | 70 |
Design Spec | 生成设计文档 | 20 | 20 |
Coding Standard | 代码规范(为目前的开发指定合适的规范) | 10 | 10 |
Design | 具体设计 | 20 | 20 |
Coding | 具体代码 | 90 | 120 |
Code Review | 代码复审 | 30 | 40 |
Test | 测试(自我测试,修改代码,提交修改) | 30 | 50 |
Reporting | 报告 | 30 | 30 |
Test Report | 测试报告 | 20 | 20 |
Size Measurement | 计算工作量 | 20 | 20 |
Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 20 | 20 |
合计 | 410 | 530 |
4.接口的设计与实现
-
有三个类,Main,CheckRepeat,FileToString,其中Main类是主类,负责调用其他两个类实现查重功能,FileToString负责接收文件并把文件转化为字符串集合,CheckRepeat则是接收字符串集合进行查重。
-
FileToString有FileToString(),getFileArrayList()和split()方法
-CheckRepeat有CheckRepeat(),checkBySentence()和returnTwoStringRepetitionRate()方法 -
函数关系图
5.性能改进
- 性能分析图
6.单元测试展示
@Test
public void testFileToString(){
for (String s : filePath) {
new FileToString(s);
}
}
@Test
public void testCheckRepeat() {
for (int i = 0; i < filePath.length; i++) {
CheckRepeat.checkBySentences(new FileToString(filePath[i]).getFileArrayList(),
new FileToString(checkedFilePath[i]).getFileArrayList());
}
}
- 测试覆盖率
7.异常处理说明
- 本系统并没有自己设置的异常,但本系统非常专注于对IO流异常的处理
- 在FileToString中,在对文件的读取时,使用了try-catch-finally来启动和关闭数据流管道,这保证了即使输入的文件地址不对或无法访问都不会使程序出错。
- 在Main类中,使用了try-with-resources,简化代码的同时还可以使代码健壮性更好