这个作业属于哪个课程 | https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/ |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13229 |
这个作业的目标 | 设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率。 |
一、项目GitHub链接
https://github.com/Blueww8/Blueww
二、PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 30 |
· Estimate | · 估计这个任务需要多少时间 | 40 | 48 |
Development | 开发 | 220 | 240 |
· Analysis | · 需求分析 (包括学习新技术) | 60 | 60 |
Design Spec | · 生成设计文档 | 40 | 60 |
· Design Review | · 设计复审 | 60 | 60 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 60 | 60 |
· Design | · 具体设计 | 60 | 60 |
· Coding | · 具体编码 | 30 | 30 |
· Code Review | · 代码复审 | 30 | 30 |
· Test | · 测试(自我测试,修改代码,提交修改) | 90 | 100 |
Reporting | 报告 | 60 | 60 |
· Test Repor | · 测试报告 | 60 | 60 |
· Size Measurement | · 计算工作量 | 10 | 10 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 30 | 30 |
· 合计 | 880 | 908 |
三、计算模块接口的设计与实现过程
总体设计:
分为四个类:Main , MainTest , SimilarityMain , SimilarityMainTest .
包含的方法:main(String[] args) 方法,testSimilarity() 方法,setUp() 方法,calculateVector(String str, int index) 方法,cosineSimilarity() 方法,similarity()方法,testMain 方法等
类的执行流程:
1.用户首先运行 Main 类中的 main 方法。
2.main 方法中创建了一个 Scanner 对象,用于从控制台获取用户输入的文件路径。
3.用户输入原始论文文件路径、抄袭版论文文件路径和要保存相似度结果的文件路径。
4.如果用户输入的文件路径为空,则程序输出相应的提示信息并结束。
5.否则,程序会创建一个 DecimalFormat 实例,然后使用输入的文件路径创建 SimilarityMain 实例。
6.SimilarityMain 实例的 similarity() 方法被调用来计算两篇论文的相似度。
7.计算得到的相似度结果会被打印到控制台。
8.程序将相似度结果写入用户指定的输出文件,并在控制台上显示操作结果。
9.如果在写入文件时出现异常(IOException),则捕获异常并输出错误信息。
四、计算模块接口部分的性能改进
改进计算模块思路:
在这个地方花费的时间较多,改进时我增加了异常处理机制,引入了语义信息。