第一次个人编程作业——论文查重
论文查重
| 这个作业属于哪个课程 | 2023软件工程-双学位 (广东工业大学 - 计算机学院 |
|---|---|
| 这个作业的要求在哪 | 个人项目作业——论文查重 |
| 这个作业的目标 | 做一个简易个人项目 |
PSP表格
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 60 | 120 |
| ·Estimate | ·估计这个任务需要多长时间 | 180 | 150 |
| Development | 开发 | 500 | 600 |
| ·Analysis | ·需求分析(包括学习技术) | 400 | 700 |
| ·Design Spec | ·生成设计文档 | 30 | 30 |
| ·Design Review | ·设计复审 | 90 | 180 |
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 30 | 40 |
| · Design | · 具体设计 | 60 | 80 |
| · Coding | · 具体编码 | 180 | 200 |
| · Code Review | · 代码复审 | 180 | 180 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 120 | 180 |
| Reporting | 报告 | 60 | 80 |
| · Test Repor | · 测试报告 | 60 | 50 |
| · Size Measurement | · 计算工作量 | 40 | 60 |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 60 | 150 |
| · 合计 | 2030 | 2800 |
目录
- gitcode地址
- 基本框架
- 关键代码
- 运行结果
- 部分测试展示
Gitcode地址:
git@gitcode.net:m0_64861143/3120001827.git
基本框架

关键代码
//求距离
public class HammingDistance {
public static int getHammingDistance(String simHash1, String simHash2){
int D = 0; //距离
if (simHash1.length() != simHash2.length())
D = -1;
else {
//bitset不行
for (int i=0; i<simHash1.length(); i++){
//按位比较
if (simHash1.charAt(i)!=simHash2.charAt(i))
D++;
}
}
return D;
}
public class CalculateSimilar {
public static double getSimilar(Reader reader, Reader reader1) throws IOException {
IKSegmenter ikSegmenter = new IKSegmenter(reader,true);
IKSegmenter ikSegmenter1 = new IKSegmenter(reader1,true);
Map<String, Integer> fre = getFrequency(ikSegmenter);
Map<String, Integer> fre1 = getFrequency(ikSegmenter1);
//利用words1将两个文本都合在一起,采用HashSet就是为了去重;
Set<String> words1 = new HashSet<>(); //T(A, B)
words1.addAll(fre.keySet());
words1.addAll(fre1.keySet());
Vector<Integer> FA = new Vector<>();
Vector<Integer> FB = new Vector<>();
//构造比较文本的特征向量
for (String s : words1){
if (fre.get(s)!=null){
FA.add(fre.get(s));
}else
FA.add(0);
if (fre1.get(s)!=null)
FB.add(fre1.get(s));
else
FB.add(0);
}
//利用余弦进行相似度计算
int sumA = 0;
int sumB = 0;
int sumAB = 0;
for (int i=0;i<words1.size();i++){
int a = FA.get(i);
int b = FB.get(i);
sumAB += a*b;
sumA += a*a;
sumB += b*b;
}
运行结果

部分测试展示

总结:对于本次项目经历,有很多东西都是从小白开始学习,实际上,花费的时间比PSP表上的更多,PSP表上的耗时并不准确,因为没有办法
分清各部分的归属。在本次的经历中,认识到自身的不足,还需加强对做项目的能力。

浙公网安备 33010602011771号