作业2-个人项目
本次项目GitHub地址:https://github.com/Qian9761/Qian9761
作业2
| 工程概论 | 班级链接 |
|---|---|
| 作业要求 | 作业要求链接 |
| 作业目标 | 学习GitHub的使用,熟悉项目的开发的流程 |
需求
题目:论文查重
描述如下:
设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率。
原文示例:今天是星期天,天气晴,今天晚上我要去看电影。
抄袭版示例:今天是周天,天气晴朗,我晚上要去看电影。
要求输入输出采用文件输入输出,规范如下:
从命令行参数给出:论文原文的文件的绝对路径。
从命令行参数给出:抄袭版论文的文件的绝对路径。
从命令行参数给出:输出的答案文件的绝对路径。
我们提供一份样例,课堂上下发,上传到班级群,使用方法是:orig.txt是原文,其他orig_add.txt等均为抄袭版论文。
注意:答案文件中输出的答案为浮点型,精确到小数点后两位
开发环境
- 操作系统:64-bit Windows10
- 使用语言:java
- jdk版本:jdk1.8.0_181
- IDE:Eclipse
- 外部包:jieba-analysis-1.0.2.jar
PSP表
| *PSP2.1* | *Personal Software Process Stages* | *预估耗时(分钟)* | *实际耗时(分钟)* |
|---|---|---|---|
| Planning | 计划 | 20 | 20 |
| · Estimate | · 估计这个任务需要多少时间 | 70 | 60 |
| Development | 开发 | 30 | 35 |
| · Analysis | · 需求分析 (包括学习新技术) | 15 | 10 |
| · Design Spec | · 生成设计文档 | 20 | 20 |
| · Design Review | · 设计复审 | 30 | 30 |
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 10 | 10 |
| · Design | · 具体设计 | 10 | 8 |
| · Coding | · 具体编码 | 15 | 12 |
| · Code Review | · 代码复审 | 10 | 9 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 15 | 12 |
| Reporting | 报告 | 30 | 28 |
| · Test Repor | · 测试报告 | 10 | 8 |
| · Size Measurement | · 计算工作量 | 15 | 7 |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 15 | 10 |
| · 合计 | 315 | 279 |
计算模块接口的设计与实现过程
流程图

readfile方法
字节流从指定路径读取文件
WordFrequency方法
统计词频
CCS方法
计算余弦相似度
项目结构

计算模块接口部分的性能改进


消耗最大的函数:readfile
改进方法:改成静态方法,在第一次使用时初始化,直接调用可以省略创建对象的过程,提高程序性能。
计算模块部分单元测试展示
余弦相似度算法
private static double CCS(Map<String, Integer> hash1, Map<String, Integer> hash2) {
double numerator = 0.0;
double n1 = 0.0;
double n2 = 0.0;
for (String word : hash1.keySet()) {
if (hash2.containsKey(word)) {
numerator += hash1.get(word) * hash2.get(word);
}
n1 += Math.pow(hash1.get(word), 2);
}
for (String word : hash2.keySet()) {
n2 += Math.pow(hash2.get(word), 2);
}
if (n1 == 0 || n2 == 0) {
return 0.0;
}
return numerator / (Math.sqrt(n1) * Math.sqrt(n2));
}
测试
文件1路径:
C:/Users/Qian/Desktop/test1.txt
文件2路径:
C:/Users/Qian/Desktop/test2.txt
文件1:今天星期三,要进行卫士大检查,请大家打扫好卫生
文件2:今天是周三,我们要打扫好卫士准备卫生检查
输出结果路径:
C:/Users/Qian/Desktop/test3.txt
main dict load finished, time elapsed 438 ms
model load finished, time elapsed 16 ms.
相似度为:0.61

结果:

测试覆盖率:

计算模块部分异常处理说明
写文件异常处理
try {
file = new FileOutputStream(resultpath);
byte[] bs = result1.getBytes();
file.write(bs);
file.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
读文件异常处理
try (FileInputStream fis=new FileInputStream(f)){
byte[] bytes=new byte[(int) f.length()];
fis.read(bytes);
// window记事本默认编码方式是gbk,如果保存文件以UTF-8保存,便以UTF-8读出
// String str = new String(bytes,"GBK");
str = new String(bytes,"UTF-8");
System.out.println("文件"+i+":"+str);
} catch (Exception e) {
// TODO: handle exception
}
浙公网安备 33010602011771号