作业2
- github链接
- 作业要求
| 这个作业属于哪个课程 | 课程 |
|---|---|
| 这个作业要求在哪里 | 要求 |
| 这个作业的目标 | 论文查重 |
- 需求分析
题目:论文查重
描述如下:
设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率。
原文示例:今天是星期天,天气晴,今天晚上我要去看电影。
抄袭版示例:今天是周天,天气晴朗,我晚上要去看电影。
要求输入输出采用文件输入输出,规范如下:
从命令行参数给出:论文原文的文件的绝对路径。
从命令行参数给出:抄袭版论文的文件的绝对路径。
从命令行参数给出:输出的答案文件的绝对路径。
我们提供一份样例,课堂上下发,上传到班级群,使用方法是:orig.txt是原文,其他orig_add.txt等均为抄袭版论文。
注意:答案文件中输出的答案为浮点型,精确到小数点后两位
-
开发环境
-
编程语言:Java
-
编程环境:IntelliJ IDEA 2023.3.5
-
PSP表格
| PSP | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|
| 计划(Planning) | 20 | 20 |
| 估计时间(Estimate) | 10 | 10 |
| 开发(Development) | 120 | 120 |
| 需求分析(Analysis) | 10 | 10 |
| 生成设计文档(Design Spec) | 20 | 10 |
| 设计复审(Design Review) | 10 | 5 |
| 代码规范(Coding Standard) | 10 | 12 |
| 具体设计(Design) | 10 | 10 |
| 具体编码(Coding) | 10 | 10 |
| 代码复审(Code Review) | 10 | 10 |
| 测试(Test) | 10 | 5 |
| 报告(Reporting) | 30 | 20 |
| 测试报告(Test Repor) | 10 | 5 |
| 计算工作量(Size Measurement) | 10 | 7 |
| 事后总结(Postmortem) | 10 | 5 |
| 合计 | 300 | 259 |
- 功能模块
程序主要分为以下几个功能模块:
-
文件读取模块:从用户指定的文件路径中读取两篇论文的内容。
-
文本处理模块:将文本转换为小写,并去除标点符号,生成词频向量。
-
相似度计算模块:基于余弦相似度算法,计算两篇论文的相似度。
-
结果判断模块:根据预设的相似度阈值(0.7),判断两篇论文是否存在相似性或抄袭。
-
结果输出模块:将检测结果写入用户指定的输出文件。
-
性能监控模块:记录并输出文件读取和相似度计算的耗时。
-
核心算法
余弦相似度计算: -
将两篇论文的文本转换为词频向量。
-
计算两个向量的点积和各自的范数。
-
使用余弦相似度公式计算相似度:dotProduct / (Math.sqrt(norm1) * Math.sqrt(norm2))。
-
如果相似度大于等于0.7,则认为两篇论文可能存在相似性或抄袭。
-
项目结构
![]()
-
性能分析
![]()

- 异常处理
![]()






浙公网安备 33010602011771号