第一次个人编程作业
| 这个作业属于哪个课程 | https://edu.cnblogs.com/campus/gdgy/Class78-Grade2024-CS |
|---|---|
| 这个作业要求在哪里 | https://edu.cnblogs.com/campus/gdgy/Class78-Grade2024-CS/homework/15702 |
| 这个作业的目标 | 设计一个论文查重算法用以查询重复率,并将程序上传至github |
本次作业的github链接:https://github.com/Joker-Deng/Joker-Deng/tree/main/3124004465/Project1
程序设计思路
我使用c++语言以及N-gram文本处理、Jaccard相似度的理论设计了论文查重的算法。
1、文件处理
使用了c++的fstream文件处理库,读取文件中的文本并以string类型存储,以及后续对查重率的导出。
2、N-gram文本处理
先对文本进行处理,去除标点符号的影响,再将其以滑动窗口的形式分成数个元组,用以下一步的重复文本分析。
3、Jaccard相似度计算
通过上一步的元组分组,可以便捷地分析两段文本的交集及并集的字符个数,进而计算出两段文本的相似度,即查重率。
性能分析图

单元测试

异常测试
1、无效输入路径

2、空文本

3、重复文本

附录
本次作业是我第一次尝试规范地设计代码、分析性能,但感觉还是有些疏漏,对vs的性能分析器还不够了解。此外,通过这次作业我了解到文本查重的一些基础知识,这是我过去完全不了解的。
PSP表
| Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|
| 计划 | 5 | 5 |
| 估计这个任务需要多少时间 | 3 | 5 |
| 开发 | 30 | 40 |
| 需求分析 (包括学习新技术) | 30 | 45 |
| 生成设计文档 | 10 | 10 |
| 设计复审 | 5 | 5 |
| 代码规范 (为目前的开发制定合适的规范) | 3 | 3 |
| 具体设计 | 15 | 20 |
| 具体编码 | 45 | 60 |
| 代码复审 | 5 | 10 |
| 测试(自我测试,修改代码,提交修改) | 15 | 30 |
| 报告 | 15 | 20 |
| 测试报告 | 15 | 30 |
| 计算工作量 | 5 | 7 |
| 事后总结, 并提出过程改进计划 | 5 | 10 |
| 合计 | 206 | 300 |

浙公网安备 33010602011771号