github地址
https://github.com/xiaoqi66666/xiaoqi66666/blob/main/202121331087
题目要求
题目:论文查重
描述如下:
设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率。
原文示例:今天是星期天,天气晴,今天晚上我要去看电影。
抄袭版示例:今天是周天,天气晴朗,我晚上要去看电影。
要求输入输出采用文件输入输出,规范如下:
从命令行参数给出:论文原文的文件的绝对路径。
从命令行参数给出:抄袭版论文的文件的绝对路径。
从命令行参数给出:输出的答案文件的绝对路径。
我们提供一份样例,课堂上下发,上传到班级群,使用方法是:orig.txt是原文,其他orig_add.txt等均为抄袭版论文。
注意:答案文件中输出的答案为浮点型,精确到小数点后两位
开发环境
操作系统:Windows10
使用语言:java
设计流程:
开始
获取原文文件路径、抄袭版文件路径和输出文件路径作为命令行参数
读取原文文件内容,保存至originalText变量
读取抄袭版文件内容,保存至plagiarizedText变量
通过getWordVector方法将originalText转换为原文词向量originalVector
通过getWordVector方法将plagiarizedText转换为抄袭版词向量plagiarizedVector
计算余弦相似度,得到相似度值similarity = cosineSimilarity(originalVector, plagiarizedVector)
将相似度值写入输出文件
结束
项目结构

异常处理
try (BufferedReader originalReader = new BufferedReader(new FileReader(originalFile));
BufferedReader plagiarizedReader = new BufferedReader(new FileReader(plagiarizedFile));
FileWriter writer = new FileWriter(outputFile)) {
StringBuilder originalText = new StringBuilder();
StringBuilder plagiarizedText = new StringBuilder();
String line;
while ((line = originalReader.readLine()) != null) {
originalText.append(line).append(" ");
}
while ((line = plagiarizedReader.readLine()) != null) {
plagiarizedText.append(line).append(" ");
}
Map<String, Integer> originalVector = getWordVector(originalText.toString());
Map<String, Integer> plagiarizedVector = getWordVector(plagiarizedText.toString());
double similarity = cosineSimilarity(originalVector, plagiarizedVector);
writer.write(String.format("%.2f", similarity));
} catch (IOException e) {
e.printStackTrace();
}
运行结果测试

测试图例
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Estimate | 估计这个任务需要多少时间 | 10 | 10 |
| Development | 开发 | 20 | 20 |
| Analysis | 需求分析 (包括学习新技术) | 20 | 20 |
| Planning | 计划 | 10 | 10 |
| Design Spec | 生成设计文档 | 30 | 30 |
| Design Review | 设计复审 | 20 | 20 |
| Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 10 | 10 |
| Design | 具体设计 | 10 | 15 |
| Coding | 具体编码 | 11 | 11 |
| Code Review | 代码复审 | 20 | 20 |
| Test | 测试(自我测试,修改代码,提交修改) | 20 | 20 |
| Reporting | 报告 | 5 | 5 |
| Test Repor | 测试报告 | 12 | 12 |
| Size Measurement | 计算工作量 | 14 | 14 |
| Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 11 | 11 |
| ------ | · 合计 | 223 | 228 |