首页 > 其他分享 >个人项目

个人项目

时间:2023-09-20 22:45:20浏览次数:35  
标签:文件 抄袭 个人 项目 列表 matchingSentenceCount 方法 句子

个人项目(java)

Github 仓库链接

作业要求

这个作业属于哪个课程 工程概论
这个作业要求在哪里作业要求 作业要求
这个作业的目标 完成论文查重项目从而掌握开发流程知识

开发环境
IntelliJ IDEA 2020.1 x64

PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Estimate 估计这个任务需要多少时间 600 300
Development 开发 120 240
Analysis 需求分析 (包括学习新技术) 120 80
Design Spec 生成设计文档 40 30
Design Review 设计复审 20 20
Coding Standard 代码规范 (为目前的开发制定合适的规范) 40 60
Design 具体设计 480 300
Coding 具体编码 300 240
Code Review 代码复审 10 10
Test 测试(自我测试,修改代码,提交修改) 60 60
Reporting 报告 60 60
Test Repor 测试报告 30 30
Size Measurement 计算工作量 5 5
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 20 30
合计 header 1440 600

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

代码组织与思路

主要的论文查重算法保存在类PlagiarismCheckerService,方法如下:

检查抄袭论文

该方法接受原始文件路径和被抄袭文件路径作为参数,并输出抄袭论文的查重率。

参数
  • originalFilePath:原始文件路径。
  • copiedFilePath:被抄袭文件路径。
返回值

无。

方法实现
javaCopy Codepublic void checkPlagiarism(String originalFilePath, String copiedFilePath) {
   略
}

在该方法中,首先调用 readFileSentences 方法读取原始文件和被抄袭文件的句子列表,并将它们分别保存在 originalSentencescopiedSentences 列表中。然后调用 countMatchingSentences 方法计算在被抄袭文件中有多少句子与原始文件中的句子相匹配,并将匹配的句子数量保存在 matchingSentenceCount 变量中。接着调用 calculatePlagiarismRate 方法根据匹配的句子数量和被抄袭文件中总句子数量计算出抄袭论文的查重率,并将结果保存在 plagiarismRate 变量中。最后,使用 System.out.println 将查重率输出到控制台。

读取文件句子列表

该方法接收文件路径参数,并返回一个包含句子的列表。

参数
  • filePath:文件路径。
返回值

返回一个包含句子的列表。

方法实现
javaCopy Codeprivate List<String> readFileSentences(String filePath) throws IOException {
    略
}

在该方法中,首先使用 Paths.get(filePath) 创建一个 Path 对象来表示文件的路径。然后使用 Files.lines(path) 获取该文件的所有行,并返回一个字符串流 lines。接下来,创建一个空列表 sentences 用于存储句子。对于 lines 流中的每一行:

  • 使用正则表达式 "[,,。.?!!;;]" 将当前行分割为句子,并将分割得到的句子存储在 sentenceArray 数组中。

  • 遍历 sentenceArray数组中的每个句子:使用 StringUtils.isNotEmpty(sentence.trim()) 判断句子是否为空,如果不为空,则将其去除首尾空格后加入 sentences 列表中。 最后,关闭流 lines 并返回存储句子的列表 sentences

统计匹配句子数量

该方法接收原始句子列表和被抄袭句子列表作为参数,并返回匹配句子的数量。

参数
  • originalSentences:原始句子列表。
  • copiedSentences:被抄袭句子列表。
返回值

返回匹配句子的数量。

方法实现
javaCopy Codeprivate int countMatchingSentences(List<String> originalSentences, List<String> copiedSentences) {
  略
}

在该方法中,首先创建一个 Set 集合 originalSet 存储原始句子,以便快速查找是否存在相同的句子。然后创建一个变量 matchingSentenceCount 并初始化为0,用于计算匹配句子的数量。接着遍历被抄袭句子列表 copiedSentences 中的每个句子:

  • 如果 originalSet 集合中包含当前句子 copiedSentence,则将 matchingSentenceCount 加1。 最后返回 matchingSentenceCount

计算查重率

该方法接收匹配句子的数量和被抄袭句子的总数量作为参数,并返回查重率。

参数
  • matchingSentenceCount:匹配句子的数量。
  • copiedSentenceCount:被抄袭句子的总数量。
返回值

返回查重率。

方法实现
javaCopy Codeprivate double calculatePlagiarismRate(int matchingSentenceCount, int copiedSentenceCount) {
    return (double) matchingSentenceCount / copiedSentenceCount * 100;
}

在该方法中,使用 (double) matchingSentenceCount / copiedSentenceCount * 100 计算匹配句子的百分比,并将结果作为查重率返回。

改进思路

  1. 将文本内容对比的遍历用Stream流处理(流处理底层采用多线程并发,从而提高效率)

测试

运行截图:

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

文件读取错误:当输入文件路径无效或文件无法读取时,程序将捕获并报告错误。
截图:

总结

代码质量综合评分

  1. 算法的性能
    • 时间复杂度:算法在处理大型文档时具有较低的时间复杂度,可以在较短的时间内计算出准确的结果。
    • 空间复杂度:程序的内存占用保持在合理的范围内,没有出现明显的资源浪费问题。
    • 准确度:通过大量测试,我们的程序能够准确地计算两篇文档之间的相似度,并提供可靠的结果。
  2. 代码的可读性
    • 注释:提供了详细的注释。
    • 代码结构:清晰易懂。

展望

本次开发经验使我们对项目开发流程有了更深入的了解,但仍有改进的空间。在今后的学习和实践中,我们将继续努力提升自己的技能,进一步改进代码的质量和性能。

标签:文件,抄袭,个人,项目,列表,matchingSentenceCount,方法,句子
From: https://www.cnblogs.com/ReAx/p/17718643.html

相关文章

  • 个人项目
    工程概论作业二:论文查重这个作业属于哪个课程工程概论作业要求作业要求这个作业的目标学习论文查重方法,了解GitHub基本操作需求题目:论文查重描述如下:设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输......
  • 个人项目:论文查重
    一、作业链接链接:github链接二、PSP表格个人开发流程预计耗时实际耗时计划605估计这个任务需要多少时间3015开发600需求分析(包括学习新技术)60生成设计文档30设计复审60代码规范(为目前的开发制定合适的规范)30具体设计60具体......
  • 【Java】个人项目互评——中小学数学卷子自动生成程序
     目录一、简介二、项目要求三、测试与分析1、功能测试2、代码分析四、项目总结1、代码优点2、代码缺点五、结语一、简介本博客用于分析和总结我的结对编程队友王晓婧的个人项目代码,代码使用语言为Java,与本......
  • 个人项目互评
    代码:软件2102王珏评价:软件2102刘良宸一、项目介绍用户:小学、初中和高中数学老师。功能:1、命令行输入用户名和密码,两者之间用空格隔开(程序预设小学、初中和高中各三个账号,具体见附表),如果用户名和密码都正确,将根据账户类型显示“当前选择为XX出题”,XX为小学、初中和高中三个......
  • HNU个人项目分析互评
    笔者:万宇龙项目作者:梁钰项目目标个人项目:中小学数学卷子自动生成程序用户:小学、初中和高中数学老师。功能:命令行输入用户名和密码,两者之间用空格隔开(程序预设小学、初中和高中各三个账号,具体见附表),如果用户名和密码都正确,将根据账户类型显示“当前选择为XX出题”,XX为小......
  • 软件工程导论个人项目互评
    评价人:软件2101谢先衍评价对象:软件2101方毅前言个人项目是实现一个中小学数学卷子自动生成程序,用户为小学、初中和高中老师,老师可以登录自己的账号生成对应年级的题目并保存到对应的文件夹下,并且还可以切换年级以生成不同难度的题目。具体要求如下:1、命令行输入用户名和密码......
  • 软件工程导论——对结对伙伴袁永杰的个人项目评价
    一前言   很感谢老师安排的这次互评,我从伙伴的代码中得到了一些收获,也对Java编程有了更多的理解,思维也变得更加清晰。同伴选择的也是Java,基于面向对象的思想,在进行评价的同时我也会学习他的优点,不断努力进步。二项目需求与评分标准用户:小学、初中和高中数学老师。功......
  • 与结对队友的个人项目互评
    与我结对的队友是木拉迪力.艾海提同学,接下来我来分析一下他的个人项目:#include<iostream>#include<string>#include<fstream>#include<ctime>#include<cstdlib>usingnamespacestd;classTeacher{public:Teacher();Teacher(stringusername,stringpwd,str......
  • hnu个人项目互评
    对同伴宋玉为的个人项目的互评:1.代码运行结果1.1登录效果:1.2出题效果:出题有提示题目文件保存在绝对路径,为txt格式,题目前有序号,但是题目之间没有空行。 1.3切换效果:输入错误的指令有提示,输入正确的指令切换成功。初中题目:  高中题目,某些题目被大括号扩了起来。......
  • 【个人项目互评】——中小学数学试卷生成系统
    项目名称:中小学数学试卷生成系统编程语言:java代码作者:符南山评价人:秦凯一、简介我与符南山同学结对,并且都是采用java语言。因此下面博客,我们以java的角度来测试分析南山同学的代码,功能。通过这次互评来互相学习彼此间的优点,同时认识到自己的不足,来提升自己的编程思维。二......