第一次个人编程作业
个人作业——论文查重
课程地址 | https://edu.cnblogs.com/campus/gdgy/CSGrade21-12 |
---|---|
作业要求 | https://edu.cnblogs.com/campus/gdgy/CSGrade21-12/homework/13014 |
作业目标 | 了解论文查重机理; Git与GitHub的链接使用;深刻体会个人开发流程 |
Github仓库地址 https://github.com/Firdavis99/iskilat/blob/main/3119000416
PSP表
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟 | 实际耗时(分钟 |
---|---|---|---|
Planning | 计划 | 20 | 40 |
Estimate | 估计这个任务需要多少时间 | 20 | 20 |
Development | 开发 | 120 | 150 |
Analysis | 需求分析 (包括学习新技术) | 120 | 160 |
Design Spec | 生成设计文档 | 40 | 20 |
Design Review | 设计复审 | 20 | 10 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范 | 50 | 20 |
Design | 具体设计 | 60 | 60 |
Coding | 具体编码 | 180 | 300 |
Code Review | 代码复审 | 30 | 40 |
Test | 测试(自我测试,修改代码,提交修改) | 80 | 120 |
Reporting | 报告 | 40 | 70 |
Test Repor | 测试报告 | 30 | 45 |
Size Measurement | 计算工作量 | 15 | 15 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 10 | 10 |
Total | 合计 | 935 | 1080 |
计算模块接口部分的设计与实现过程
1.接口部分
2.流程图
4)关键算法具体实现过程
1.使用正则表达式模式[\u4e00-\u9fa5]+对原始文本和抄袭文本进行处理,去除标点符号,只保留中文字符。
2.将处理后的文本以字符串的形式存储,并赋值给original_text和copy_text变量。
3.使用结巴分词工具jieba对字符串进行分词,将原始文本和抄袭文本分别分词,并存储在original_words和copy_words列表中。
4.使用Simhash算法生成原始文本和抄袭文本的Simhash值。Simhash是一种用于计算文本相似度的算法。它将文本表示为一个固定位数的二进制数值,其中相似的文本具有较高的汉明距离,而不相似的文本具有较低的汉明距离。
5.计算原始文本和抄袭文本的海明距离(Hamming Distance),即Simhash值之间的汉明距离。海明距离表示两个Simhash值二进制表示中不同位的数量。
6.根据海明距离计算查重率(similarity),查重率的计算公式为:1 - (海明距离 / 64)。
性能分析
如上图所示,程序执行的时间为1.61s,其中将文本创建为正则表达式需要44.2MiB的,紧接着整个算法耗时最长以及占用内存最多的部分是进行分词算法,需要64.3 MiB。因此我们的算法优化可以从分词算法的优化进行。但受限于理论知识过少,目前笔者暂时未发现更好的算法。