reggie007

导航

个人项目(第二次软工作业)

GtiHub链接

这是作业链接

作业简介

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/CSGrade21-34
这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/CSGrade21-34/homework/13023
这个作业的目标 学习GitHub项目的基本管理,体验项目开发流程

PSP表格

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

需求

题目:论文查重

描述如下:

设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率。

原文示例:今天是星期天,天气晴,今天晚上我要去看电影。
抄袭版示例:今天是周天,天气晴朗,我晚上要去看电影。
要求输入输出采用文件输入输出,规范如下:

从命令行参数给出:论文原文的文件的绝对路径。
从命令行参数给出:抄袭版论文的文件的绝对路径。
从命令行参数给出:输出的答案文件的绝对路径。
我们提供一份样例,课堂上下发,上传到班级群,使用方法是:orig.txt是原文,其他orig_add.txt等均为抄袭版论文。

注意:答案文件中输出的答案为浮点型,精确到小数点后两位

模块接口的设计与实现过程

  • 总章

    第一部分:主模块
    main:从命令行输入路径,读取文档内容之后,利用SimHashUtil类中getSimHash函数得到对应的SimHash值,再通过getSimilarity函数调用simHash值求出相似度,最后将结果写入结果文档中输出
    第二部分:海明距离模块
    GetHammingUtil:getHammingDistance方法调用simHash值求得海明距离,getSimilarity方法通过海明距离计算出相似度。
    第三部分:相似simHash模块(关键)
    SimHashUtil:calculateHash用于计算hash值(采用SHA-256算法),getSimHash按照下面5个步骤计算simhash值。
    分词:对文本或数据进行特征提取(这里采用了正则表达式和规定了一些常见的文本符号进行切割得到分词)之后,对每个特征进行分词
    哈希:使用哈希函数将分词后的特征转换为一个二进制数值。(哈希算法SHA-256)
    加权:对提取到的特征进行加权,将不同特征按照分词在文本中的位置和占比进行分配。
    合并:对加权结果进行合并(这里是256位)。
    降唯:将合并后的字符串进行归一化。如果大于0则置1,否则置0。

    第四部分:文本读写模块
    TxtUtil:readFile读取文本,writeFile写入文本

模块接口部分的性能改进



最多调用的int,java.math.MutableBigInteger,char表示这个项目在计算上占比较多,主要涉及整数(加权过程运用),字符串(空间开辟运用)和精度计算(浮点数运算),剩下的大多都是运算带来的调用,整体逻辑偏为单一,性能方面有待在分词逻辑上提高。

模块部分单元测试展示


测试展示

MainTest测试展示

将源文件与抄袭文件一次对比

将源文件与源文件,源文件与空白文件对比
GetHammingUtilTest测试展示


SimHashUtilTest测试展示

TxtUtilTest测试展示


模块部分异常处理说明

  • 空路径说明


    *路径错误(分为读取了文件夹以及路径中间部分(不存在的路径)出错)


    *写入文本内容错误(文本为空)

    *写入文本路径异常处理

    在父目录下新创建一个新命名的文件

posted on 2023-09-16 10:48  树枝六个6  阅读(25)  评论(0编辑  收藏  举报