• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
giaruei
博客园    首页    新随笔    联系   管理    订阅  订阅
软工作业1 论文查重
这个作业属于哪个课程 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 计划 60 60
Estimate 估计这个任务需要多少时间 30 35
Development 开发 120 130
Analysis 需求分析 (包括学习新技术) 120 130
Design Spec 生成设计文档 60 60
Design Review 设计复审 60 60
Coding Standard 代码规范 (为目前的开发制定合适的规范) 30 40
Design 具体设计 40 50
Coding 具体编码 120 150
Code Review 代码复审 30 35
Test 测试(自我测试,修改代码,提交修改) 20 25
Reporting 报告 60 40
Test Repor 测试报告 60 40
Size Measurement 计算工作量 60 60
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 90 90
  合计 960 1005

二.需求

题目:论文查重
描述如下:
设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率。
  • 原文示例:今天是星期天,天气晴,今天晚上我要去看电影。
  • 抄袭版示例:今天是周天,天气晴朗,我晚上要去看电影。
要求输入输出采用文件输入输出,规范如下:
  • 从命令行参数给出:论文原文的文件的绝对路径。
  • 从命令行参数给出:抄袭版论文的文件的绝对路径。
  • 从命令行参数给出:输出的答案文件的绝对路径。
注意:答案文件中输出的答案为浮点型,精确到小数点后两位。

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

1.流程图

 
 

2.类

  • MainPaperCheck:main 方法所在的类
    • 读取命令行输入的路径名对应的文件,将文件的内容转化为字符串。
    • 由字符串得出对应的 SimHash值。
    • 由 SimHash值求出相似度。
    • 把相似度写入最后的结果文件中。
  • HammingUtils:计算海明距离的类
  • 包含以下两个静态方法:
  • 1、getHammingDistance:输入两个 simHash 值,计算出它们的海明距离 distance。
  • 2、getSimilarity:输入两个 simHash 值,调用 getHammingDistance 方法得出海明距离 distance,在由 distance 计算出相似度。
  • SimHashUtils:计算 SimHash 值的类
  • 包含以下两个静态方法:
  • 1、getHash:传入String,计算出它的hash值,并以字符串形式输出。(使用了MD5获得hash值)
  • 2、getSimHash:传入String,计算出它的simHash值,并以字符串形式输出。(需要调用 getHash 方法)
  • getSimHash是核心算法,流程图如下:
 
 
  • TxtIOUtils:读写 txt 文件的工具类
  • 包含以下两个静态方法:
  • 1、readTxt:读取txt文件。
  • 2、writeTxt:写入txt文件。
  • ShortStringException:处理文本内容过短的异常类

四.计算模块接口部分的性能改进

 
 
从分析图可以看到:
调用次数最多的是com.hankcs.hanlp包提供的接口, 即分词、取关键词与计算词频花费了最多的时间,如果能找到更高效的分词方法便可以提升性能。

五.计算模块部分单元测试展示

1.读写txt文件模块的测试
 
 
2.海明距离模块的测试
 
 
3.SimHash模块的测试
 
 
4.MainTest的测试
 
 
5.各模块测试代码覆盖率
 
 

六.计算模块部分异常处理说明

当文本长度太短时,HanLp无法取得关键字,出现异常,所以用ShortStringException来处理。
posted on 2023-09-16 12:48  giaruei  阅读(48)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3