软件工程作业2:论文查重

news/2024/9/18 5:42:29/文章来源:https://www.cnblogs.com/tangliwei/p/18407974

论文查重

Github链接

这个作业属于哪个课程 软件工程课程
这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13229
这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/
这个作业的目标 按照要求写一个查重软件
PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 20 30
· Estimate · 估计这个任务需要多少时间 300 400
Development 开发 500 600
· Analysis · 需求分析 (包括学习新技术) 10 20
· Design Spec · 生成设计文档 10 20
· Design Review · 设计复审 20 30
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 10 20
· Design · 具体设计 30 20
· Coding · 具体编码 10 30
· Code Review · 代码复审 10 30
· Test · 测试(自我测试,修改代码,提交修改) 20 10
Reporting 报告 30 20
· Test Repor · 测试报告 10 40
· Size Measurement · 计算工作量 40 50
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 10 10
· 合计 1040 1330

程序设计

类名 方法名 职责描述
CosineSimilarity getWordFrequency 计算词频向量
cosineSimilarity 计算两个文本的余弦相似度
FileUtils WriteToFile 写数据到文件中
ReadFile 从文件读取数据
TextUtils preprocessText 对文本进行分词处理

关键算法:余弦相似度

余弦相似度算法:一个向量空间中两个向量夹角间的余弦值作为衡量两个个体之间差异的大小,余弦值接近1,夹角趋于0,表明两个向量越相似,余弦值接近于0,夹角趋于90度,表明两个向量越不相似。
例子
句子A:这只皮靴号码大了。那只号码合适

句子B:这只皮靴号码不小,那只更合适

怎样计算上面两句话的相似程度?

基本思路是:如果这两句话的用词越相似,它们的内容就应该越相似。因此,可以从词频入手,计算它们的相似程度。

第一步,分词。

句子A:这只/皮靴/号码/大了。那只/号码/合适。

句子B:这只/皮靴/号码/不/小,那只/更/合适。

第二步,列出所有的词。

这只,皮靴,号码,大了。那只,合适,不,小,很

第三步,计算词频。

句子A:这只1,皮靴1,号码2,大了1。那只1,合适1,不0,小0,更0

句子B:这只1,皮靴1,号码1,大了0。那只1,合适1,不1,小1,更1

第四步,写出词频向量。

句子A:(1,1,2,1,1,1,0,0,0)

句子B:(1,1,1,0,1,1,1,1,1)

到这里,问题就变成了如何计算这两个向量的相似程度。我们可以把它们想象成空间中的两条线段,都是从原点([0, 0, …])出发,指向不同的方向。

两条线段之间形成一个夹角,

如果夹角为0度,意味着方向相同、线段重合,这是表示两个向量代表的文本完全相等;
如果夹角为90度,意味着形成直角,方向完全不相似;
如果夹角为180度,意味着方向正好相反。
因此,我们可以通过夹角的大小,来判断向量的相似程度。夹角越小,就代表越相似。

性能分析

没有警告

基于JProfiler工具的分析


由图可知
char[]类型的实例数量为36,169,占用了36,169个单位的内存大小,占比最大。

最耗时的程序

如上图所示,一个测试案例耗时420ms


其主要性能瓶颈是计算余弦相似度时调用的基于jieba分词方法

单元测试

我从两个文件中读取数据,调用余弦相似度计算方法,计算出余弦相似度,将其写入result.txt,观察结果的准确性

测试覆盖率截图

异常处理

当文件路径输入不正确时,(即捕获到FileNotFoundException,会在控制台打印并终止程序)
public class FileUtils {

public static void WriteToFile(String data,String filename)  {try (FileWriter fileWriter = new FileWriter(filename,true )){fileWriter.write("\n"+data);System.out.println(filename+"写入成功!");}catch (FileNotFoundException e){throw handleException(e, "文件不存在: " + filename);}catch (IOException e) {throw handleException(e, "文件写入出错: " + filename);}
}public static String ReadFile(String filename){StringBuilder stringBuilder = new StringBuilder();try (FileReader fileReader = new FileReader(filename)){String line;BufferedReader bufferedReader = new BufferedReader(fileReader);while((line=bufferedReader.readLine())!=null){stringBuilder.append(line);}} catch (FileNotFoundException e) {throw handleException(e, "文件不存在: " + filename);} catch (IOException e) {throw handleException(e, "文件读取出错: " + filename);}return stringBuilder.toString();
}private static RuntimeException handleException(Exception e, String message) {System.err.println(message + " " + e.getMessage());return new RuntimeException(message, e);
}

GitHub提交记录

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

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

相关文章

24小时搜书Z-library最新国内访问入口镜像网址(持续更新)

24小时搜书Z-library简介24小时搜书Z-library,这是一个基于 IPFS 的电子书搜索引擎,收录了大量图书,据介绍有 1000万本以及8000篇文章,可以通过书名、作者、出版社、扩展名、ISBN 等多种信息进行搜索。各种常见的电子书格式如 pdf、mobi、epub、azw3 等都支持下载。Z-libra…

PDshell16反向pgsql中 Unable to list the columns. SQLSTATE = 22003不良的类型值 short : t 的解决方案

问题原因:pdshell逆向pg的sql脚本滞后,与pg新版本不兼容,解决方案:修改掉不兼容的sql代码1、Database->Edit Current DBMS,如下 2、PostgreSQL 9.x->Script->Objects找到Column和Key;如下 3、将 Column->SqlListQuery 选项里 SELECT 中的 c.attnotnull 替换…

高精度监测土体压应力变化量的最佳选择 GEO系列振弦式土压力计

高精度监测土体压应力变化量的最佳选择 GEO系列振弦式土压力计GEO系列振弦式土压力计广泛适用于长期测量土石坝、防波堤、护岸、码头岸壁、高层建筑、管道基础、桥墩、挡础所受土体的压应力,是了解土体对土中构筑物压应力变化量的有效监测设备。同时,它还可以同步测量埋设点的…

论文阅读翻译之Deep reinforcement learning from human preferences

论文阅读翻译之Deep reinforcement learning from human preferences 关于首次发表日期:2024-09-11 论文原文链接:https://arxiv.org/abs/1706.03741 论文arxiv首次提交日期:12 Jun 2017 使用KIMI,豆包和ChatGPT等机翻,然后人工润色 如有错误,请不吝指出Deep reinforceme…

最大熵原理[解释+例题]

1 熵的概念 熵是热力学中的一个概念,由香浓引入到信息论中。在信息论中,熵是衡量随机变量不确定性的量度,熵越大表示随机变量的不确定性越大,即随机变量越难以预测。 2 熵的计算信息熵的计算可以看笔者的博客:点此跳转。 3 最大熵原理定义 最大熵原理是一种选择随机变量统…

9.9 ~ 9.15

没有摘要9.9 whk 正常上课。 感觉自己一到教室就困,怎么会是呢 总不能是教室人太多缺氧了吧( OI 我干啥了?我干啥了?我干啥了? 9.10 whk 教师节。 所以每节课上课之前我们都会起立并大喊“祝老师教师节快乐”; 然后在奥赛课上也这么干了,给了 \(\text{Huge}\) 一点小小的…

PowerDesigner 逆向工程 Could not Initialize JavaVM!

原项目的大量的表,使用PowerDesigner 进行逆向工程。提示Could not Initialize JavaVM! 网上找到原因,PowerDesigner 不可以使用64位JDK环境!有一种不修改环境变量的方法 在PowerDesigner目录下,建立一个启动批处理,如:startup.bat,在其中配置JAVA_HOME、CLASSPATH,如…

解锁数据潜力,天翼云TeleDB为企业数智蝶变添力赋能!

近日,第15届中国数据库技术大会(DTCC2024)在北京召开。大会以“自研创新 数智未来”为主题,重点围绕向量数据库与向量检索技术实践、数据治理与数据资产管理、云原生数据库开发与实践、特定场景下的数据库管理与优化、大数据平台建设等内容展开分享和探讨。近日,第15届中国…

JDK1.8下载

1. 点击进入下载页 页面地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 目前官方刚对1.8做了一次bug升级,强烈建议使用191或者192的小版本,这里就选择8u191. 2. 先选中上方的接受协议,再选择适合自己操作系统的包 我们这里选…

java学习之HttpClient忽略安全证书(SSLContext)

1.我们在写https请求时候,经常会遇见安全证书(SSL)验证失败的情况,如下图。 上图异常就是因为SSL验证失败导致的,常规的做法是忽略证书认证。方法如下: 第一步:需要重写认证的证书类 X509ExtendedTrustManager。 第二步:创建SSLContext对象。 第三步:将SSLContext对象设…

redmine配置邮件通知

redmine的邮件通知配置文件就在redmine的config文件夹里面 1:我们先到安装路径下面的config,找到configuration.yml,默认是没有的,我们要把模板文件复制一份出来 执行命令:cp configuration.yml.example configuration.yml 2:要先开通邮箱的SMTP服务,我的是126邮箱,开…

Jenkins 编译 .NET 6 WPF

最近公司需求要将产品编译自动化,干了那么多年客户端开发一直都是小作坊作业最近换了一个比较正规的互联网公司一切都需要标准化流程化了,自动化也必不可少!然后我就了解到了Jenkins这玩意,找了两天资料感觉还挺简单的写篇文章收录下。 因为签名UKey只要windows驱动 ,所以…