首页 > 其他分享 >软件工程导论——个人项目之论文查重

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

时间:2024-09-14 23:46:28浏览次数:8  
标签:查重 Github 代码 论文 导论 软件工程 哈希 SimHash 测试用例

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

这个作业属于哪个课程 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个测试用例确保你的程序能够正确处理各种情况。

单元测试:

测试报告:

分支覆盖率:

标签:查重,Github,代码,论文,导论,软件工程,哈希,SimHash,测试用例
From: https://www.cnblogs.com/ekil/p/18398222

相关文章

  • 个人项目——论文查重
    这个作业属于哪个课程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......
  • 论文查重
    这个作业属于哪个课程https://edu.cnblogs.com/campus/gdgy/CSGrade22-34这个作业要求在哪里https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13229这个作业的目标完成个人项目论文查重系统,熟悉psp,测试,性能分析,异常处理等内容。1、仓库地址https:/......
  • 论文查重
    这个作业属于哪个课程https://edu.cnblogs.com/campus/gdgy/CSGrade22-12这个作业要求在哪里https://edu.cnblogs.com/campus/gdgy/CSGrade22-12/homework/13220这个作业的目标学会论文查重算法,学会使用git等操作GitHub地址:https://github.com/wenzb456123/3122......
  • 个人项目-论文查重
    |这个作业属于哪个课程|班级的链接||-----------------|---------------||这个作业要求在哪里|作业要求的链接||这个作业的目标|<了解论文查重机理,深刻体会个人开发流程>|一、Github地址https://github.com/A-liya05/A-liya05/tree/main/3222004678/ruangong二......
  • 个人项目-论文查重
    github链接这个作业属于哪个课程班级的链接这个作业要求在哪里作业要求的链接这个作业的目标实现论文查重算法,并对代码进行性能分析、单元测试,使用PSP表PSP2.1PersonalSoftwareProcessStages预估耗时(分钟)实际耗时(分钟)Planning计划3030·E......
  • 个人项目-论文查重
    个人项目-论文查重这个作业属于哪个课程班级链接这个作业要求在哪里作业链接这个作业的目标写一个论文查重项目github链接1.题目要求设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率。原文......
  • 第一次软件工程项目--论文查重
    这个作业属于哪个课程https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/这个作业要求在哪里https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13229这个作业的目标个人项目——论文查重GitHub地址:https://github.com/samuhaer4581/3122004581.git......
  • 论文查重
    仓库地址:https://github.com/bitpurleclude/3122004951Plagiarism-check.git这个作业属于哪个课程(https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/join?id=CfDJ8AOXHS93SCdEnLt5HW8VuxT_rAhbZKO3TfjMmbv1B0Re5Fp2d0_QACha2ZoYZ4fxF-ZKCCAhfJl7B8mvCfesLYE02X8T6kx_2R8w0......
  • 个人项目:论文查重
    这个作业属于哪个课程https://edu.cnblogs.com/campus/gdgy/CSGrade22-34这个作业要求在哪里https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13228这个作业的目标设计一个论文查重程序,了解软件开发流程gitHub项目地址https://github.com/Abaistudy......
  • 个人项目-论文查重
    这个作业属于哪个课程https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/这个作业要求在哪里https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13229这个作业的目标<设计一个论文查重的程序,加深对项目开发的理解,增强对程序的测试与纠错流程的了解>G......