个人项目-论文查重/3120005470

文章目录

      • 1.作业的基本信息
      • 2.作业地址
      • 3.PSP表格
      • 4.算法的设计与实现过程
        • 4.1 分词
        • 4.2 hash
        • 4.3 加权
        • 4.4 合并
        • 4.5 降维
        • 4.6 通过海明距离计算simhash的相似度
      • 5.具体代码设计部分
        • 5.1 设计顶层接口,选用一种算法作为实现类
        • 5.2 核心代码:获取simhash和海明距离得到相似度
        • 5.3 代码设计的优点
      • 6.计算模块接口部分的性能改进
        • 6.1 JProfiler分析
        • 6.2 性能改进策略:
      • 7.计算模块部分单元测试展示
        • 7.1 整体功能测试:采用老师任务里的样例。
        • 7.2 测试核心逻辑求解simhash值
        • 7.3 单元测试覆盖率截图:
      • 8.计算模块部分异常处理说明
        • 8.1 测试错误的传参个数
        • 8.2 测试文件格式

1.作业的基本信息

作业属于课程
软件工程三班
作业的要求
个人项目作业-论文查重
作业的目标
1、熟悉gitcode的使用
2、使用PSP表格记录项目完成流程
3、有质量地完成论文查重项目
4、编写单元测试
5、对项目做性能测试分析与改进

2.作业地址

gitcode仓库地址:
https://gitcode.net/weixin_55642001/3120005470-paper/-/tree/master/

3.PSP表格

PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划1520
· Estimate· 估计这个任务需要多少时间1000750
Development开发200160
· Analysis· 需求分析 (包括学习新技术)120130
· Design Spec· 生成设计文档3025
· Design Review· 设计复审3040
· Coding Standard· 代码规范 (为目前的开发制定合适的规范)1010
· Design· 具体设计90100
· Coding· 具体编码200150
· Code Review· 代码复审4040
· Test· 测试(自我测试,修改代码,提交修改)180185
Reporting报告150165
· Test Repor· 测试报告6065
· Size Measurement· 计算工作量1010
· Postmortem & Process Improvement Plan· 事后总结, 并提出过程改进计划2025
· 合计1000800

4.算法的设计与实现过程

设计思想概述以及实现流程:实现流程基于Simhash和海明距离计算simhash相似度

4.1 分词

需要判断文本分词,形成这个文章的特征单词。最后形成去掉噪音词的单词序列并为每个词加上权重,我们假设权重分为5个级别(1~5)。
比如:“ 美国“51区”雇员称内部有9架飞碟,曾看见灰色外星人 ” ==> 分词后为 “ 美国(4) 51区(5) 雇员(3) 称(1) 内部(2) 有(1) 9架(3) 飞碟(5) 曾(1) 看见(3) 灰色(4) 外星人(5)”,括号里是代表单词在整个句子里重要程度,数字越大越重要。

4.2 hash

通过hash算法把每个词变成hash值,比如“美国”通过hash算法计算为 100101,“51区”通过hash算法计算为 101011。这样我们的字符串就变成了一串串数字,要把文章变为数字计算才能提高相似度计算性能,现在是降维过程进行时。

4.3 加权

通过 4.2步骤的hash生成结果,需要按照单词的权重形成加权数字串,比如“美国”的hash值为“100101”,通过加权计算为“4 -4 -4 4 -4 4”;“51区”的hash值为“101011”,通过加权计算为 “ 5 -5 5 -5 5 5”。

4.4 合并

把上面各个单词算出来的序列值累加,变成只有一个序列串。比如 “美国”的 “4 -4 -4 4 -4 4”,“51区”的 “ 5 -5 5 -5 5 5”, 把每一位进行累加, “4+5 -4±5 -4+5 4±5 -4+5 4+5” ==> “9 -9 1 -1 1 9”。这里作为示例只算了两个单词的,真实计算需要把所有单词的序列串累加。

4.5 降维

把4.4步骤算出来的 “9 -9 1 -1 1 9” 变成 0 1 串,形成我们最终的simhash签名。 如果每一位大于0 记为 1,小于0 记为 0。最后算出结果为:“1 0 1 0 1 1”。

4.6 通过海明距离计算simhash的相似度

现在通过这样的转换,文本都转换为simhash 代码,如何计算两个simhash的相似度呢?我们通过海明距离(Hamming distance)就可以计算出两个simhash到底相似不相似。两个simhash对应二进制(01串)取值不同的数量称为这两个simhash的海明距离。举例如下: 10101 和 00110 从第一位开始依次有第一位、第四、第五位不同,则海明距离为3。对于二进制字符串的a和b,海明距离为等于在a XOR b运算结果中1的个数(普遍算法)。

5.具体代码设计部分

5.1 设计顶层接口,选用一种算法作为实现类

由于计算论文相似度、重复度的算法较多,这里也只采用了一种方法,即simhash+海明距离。因此我首先定义一个抽象接口DuplicateCheck接口,作为论文查重多种实现算法都要继承的父接口,接口里定义了一个抽象方法:String getSimilarity(String originalStr, String plagiarizeStr),用于让多种算法的实现类来实现,方便于将来扩展以及将来更换算法实现论文查重。

5.2 核心代码:获取simhash和海明距离得到相似度

在这定义一个子实现类SimHashAndHammingImpl类实现上述所说的DuplicateCheck接口,
核心是实现的方法 String getSimilarity(String originalStr, String plagiarizeStr)
方法内容如下:核心逻辑即为获取两个长文本的simhash以及计算海明距离得到相似度。

 @Overridepublic String getSimilarity(String originalStr, String plagiarizeStr) {//由字符串得出对应的simHash值String orSimHash = getSimHash(originalStr);String plSimHash = getSimHash(plagiarizeStr);//由simHash值求出相似度String similarity = gotSimilarity(orSimHash, plSimHash);return similarity;}

其中调用了同样定义在本实现类的方法:getSimHash方法和gotSimilarity方法,在这里不列出源代码赘述了。

5.3 代码设计的优点

1、针对这一种Simhash+海明距离的算法的实现方法进行了代码封装,使得易于调用。
2、同时,定义了父接口,也为将来进行代码水平扩展其他算法的试验进行了准备,将来只需要更换实现类即可,实现了开闭原则,即对修改关闭,对扩展开放。

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

6.1 JProfiler分析

概览图在这里插入图片描述
在这里插入图片描述
程序中消耗最大的函数:
是计算长文本的simHash值的函数

6.2 性能改进策略:

1、simhash用于比较大文本,适用于论文查重,但是如果是小文本,则应该更换算法。
2、使用多线程技术。

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

7.1 整体功能测试:采用老师任务里的样例。

public class TestPaperSelect {private DuplicateCheck check = new SimHashAndHammingImpl();/*** 测试不同的文件*/@Testpublic void testdifferent() {List<String> plagiar = new ArrayList<>();// 源文件String originalStr = FileUtil.readUtf8String("C:\\Users\\26411\\Desktop\\test\\orig.txt");plagiar.add("C:\\Users\\26411\\Desktop\\test\\orig_0.8_add.txt");plagiar.add("C:\\Users\\26411\\Desktop\\test\\orig_0.8_del.txt");plagiar.add("C:\\Users\\26411\\Desktop\\test\\orig_0.8_dis_1.txt");plagiar.add("C:\\Users\\26411\\Desktop\\test\\orig_0.8_dis_10.txt");plagiar.add("C:\\Users\\26411\\Desktop\\test\\orig_0.8_dis_15.txt");String plagiarizeStr = null;    //抄袭文本String similarity = null;   //相似度for (String str : plagiar) {plagiarizeStr = FileUtil.readUtf8String(str);similarity = check.getSimilarity(originalStr, plagiarizeStr);System.out.println(str + " ==>" + similarity);}}
}

结果如下:

C:\Users\26411\Desktop\test\orig_0.8_add.txt ==>0.82
C:\Users\26411\Desktop\test\orig_0.8_del.txt ==>0.75
C:\Users\26411\Desktop\test\orig_0.8_dis_1.txt ==>0.77
C:\Users\26411\Desktop\test\orig_0.8_dis_10.txt ==>0.73
C:\Users\26411\Desktop\test\orig_0.8_dis_15.txt ==>0.61

7.2 测试核心逻辑求解simhash值

  @Testpublic void testSimhash() {String originalStr = FileUtil.readUtf8String("C:\\Users\\26411\\Desktop\\test\\orig.txt");String plagiarizeStr = FileUtil.readUtf8String("C:\\Users\\26411\\Desktop\\test\\orig_0.8_add.txt");String orSimHash = check.getSimHash(originalStr);String plSimHash = check.getSimHash(plagiarizeStr);System.out.println(" orSimHash => "+orSimHash);System.out.println(" plSimHash => "+plSimHash);}

结果如下:

 orSimHash => 11110000111111010111111100110101010011010110011001111011001010000111110100000010000101011100011010100000111110100100111111110000plSimHash => 11110001011111000111110001100011010010010010010101111011001010000011111100000010010101010100011010100110110111110100111010110000

7.3 单元测试覆盖率截图:

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

public class Error {//错误的传参个数public static final Exception BadArgsException = new RuntimeException("错误的传参个数!");//文件校验 public static final Exception BadFileException = new RuntimeException("文件格式不正确!");public static final Exception LengthException = new RuntimeException("文本长度需多于300字!");
}

在出现错误的传参个数或校验文件不符合要求时,抛出异常。

8.1 测试错误的传参个数

当命令行传参个数少于3个时,会抛出异常 BadArgsException

public class TestError {private DuplicateCheck check = new SimHashAndHammingImpl();@Testpublic void testBadArgsException(){String[] args = new String[2];args[0] = "C:\\Users\\26411\\Desktop\\test\\orig.txt";args[1] = "C:\\Users\\26411\\Desktop\\test\\orig_0.8_add.txt";PaperSelect.main(args);}
}

结果如下:

java.lang.RuntimeException: 错误的传参个数!at com.hwg.common.Error.<clinit>(Error.java:5)at com.hwg.PaperSelect.main(PaperSelect.java:13)

8.2 测试文件格式

当文件格式有误时,会抛出异常 BadFileException

@Testpublic void testBadFileException(){String[] args = new String[3];args[0] = "C:\\Users\\26411\\Desktop\\test\\orig.txy";args[1] = "C:\\Users\\26411\\Desktop\\test\\orig_0.8_add.txz";args[2] = "C:\\Users\\26411\\Desktop\\test\\ans.txw";PaperSelect.main(args);}

结果如下:

java.lang.RuntimeException: 文件格式不正确!at com.hwg.common.Error.<clinit>(Error.java:8)at com.hwg.PaperSelect.main(PaperSelect.java:21)

在这里插入图片描述

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

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

相关文章

AutoGPT 太火了,无需人类插手自主完成任务,是不是一个新趋势?

煎鱼注&#xff1a;前几天在内训时听到微软的讲师有提到 OpenAI 自己开源了 ChatGPT不需要写 prompt 的模式。回来查实时&#xff0c;怎么查都找不到。经过读者提醒&#xff0c;了解到人家开源后又闭源了.... 尴尬极了 &#x1f605; 不过在网上冲浪时&#xff0c;发现了最近新…

我们为什么要写作?

为什么要写书是一个很难回答的问题&#xff0c;因为从不同的角度&#xff0c;会有不同的答案。 最近ChatGPT很火&#xff01;诸事不决&#xff0c;先问问ChatGPT&#xff0c;看看它是怎么回答的。 ChatGPT给出的答案还是比较全&#xff0c;虽然没有“一本正经的胡说八道”&…

聊聊Go与TLS 1.3

除了一些综述类文章和译文&#xff0c;我的文章选题多来源于实际工作和学习中遇到的问题。这次我们来聊聊近期遇到一个问题&#xff1a;如何加快基于TLS安全通信的海量连接的建连速度? TLS(Transport Layer Security)传输安全层的下面是TCP层&#xff0c;我们首先可能会想到的…

使用go test框架驱动的自动化测试

一. 背景 团队的测试人员稀缺&#xff0c;无奈只能“自己动手&#xff0c;丰衣足食”&#xff0c;针对我们开发的系统进行自动化测试&#xff0c;这样既节省的人力&#xff0c;又提高了效率&#xff0c;还增强了对系统质量保证的信心。 我们的目标是让自动化测试覆盖三个环境&a…

知乎大模型「知海图AI」上线!产品官宣即内测,为4亿用户摘取「热榜摘要」...

杨净 发自 凹非寺量子位 | 公众号 QbitAI 又一家国内企业大模型产品发布。 不是别的&#xff0c;而是已拥有4亿用户的最大中文问答社区知乎。 而且官宣即内测—— 不光有首个大语言模型「知海图AI」&#xff0c;首款产品也将应用于热榜。 情理之中&#xff0c;意料之外。 一方面…

3月4月琐碎但值得的事

很多小伙伴应该发现最近我异常忙&#xff0c;忙到3月总结都没有写&#xff0c;忙到每天睡3-4个小时&#xff0c; 结果一拖到5月了&#xff0c; 索性3&#xff0c;4月小结一起写了&#xff0c;仅仅代表我个人观点&#xff0c;不一定对&#xff0c;如果有帮助最好了。 有兴趣可以…

最新人工智能GPT-4免费简单使用教程

GPT-4比Chatgpt升级了不少&#xff0c;现在还无法使用OpenAI官网或百度文心一言的小伙伴可以尝试以下方法。 打开 nat.dev 登录&#xff08;sign-in注册时不用填手机号码&#xff09; 选择GPT-4模型 然后直接空白处用英语或者中文输入问题 想尝试AI作图的方法如下。 打开网页…

中文邮件格式模板、工作汇报邮件模板这样写,90%人都爱看

时常收发邮件的人都知道&#xff0c;邮件书写格式是一件很讲究的事&#xff0c;所以大家都要掌握基本的邮件格式模板。 如何书写一份得体的邮件&#xff1f; 原则&#xff1a;有礼貌、讲重点、条理清晰 称呼&#xff1a;通常根据职位来称呼&#xff0c;xx经理、xx总、xx老师 …

BUILD AN LLM-POWERED APPLICATION USING LANGCHAIN: A COMPREHENSIVE STEP-BY-STEP GUIDE

目录 Introduction to LangChain and LLM-powered applications LangChain: Its components and working Launch your project with LeewayHertz Different types of models that are used in LangChain

吐血整理| 30+款实用谷歌Chrome插件大合集

让我看看都2023年了&#xff0c;谁还在用谷歌浏览器不安装插件&#xff1f;&#xff1f; 插件是浏览器的外展功能&#xff0c;安装后可以实现各种浏览器自带功能不能实现的很多操作&#xff0c;在本篇文章中&#xff0c;本小白为大家吐血整理出了30款好用的Chrome插件&#xf…

从 ELMo 到 ChatGPT:历数 NLP 近 5 年必看大模型

目录 AI21 LabsAlibabaAllen Institute for AIAmazonAnthropicBAAIBaiduBigScienceCohereDeepMindEleutherAIGoogleHuggingfaceiFLYTEKMeta (Facebook)MicrosoftNVidiaOpenAISalesforceTsinghua UniversityUC BerkeleyYandex持续更新中 ...参考 团队博客: CSDN AI小组 相关阅读…

Adobe全新AI工具引关注,Adobe firefly助力创作更高效、更有创意

原标题&#xff1a;Adobe全新AI工具引关注&#xff0c;Adobe firefly&#xff08;萤火虫&#xff09;助力创作更高效、更有创意。 以ChatGPT为首的生成式AI、AIGC等工具的战局正如火如荼的进行中..... 除了微软、百度的聊天机器人和一些初创公司的AI画图工具令人惊艳&#xff…

李飞飞高徒盘点年度十大AI亮点:核聚变、ChatGPT、AlphaFold上榜

来源&#xff1a;新智元 编辑&#xff1a;Aeneas 昕朋 【导读】2022年有哪些人工智能的突破&#xff1f;今天&#xff0c;李飞飞高徒Jim Fan盘点了年度十大AI亮点。 人工智能的爆炸正在扭曲我们的时间感。 你能相信Stable Diffusion只有4个月大&#xff0c;而ChatGPT的出现还不…

【教学类-38】20230724京剧脸谱涂色(Python 彩图彩照转素描线描稿)

一、作品预览 京剧脸谱&#xff08;涂色&#xff09;学具展示&#xff08;64份&#xff09; 二、背景需求&#xff1a; 1、大班主题《我是中国人》里面有一个“京剧脸谱”的子主题。从网上下载的彩色脸谱&#xff08;红黄绿蓝紫黑白&#xff09;&#xff0c;作为环境装饰。引…

智能ai生成绘画软件有哪些?亲测好用的软件分享

小伙伴们有听说过ai绘画吗&#xff1f;这是目前比较火的一种绘画方式&#xff0c;我们可以通过给AI输入一段关于画面描述的文字内容&#xff0c;ai就可以根据这些内容&#xff0c;生成一幅相关的画作。对于不会画画&#xff0c;但是有创意的小伙伴&#xff0c;你们会不会也想试…

Drawio免费绘图软件下载

drawio是一款强大、免费的绘图工具&#xff0c;使用起来非常方便&#xff0c;非常好用&#xff0c;可以满足大部分画图功能&#xff0c;例如UML、页面设计&#xff08;Android&iOS&#xff09;等visio能画的图它都可以画。支持网页版使用&#xff08;网页版可以自己部署一套…

ai绘画生成软件哪个好?这3款ai绘画生成软件还不错

你知道ai绘画生成软件哪个好吗&#xff1f;随着人工智能技术的不断进步&#xff0c;AI绘画已经成为了一种极具前瞻性的技术。 在过去的几年中&#xff0c;出现了许多强大的AI绘画工具&#xff0c;如一键AI绘画、梦幻AI画家和Midjourney软件等。这些工具利用机器学习和计算机视觉…

文字生成绘画软件有哪些?推荐你几款好用的ai绘画工具

在社交媒体应用中&#xff0c;文字生成绘画的软件可以使我们更好地记录生活中的美好瞬间&#xff0c;而且它可以把文字内容制作成好看的图片分享给亲朋好友&#xff0c;增强沟通和互动效果。那么&#xff0c;小伙伴们知道文字生成绘画软件有哪些吗&#xff1f;这篇文章就给你推…

推荐几个ai生成绘画软件给你

绘画是一门需要艺术家经过长时间的学习和实践才能精通的技能&#xff0c;但现在有了人工智能绘画软件&#xff0c;人们可以更加轻松地创作出美丽的作品。今天&#xff0c;我们将和大家介绍一下ai绘画软件有哪些&#xff0c;希望这篇文章能够帮助你们实现自己的创意。 推荐电脑端…

ai绘画生成软件哪个好?分享几个ai绘画软件

ai绘画是人工智能技术在绘画领域的应用。随着科学技术的不断发展&#xff0c;越来越多的绘画软件开始采用ai技术&#xff0c;为画家提供更加自由、更加灵活的绘画体验。ai绘画的基本原理是利用人工智能技术对绘画过程进行辅助。在传统的绘画中&#xff0c;艺术家需要通过手工完…