软件工程导论——个人项目之论文查重

news/2024/9/18 19:45:52/文章来源:https://www.cnblogs.com/ekil/p/18398222

软件工程导论——个人项目之论文查重

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/CSGrade22-12/
这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/CSGrade22-12/homework/13220
这个作业的目标 设计一个论文查重算法并实现;学会 Git 版本控制
Github仓库地址 https://github.com/kebai633932/kebai633932/blob/main/3122004910

一、编码要求

1.在Github仓库中新建一个学号为名的文件夹。
2.在开始实现程序之前,在PSP表格[附录2]记录下你估计在程序开发各个步骤上耗费的时间,在你实现程序之后,在PSP表格记录下你在程序的各个模块上实际花费的时间。
3.使用C++ 、Java语言或者python3实现,提交python代码时请附带上requirements.txt,。C++请使用Visual Studio Community 2017进行开发,运行环境为64-bit Windows 10。对于C++/Java,还需将编译好的程序发布到Github仓库中的releases中
4.提交的代码要求经过Code Quality Analysis工具的分析并消除所有的警告。
5.完成项目的首个版本之后,请使用性能分析工具Studio Profiling Tools来找出代码中的性能瓶颈并进行改进。
6.使用Github[附录3]来管理源代码和测试用例,代码有进展即签入Github。签入记录不合理的项目会被助教抽查询问项目细节。
7.使用单元测试[附录4]对项目进行测试,并使用插件查看测试分支覆盖率等指标;写出至少10个测试用例确保你的程序能够正确处理各种情况。

二、需求

题目:论文查重

描述如下:

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

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

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

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

三.实现

1.在Github仓库中新建一个学号为名的文件夹。

2.在开始实现程序之前,在PSP表格[附录2]记录下你估计在程序开发各个步骤上耗费的时间,在你实现程序之后,在PSP表格记录下你在程序的各个模块上实际花费的时间。

PSP表格

Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 60 30
Estimate 估计这个任务需要多少时间 40 20
Development 开发 620 730
Analysis 需求分析 (包括学习新技术) 150 70
Design Spec 生成设计文档 90 80
Design Review 设计复审 60 50
Coding Standard 代码规范 40 70
Design 具体设计 80 50
Coding 具体编码 200 250
Code Review 代码复审 60 50
Test 测试(自我测试,修改代码) 80 80
Reporting 报告 40 50
Test Report 测试报告 30 60
Size Measurement 计算工作量 30 55
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 30 35
合计 990 900

3.算法分析

借鉴文章地址:
https://zhuanlan.zhihu.com/p/71488127
https://zhuanlan.zhihu.com/p/31197209

SimHash 的核心思想是将一段文本通过特定的哈希算法转换为一个固定长度的二进制哈希值(通常是 64 位或 128 位),这种哈希值称为 SimHash。不同的文本会得到不同的哈希值,但相似的文本生成的 SimHash 值之间的 汉明距离(Hamming Distance) 很小。汉明距离越小,文本越相似。

SimHash 的具体工作流程如下:
文本分词:将文章或文本分成若干个词或片段(如单词或 n-gram)。
单词哈希:对每个词或片段计算哈希值,通常使用简单的哈希函数(如 MD5、SHA 或 MurmurHash)。
加权向量:将每个词的哈希值转化为向量,并根据词频或词的权重调整向量的权重。
生成 SimHash:通过加权合并每个词的哈希值,得到一个固定长度的二进制向量,即 SimHash 值。
汉明距离:比较两个文本的 SimHash 值,通过计算它们的汉明距离(即两个二进制值不同位数的个数)来确定相似度。

4.使用C++ 、Java语言或者python3实现,提交python代码时请附带上requirements.txt,。C++请使用Visual Studio Community 2017进行开发,运行环境为64-bit Windows 10。对于C++/Java,还需将编译好的程序发布到Github仓库中的releases中

开发环境
编程语言:Java
IDE:IntelliJ IDEA 2023.3.6 (Ultimate Edition)
外部依赖jar包:junit-4.13.1,hamcrest-core-1.3,SLF4J 1.7.32
性能分析工具:JProfiler 14.0.4

5.提交的代码要求经过Code Quality Analysis工具的分析并消除所有的警告。

Code Quality Analysis工具的分析
Code Quality Analysis工具:checkstyle
Sun checks和Google checks,太难,没有实现,加了注释和优化代码

6.完成项目的首个版本之后,请使用性能分析工具Studio Profiling Tools来找出代码中的性能瓶颈并进行改进。

性能分析工具JProfiler(Studio Profiling Tools)来找出代码中的性能瓶颈:
开始的失败:
profile "Main"

成功:
attatch the JVM:


7.使用Github[附录3]来管理源代码和测试用例,代码有进展即签入Github。签入记录不合理的项目会被助教抽查询问项目细节。

管理源代码和测试用例:

测试用例:

8.使用单元测试[附录4]对项目进行测试,并使用插件查看测试分支覆盖率等指标;写出至少10个测试用例确保你的程序能够正确处理各种情况。

单元测试:

测试报告:

分支覆盖率:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/797257.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

主从库与切片集群机制

主从库与切片集群机制 主从复制源码剖析 redis的主从复制主要包括全量复制RDB文件,增量复制,长连接同步,使用了基于状态机的设计思想,来实现不同状态和状态间的跳转 基于状态机实现的话,在开发程序时只需要考虑不同状态下具体要执行的操作,以及状态之间的跳转条件即可 四…

数据类型与底层原理

数据类型与底层原理 数据结构 哈希表 redis使用链式哈希来解决哈希冲突,其Hash表实质上是一个二维数组,其中每一项就是一个指向哈希项(dictEntry)的指针 typedef struct dictht {dictEntry **table; //二维数组unsigned long size; //Hash表大小unsigned long sizemask;uns…

软工作业2:个人项目-论文查重

一、github链接这个作业属于哪个课程 首页 - 计科22级12班 - 广东工业大学 - 班级博客 - 博客园 (cnblogs.com)这个作业要求在哪里 个人项目 - 作业 - 计科22级12班 - 班级博客 - 博客园 (cnblogs.com)这个作业的目标 规范代码编写;学习模块化管理程序功能;学会写单元测试二、…

软工第一次编程作业:论文查重

github地址:https://github.com/yingnothing/first.git 个人项目-论文查重这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13229GitHub链接 https://github.com/ying…

个人项目——论文查重

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13229这个作业的目标 个人项目——论文查重一:我的github仓库地址 https://github.com/kelin-KL/kelin-KL 二:PSP表格…

OI海海

在pyq里看到了殿禾Wrose的“X的随波逐流”,附文是“我与OI的365天”,我才想到,我打OI也整整一年了 有人或许不理解我这样的一个蒟蒻为什么这么喜欢喜欢写怀念类的东西,即使到现在我还没有取得任何的奖项以及未来也并没有概率拿牌 因为我只觉得一步步走来,不记得的话,是很…

GIS可视化软件:地理信息与遥感领域中的洞察之眼

在地理信息与遥感技术的广阔天地中,可视化软件如同一双洞察世界的明眸,将复杂的数据编织成生动、直观的画卷,为我们揭示地球的奥秘与城市的律动。本文将深入挖掘其技术核心、应用实例、未来趋势,探讨可视化软件如何为地理信息与遥感技术带来深刻洞见。 可视化软件的核心与技…

USB分析仪USB3.2日志分析

1.简介 USB2.0总线采用轮询模式,即总线事务开始时,都要先发送IN或者OUT令牌包,以通知端点或者查询端点是否准备好。而USB3.2采用了异步通知模式,若端点没有准备好,则主机无需轮询,端点准备好后会通知主机,而对于OUT端点,主机会直接发送DP数据包,相当于将USB2.0中的OUT…

[第一章 web入门]SQL注入-1

启动靶机很明显注入点为id值,单引号闭合影响语句,说明为单引号闭合构造注入语句 ?id=1 and 1 =1 --+ 发现没报错,说明没有其他过滤 ,开始sql注入 ?id=1 order by 4 --+ 直到=4报错说明有3个字节段测试回显位2,3 ?id=1 and 1 = 2 union select 1,2,3 --+ 测试当…

数据结构 —堆

今天学习算法了没,你小子瞅啥呢!一:堆 1、一种二叉树的结构(完全二叉树) 2、完全二叉树:从上到下;从左到右;填满 3、最大堆:根节点的权值大于孩子节点 4、最小堆:根节点的权值依次小于孩子节点 5、常用操作 import heapq# 创建最小堆和最大堆 min_heap = [] max_heap…

软工第一次作业-论文查重

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13229这个作业的目标 通过Java开发个人项目,实现项目单元测试作业github地址(含jar包) github:https://github.com/…