首页 > 其他分享 >软件工程-个人项目

软件工程-个人项目

时间:2023-09-16 15:46:17浏览次数:39  
标签:String 个人 项目 readTxt TxtIOUtils 软件工程 test txt public

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/CSGrade21-34/
这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/CSGrade21-34/homework/13023
这个作业的目标 完成一个论文查重系统
github链接 https://github.com/SoyoOfficial/SoyoOfficial

PSP表格

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

需求

题目:论文查重

描述如下:

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

  • 原文示例:今天是星期天,天气晴,今天晚上我要去看电影。
  • 抄袭版示例:今天是周天,天气晴朗,我晚上要去看电影。

要求输入输出采用文件输入输出,规范如下:

  • 从命令行参数给出:论文原文的文件的绝对路径。
  • 从命令行参数给出:抄袭版论文的文件的绝对路径。
  • 从命令行参数给出:输出的答案文件的绝对路径。

  • MainPaperCheck:main 方法所在的类
  • HammingUtils:计算海明距离的类
  • SimHashUtils:计算 SimHash 值的类
  • TxtIOUtils:读写 txt 文件的工具类
  • ShortStringException:处理文本内容过短的异常类

流程图

接口的设计和实现

读写txt文件的模块

类:TxtIOUtils
包含了两个静态方法:
1、readTxt:读取txt文件
2、writeTxt:写入txt文件

SimHash模块

类:SimHashUtils
包含了两个静态方法:
1、getHash:传入String,计算出它的hash值,并以字符串形式输出,(使用了MD5获得hash值)
2、getSimHash:传入String,计算出它的simHash值,并以字符串形式输出,(需要调用 getHash 方法)

海明距离模块

类:HammingUtils
包含了两个静态方法:
1、getHammingDistance:输入两个 simHash 值,计算出它们的海明距离 distance
2、getSimilarity:输入两个 simHash 值,调用 getHammingDistance 方法得出海明距离 distance,在由 distance 计算出相似度。

main主模块

main 方法的主要流程:

1.从命令行输入的路径名读取对应的文件,将文件的内容转化为对应的字符串
2.由字符串得出对应的 simHash值
3.由 simHash值求出相似度
4.把相似度写入最后的结果文件中
5.退出程序

性能分析


单元测试

public class TxtIOUtilsTest { @Test public void readTxtTest() { // 路径存在,正常读取 String str = TxtIOUtils.readTxt("D:/test/orig.txt"); String[] strings = str.split(" "); for (String string : strings) { System.out.println(string); } } @Test public void writeTxtTest() { // 路径存在,正常写入 double[] elem = {0.11, 0.22, 0.33, 0.44, 0.55}; for (int i = 0; i < elem.length; i++) { TxtIOUtils.writeTxt(elem[i], "D:/test/ans.txt"); } } @Test public void readTxtFailTest() { // 路径不存在,读取失败 String str = TxtIOUtils.readTxt("D:/test/none.txt"); } @Test public void writeTxtFailTest() { // 路径错误,写入失败 double[] elem = {0.11, 0.22, 0.33, 0.44, 0.55}; for (int i = 0; i < elem.length; i++) { TxtIOUtils.writeTxt(elem[i], "User:/test/ans.txt"); } } }
测试结果:

覆盖率:

public class SimHashUtilsTest { @Test public void getHashTest(){ String[] strings = {"余华", "是", "一位", "真正", "的", "作家"}; for (String string : strings) { String stringHash = SimHashUtils.getHash(string); System.out.println(stringHash.length()); System.out.println(stringHash); } } @Test public void getSimHashTest(){ String str0 = TxtIOUtils.readTxt("D:/test/orig.txt"); String str1 = TxtIOUtils.readTxt("D:/test/orig_0.8_add.txt"); System.out.println(SimHashUtils.getSimHash(str0)); System.out.println(SimHashUtils.getSimHash(str1)); } }
测试结果:

覆盖率:

public class HammingUtilsTest { @Test public void getHammingDistanceTest() { String str0 = TxtIOUtils.readTxt("D:/test/orig.txt"); String str1 = TxtIOUtils.readTxt("D:/test/orig_0.8_add.txt"); int distance = HammingUtils.getHammingDistance(SimHashUtils.getSimHash(str0), SimHashUtils.getSimHash(str1)); System.out.println("海明距离:" + distance); System.out.println("相似度: " + (100 - distance * 100 / 128) + "%"); } }
测试结果:

覆盖率:

public class MainTest { @Test public void origAndAllTest(){ String[] str = new String[6]; str[0] = TxtIOUtils.readTxt("D:/test/orig.txt"); str[1] = TxtIOUtils.readTxt("D:/test/orig_0.8_add.txt"); str[2] = TxtIOUtils.readTxt("D:/test/orig_0.8_del.txt"); str[3] = TxtIOUtils.readTxt("D:/test/orig_0.8_dis_1.txt"); str[4] = TxtIOUtils.readTxt("D:/test/orig_0.8_dis_10.txt"); str[5] = TxtIOUtils.readTxt("D:/test/orig_0.8_dis_15.txt"); String ansFileName = "D:/test/ansAll.txt"; for(int i = 0; i <= 5; i++){ double ans = HammingUtils.getSimilarity(SimHashUtils.getSimHash(str[0]), SimHashUtils.getSimHash(str[i])); TxtIOUtils.writeTxt(ans, ansFileName); } } }
测试结果:

异常处理

当文本长度太短时,HanLp无法取得关键字,需要抛出异常。
try{ if(str.length() < 200) throw new ShortStringException("文本过短!"); }catch (ShortStringException e){ e.printStackTrace(); return null; }

标签:String,个人,项目,readTxt,TxtIOUtils,软件工程,test,txt,public
From: https://www.cnblogs.com/ajisai/p/17706806.html

相关文章

  • idea中启动maven项目报错:程序包lombok.extern.slf4j不存在问题如何解决
    idea中启动maven项目报错:程序包lombok.extern.slf4j不存在问题如何解决1.现象:在springboot的maven项目启动时,报错:Error:(3,27)java:程序包lombok.extern.slf4j不存在错误,编译不报错,maven依赖也合适,项目就是无法启动,现象截图如下:其实不是项目本身或者maven本身的问题,而是......
  • rust_trait个人理解
    0概述什么是traitrust中有许许多多的类型(枚举、结构体...),如果这些不同类型,都有类似的行为,我们把这个行为抽象出来,把他定义为一个特征(trait)一个trait中可以包含,一个或者一组行为,表现形式就是方法or函数1特征约束1.1特征约束1.2特征做函数参数的语法糖真特么nb,看下......
  • Go 项目的 MAKE 工具
    Go项目的MAKE工具MAKE工具是Linux和Unix系统中一种常见的自动化构建工具,通常用于管理和组织软件项目。在Go语言中,使用MAKE工具可以轻松地管理和构建项目,并自动执行诸如编译、测试、安装等复杂的操作。下面将介绍如何在Go项目中使用MAKE工具,并说明其主要优势......
  • maven 创建项目
    目录一:  配置Maven1:Maven是什么2、Maven安装--windows3:Maven配置文件二:Ecplise maven配置三:Eclipse maven 创建父子项目1、创建父级工程2、创建Maven子工程 --->  jar包子工程创建3.创建Maven子工程 ---> war包子工程创建一:  配置Maven1:Maven是什么......
  • 个人项目:论文查重
    1.项目地址Nurali524/3121004877(github.com)2.PSP表格PSP2.1PersonalSoftwareProcessStages预估耗时(分钟)实际耗时(分钟)·Planning计划4030·Estimate估计这个任务需要多少时间510·Development开发200250·Analysis需求分析(包括学习新技术......
  • 软件工程--个人项目
    软件工程个人项目1.作业概述这个作业属于哪个课程软件工程这个作业的要求在哪里个人项目这个作业的目标设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率Github链接链接2.需求分析题......
  • 2023软件工程02---2023021858刘毅
    最想学习的技术:kafka以下学习内容是我结合Kafka官方文档总结下来的技术学习文档入门阶段:入门书籍和网络资源:书籍:《Kafka权威指南》(Confluent团队编写)。官方网站:ApacheKafka。基础知识:了解Kafka的基本概念,如Producer、Consumer、Topic、Partition、Broker等。安装和......
  • 物联网项目-温湿度-Web后台
    0、背景物联网温湿度检测管理后台,使用“若依”后台管理系统开发。技术栈:SpringBoot,Mybatis,Shiro,Thymeleaf,Bootstrap。1、界面展示设备管理设备状态仪表台设备日志定时任务-终端在线状态检测......
  • Vue项目报TypeError: Cannot read properties of undefined (reading '_wrapper')
    前情最近在做一个营销活动的时候,我选择了Vue技术栈来开发。坑位项目看似一切都正常,但当我在绑定的js事件中去修改当前组件的data上的值时会报错:TypeError:Cannotreadpropertiesofundefined(reading'_wrapper')。报错信息指向vue.runtime.esm.js,不太好定位,一度怀疑是不......
  • 快速分析项目状况!试试这款项目代码统计 IDEA 插件—— Statistic
    前言InteIIiJIDEA2023.2版本发布了,在2023.2中,官方根据用户的宝贵反馈对新UI做出了大量改进,新UI界面大大减少了干扰,可以让用户更好地专注于代码。但官方激活码的校验规则进行了更新,之前已经成功激活的Idea可能突然无法使用了,给大家准备了激活码:IDEA激活 https://www.kdocs.c......