软工作业2-个人项目
1.作业概要
| 这个作业属于哪个课程 | [软件工程】(https://edu.cnblogs.com/campus/gdgy/CSGrade21-34) |
|---|---|
| 这个作业要求在哪里 | https://edu.cnblogs.com/campus/gdgy/CSGrade21-34/homework/13023 |
| 这个作业的目标 | <设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率> |
| Github链接 | https://github.com/bayer12/3121005247 |
2.PSP表格
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 60 | 60 |
| · Estimate | · 估计这个任务需要多少时间 | 600 | 680 |
| Development | 开发 | 180 | 150 |
| · Analysis | · 需求分析 (包括学习新技术) | 60 | 130 |
| · Design Spec | · 生成设计文档 | 30 | 20 |
| · Design Review | · 设计复审 | 20 | 32 |
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 20 | 33 |
| · Design | · 具体设计 | 20 | 37 |
| · Coding | · 具体编码 | 90 | 78 |
| · Code Review | · 代码复审 | 30 | 46 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 30 | 44 |
| Reporting | 报告 | 30 | 28 |
| · Test Repor | · 测试报告 | 15 | 18 |
| · Size Measurement | · 计算工作量 | 15 | 26 |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 15 | 20 |
| · 合计 | 1215 | 1402 |
3.接口的设计及实现过程
FileUtil类
readFile()和writeFile()分别用于文件的读取和写入
TokenizerUtil类
CountWord()用于分词,CountCos()用于计算文本相似度
FileException类
自定义异常类,对File类的抛出异常进行封装
算法分析
假定a向量是[x1, y1],b向量是[x2,y2],那么可以将余弦定理改写成下面的形式:

对文章进行分词,统计词频,并记录每个词的位置信息,将两者作为向量的x和y带入余弦定理公式即可计算出文本相似度
4.性能分析和改进


5.计算模块部分单元测试展示
@Test
public void TestDIY(){
String path = "D:\\测试文件\\01.txt";
String path2 = "D:\\测试文件\\02.txt";
Map<String, List<Integer>> stringListMap = TokenizerUtil.CountWord(path);
Map<String, List<Integer>> stringListMap2 = TokenizerUtil.CountWord(path2);
String sRsult = TokenizerUtil.CountCos(stringListMap, stringListMap2);
FileUtil.writeFile("D:\\测试文件\\answer\\ans.txt",String.valueOf(sRsult));
System.out.println(sRsult);
}
}

@Test
public void addTest(){ //原文本和抄袭文本
String path = "D:\\测试文件\\orig.txt";
String path2 = "D:\\测试文件\\orig_0.8_add.txt";
Map<String, List<Integer>> stringListMap = TokenizerUtil.CountWord(path);
Map<String, List<Integer>> stringListMap2 = TokenizerUtil.CountWord(path2);
String sRsult = TokenizerUtil.CountCos(stringListMap, stringListMap2);
FileUtil.writeFile("D:\\测试文件\\answer\\ans.txt",String.valueOf(sRsult));
System.out.println(sRsult);
}

@Test
public void NullpointTest(){
String path = "D:\\测试文件\\123.txt";
String path2 = "D:\\测试文件\\000.txt";
Map<String, List<Integer>> stringListMap = TokenizerUtil.CountWord(path);
Map<String, List<Integer>> stringListMap2 = TokenizerUtil.CountWord(path2);
String sRsult = TokenizerUtil.CountCos(stringListMap, stringListMap2);
FileUtil.writeFile("D:\\测试文件\\answer\\ans.txt",String.valueOf(sRsult));
System.out.println(sRsult);
}

6.测试覆盖率


浙公网安备 33010602011771号