论文查重系统
软件工程 | 所在班级 |
---|---|
作业要求 | [要求]((个人项目 - 作业 - 计科21级12班 - 班级博客 - 博客园 (cnblogs.com))) |
作业目标 | 论文查重系统,并优化代码,了解项目开发流程 |
GitHub仓库地址
PSP阶段 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 40 | 40 |
Estimate | 估计这个任务需要多少时间 | 350 | 350 |
Development | 开发 | 100 | 90 |
Analysis | 需求分析 (包括学习新技术) | 30 | 10 |
Design Spec | 生成设计文档 | 30 | 30 |
Design Review | 设计复审 | 10 | 10 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 10 | 10 |
Design | 具体设计 | 30 | 20 |
Coding | 具体编码 | 150 | 200 |
Code Review | 代码复审 | 30 | 20 |
Test | 测试(自我测试,修改代码,提交修改) | 150 | 190 |
Reporting | 报告 | 100 | 110 |
CodingTest Repor | 测试报告 | 60 | 50 |
Size Measurement | 计算工作量 | 30 | 20 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 20 | 15 |
合计 | 1140 | 1165 |
设计与实现
流程图
结构
主要函数
分词-提取关键字
public static List<String> getString(String data,boolean useSmart) {
List<String> result=new ArrayList();
try {
//创建分词对象 true则按照最大长度划分,false则划分出所有可以划分的词
Analyzer anal = new IKAnalyzer(useSmart);
StringReader reader = new StringReader(data);
//记录分词数据
TokenStream ts = anal.tokenStream("", reader);
CharTermAttribute term = ts.getAttribute(CharTermAttribute.class);
//遍历分词数据
ts.reset();
while (ts.incrementToken()) {
result.add(term.toString());
}
ts.close();
reader.close();
} catch (Exception e) {
e.printStackTrace();
}finally {
return result;
}
}
获取simHash
public static String getSimHash(String date){
//用数组表示特征向量,取128位,从0位开始表示从高位到低位
int[] arr = new int[128];
List<String> Ikstring = ikF.getString(date, false);
int size = Ikstring.size();
int i=0;
for (String s : Ikstring) {
//获取hash值
String hash = getHash(s);
if(hash.length()<128){
int num=128-hash.length();
for(int j=0;j<num;j++){
hash+="0";
}
}
//加权合并
for(int j=0;j<arr.length;j++){
if(hash.charAt(j)=='1'){
//权重分10级,由词频从高到低,取权重10~0
arr[j] += (10 - (i / (size / 10)));
}else{
arr[j] -= (10 - (i / (size / 10)));
}
}
i++;
}
//降维
StringBuilder sb=new StringBuilder();
for(int j=0;j<arr.length;j++){
if(arr[j]<=0){
sb.append("0");
}else{
sb.append("1");
}
}
return sb.toString();
}
运行结果
单元测试
异常处理
文件类型不正确则抛出异常