第一次编程作业
Github链接:https://github.com/evaxusong/evaxusong(github上不去还未能够上传)
作业要求:
| 这个作业属于哪个课程 | 工程概论 |
|---|---|
| 这个作业要求在哪里 | 作业要求 |
| 这个作业的目标 | 学习进行Github项目管理 实现论文查重功能 |
需求分析
题目:论文查重
描述如下:
设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率。
原文示例:今天是星期天,天气晴,今天晚上我要去看电影。
抄袭版示例:今天是周天,天气晴朗,我晚上要去看电影。
要求输入输出采用文件输入输出,规范如下:
从命令行参数给出:论文原文的文件的绝对路径。
从命令行参数给出:抄袭版论文的文件的绝对路径。
从命令行参数给出:输出的答案文件的绝对路径。
我们提供一份样例,课堂上下发,上传到班级群,使用方法是:orig.txt是原文,其他orig_add.txt等均为抄袭版论文。
注意:答案文件中输出的答案为浮点型,精确到小数点后两位
编码环境:
操作系统:windows11
ide:idea java11
代码设计:
我定义了两个文档的路径,这些路径是用来读取要比较的两个文本文档的。
在 main 方法中,我们首先调用 readDocument 方法来读取这两个文档的内容,并将其存储在字符串变量 document1 和 document2 中。
我们调用 calculateSimilarity 方法来计算两个文档的相似度,并将结果存储在 similarity 变量中。
再打印出计算得到的相似度结果。
代码中使用的文本查重算法是基于 Jaccard 系数的。具体算法如下:
先通过tokenize方法将文档内容分词,将每个单词作为词元,并将其存储在一个 Set 集合中。
创建两个 Set 集合 words1 和 words2,分别存储文档1和文档2的词元集合。
计算这两个集合的交集 intersection,即同时存在于两个文档中的词元。
计算这两个集合的并集 union,包括两个文档中所有的词元。
我们计算相似度值,即交集的大小除以并集的大小,得到一个范围在 0 到 1 之间的相似度值。相似度越高,表示两个文档越相似。
测试截图:


PSP表格:
| PSP2.1 | Personal Software Process Stages | 预估耗时(min) | 实际耗时(min) |
|---|---|---|---|
| Planning | 计划 | 10 | 10 |
| Estimate | 估计这个任务需要多少时间 | 10 | 6 |
| Development | 开发 | 50 | 50 |
| Analysis | 需求分析 (包括学习新技术) | 120 | 100 |
| Design Spec | 生成设计文档 | 2 | 2 |
| Design Review | 设计复审 | 10 | 10 |
| Coding Standard | 代码规范 | 25 | 20 |
| Design | 具体设计 | 10 | 10 |
| Coding | 具体编码 | 20 | 19 |
| Code Review | 代码复审 | 10 | 15 |
| Test | 测试 | 40 | 30 |
| Reporting | 报告 | 40 | 40 |
| Test Repor | 测试报告 | 10 | 10 |
| Size Measurement | 计算工作量 | 10 | 10 |
| Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 5 | 5 |
| total | 合计 | 382 | 287 |

浙公网安备 33010602011771号