工程概论第二次作业---个人项目
GitHub地址
| 这个作业属于哪个课程 | <班级链接> |
|---|---|
| 这个作业要求在哪里 | <作业要求的链接> |
| 这个作业的目标 | 设计一个论文查重程序 |
1.PSP表格
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 20 | 10 |
| · Estimate | · 估计这个任务需要多少时间 | 5 | 5 |
| Development | 开发 | 70 | 60 |
| · Analysis | · 需求分析 (包括学习新技术) | 10 | 5 |
| · Design Spec | · 生成设计文档 | 10 | 5 |
| · Design Review | · 设计复审 | 5 | 2 |
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 5 | 2 |
| · Design | · 具体设计 | 10 | 5 |
| · Coding | · 具体编码 | 30 | 25 |
| · Code Review | · 代码复审 | 10 | 5 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 10 | 5 |
| Reporting | 报告 | 20 | 10 |
| · Test Repor | · 测试报告 | 10 | 5 |
| · Size Measurement | · 计算工作量 | 10 | 5 |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 5 | 1 |
| · 合计 | 240 | 150 |
2.需求分析
题目:论文查重
描述如下:
设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率。
原文示例:今天是星期天,天气晴,今天晚上我要去看电影。
抄袭版示例:今天是周天,天气晴朗,我晚上要去看电影。
要求输入输出采用文件输入输出,规范如下:
从命令行参数给出:论文原文的文件的绝对路径。
从命令行参数给出:抄袭版论文的文件的绝对路径。
从命令行参数给出:输出的答案文件的绝对路径。
3.开发环境
IDEA 2020.2.2
4.计算模块接口的设计与实现过程
这个Java程序的设计相对简单,它只包含一个名为PaperChecker的类。这个类中包含一个主函数main和四个辅助函数:simHash,hammingDistance,getUnigrams和readFileAsString`。
main函数是程序的入口点,它处理命令行参数,并调用其他函数来读取文件、计算相似度和写入输出文件。simHash函数用于计算给定文本的SimHash值。它首先创建一个长度为32的整数数组,然后遍历文本中的每个字符,根据字符的哈希码更新数组中的每个元素。最后,它将数组中的每个元素转换为1或0,得到SimHash值。hammingDistance函数用于计算两个SimHash值之间的汉明距离。它遍历两个SimHash值的每一位,如果对应位不同,则距离加一。getUnigrams函数用于将给定文本转换为一元模型。它遍历文本中的每个字符,并将字符添加到一个映射中,映射中的键是字符,值是字符出现的次数。readFileAsString函数用于读取给定文件名的文件,并将其内容作为字符串返回。
这个程序的关键在于它使用了SimHash算法来处理查重问题。SimHash算法可以将文本转化为一种数值表示(称为哈希值),使得相似的文本具有相似的哈希值。然后,我们可以通过比较两个哈希值的汉明距离来衡量两个文本的相似度。
这个程序的独到之处在于它使用了一种简单但有效的方法来处理中文查重问题。尽管这个方法可能无法处理所有情况,但是对于大多数情况,它都能给出合理的结果。此外,由于这个程序只使用了Java标准库中的类和方法,所以它不需要任何额外的依赖,可以在任何支持Java的平台上运行。这使得这个程序具有很好的可移植性和易用性。
5.计算模块部分异常处理说明
在上述代码中,我们设计了以下几种异常处理:
-
文件读取异常:当程序无法读取原文文件或抄袭版论文文件时,会抛出
IOException。这可能是由于文件不存在、文件路径错误或者没有读取文件的权限等原因导致的。在这种情况下,程序会打印出错误消息并退出。单元测试样例:我们可以创建一个测试用例,尝试读取一个不存在的文件。预期结果是程序会抛出
IOException并打印出错误消息。 -
文件写入异常:当程序无法写入输出文件时,会抛出
FileNotFoundException。这可能是由于磁盘空间不足、没有写入文件的权限或者输出路径错误等原因导致的。在这种情况下,程序会打印出错误消息并退出。单元测试样例:我们可以创建一个测试用例,尝试写入一个只读的文件或者一个不存在的目录。预期结果是程序会抛出
FileNotFoundException并打印出错误消息。 -
命令行参数异常:如果命令行参数的数量不正确,程序会打印出使用方法并退出。这是为了确保用户正确地使用程序。
单元测试样例:我们可以创建一个测试用例,只提供两个命令行参数给程序。预期结果是程序会打印出使用方法并退出。

浙公网安备 33010602011771号