第一次个人编程作业
| 这个作业属于哪个课程 | https://edu.cnblogs.com/campus/gdgy/CSGrade22-12 |
|---|---|
| 这个作业要求在哪里 | https://edu.cnblogs.com/campus/gdgy/CSGrade22-12/homework/13220 |
| 这个作业的目标 | 设计论文查重,学会用github管理代码,学会测试程序的性能 |
github链接:https://github.com/icindyscode/firstRepository/tree/main
一、PSP表格
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 20 | 20 |
| · Estimate | · 估计这个任务需要多少时间 | 20 | 20 |
| Development | 开发 | 400 | 600 |
| · Analysis | · 需求分析 (包括学习新技术) | 40 | 120 |
| · Design Spec | · 生成设计文档 | 20 | 20 |
| · Design Review | · 设计复审 | 10 | 20 |
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 10 | 20 |
| · Design | · 具体设计 | 60 | 40 |
| · Coding | · 具体编码 | 140 | 230 |
| · Code Review | · 代码复审 | 60 | 30 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 60 | 120 |
| Reporting | 报告 | 200 | 240 |
| · Test Repor | · 测试报告 | 160 | 180 |
| · Size Measurement | · 计算工作量 | 20 | 20 |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 20 | 40 |
| 合计 | 620 | 820 |
二、模块接口的设计与实现过程
类与方法:
Main():
主类,里面有主函数,可以传入参数,即需要查重的文件的路径。从文件中读取需要查重的文件,并且创建Compute类的实例对象,调用类中的计算查重率的方法ifPlagiarism。将查重率写入文件。
Compute():
计算查重率的类,有如下方法及其功能:
- participleNlp(String context):将字符串分词,并且分此后返回list;
- participleNlpToTerm(String context):将字符串分词,并且分词后返回term;
- calculateCosSimilarity(Map<String, Integer> vec1, Map<String, Integer> vec2):计算余弦相似度
- calculateCosSimilarity(String context1, String context2):计算余弦相似度
- ifPlagiarism(String context1, String context2, double threshold):对比 输出重复率
- ifPlagiarism(String context1, String context2):对比 阈值为0.7 重复率小于0.7输出false即不抄袭 大于0.7则输出true判定为抄袭
算法分析
算法核心原理:
用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小的度量。余弦值越接近1,就表明夹角越接近0度,也就是两个向量越相似。
计算过程:
先分词,运用ansj分词器;然后计算两篇文章的余弦值相似度,并且求出查重率,设置一个阈值,判断是否抄袭。
独到之处
- 使用了ansj分词器,能很好地对于中文内容分词。增加了查重率的准确性。
- 使用了余弦相似度算法,简洁明了,代码量少。
三、模块部分单元测试展示
orig_0.8_dis_15.txt

可以看到result.txt中输入了查重率,以下的测试用例都相同,则不展示result.txt

orig_0.8_add.txt

orig_0.8_del.txt

orig_0.8_dis_1

四、模块部分异常处理说明
若输入的路径不存在,则会提醒


浙公网安备 33010602011771号