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

个人项目

时间:2024-09-14 20:51:38浏览次数:1  
标签:个人 项目 System catch println txt FileUtil out

所属课程 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34
作业要求 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13229
作业目标 学会github的使用,熟悉markdown格式,熟悉个人开发流程,了解项目单元测试

Github链接: https://github.com/Qiteng925/Qiteng925

运行环境:MAC OS操作系统 IntelliJ IDEA 2022

1.PSP表格

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

2. 模块接口设计

2.1 流程图

2.2 算法实现

利用SimHash和海明距离,通过具体分析与实现,使用海明距离来衡量文本内容的相似度。

算法关键

  1. 分词:使用糊涂工具包中的TokenizerEngine进行分词处理,并通过hankc作为分词工具,遍历词汇和词频的结果树,计算余弦相似度。

  2. 计算文本相似度:采用如下的向量余弦计算模型来衡量文本相似度。

参考资料:SimHash原理

2.3 类

类名 分类
Main 主函数类
FileUtil 工具类
SimHashUtil 工具类

![image-20240914200200366](/Users/yiyan/Library/Application Support/typora-user-images/image-20240914200200366.png)

2.4 函数

函数名 功能 归属的类
readFile() 读取文件 FileUtil类
writeFile() 写入文件 FileUtil类
getHash() 计算字符串的hash值并输出字符串 SimHashUtil类
getSimHash() 计算simHash值并输出字符串 SimHashUtil类
getHammingDistance() 比较两个simHash值,计算它们的海明距离 SimHashUtil类
getSimilarity() 计算相似度 SimHashUtil类

函数之间的关系

getSimHash() 函数内部调用了 getHash() 函数,而 getHammingDistance() 的输入则是 getSimHash() 的输出结果。

关键函数流程图(SimHashUtil函数)

3. 代码性能分析图

通过观察性能分析图,我对代码进行了微调,从而实现了程序的优化。

4. 单元测试展示

4.1 测试代码

工具类

public class FileUtilTest {
    @Test
    public void test01(){
        try {
            FileUtil.readFile("/Users/yiyan/Desktop/3122004761.txt/src/main/java/com/example/papercheck/测试文本/aaa.txt");
        } catch (IOException e) {
            System.out.println("文件不存在");
        }catch (FileIsNotTxtException e){
            System.out.println("文件格式不对");
        }
    }

    @Test
    public void test02(){
        try {
            FileUtil.readFile("/Users/yiyan/Desktop/3122004761.txt/src/main/java/com/example/papercheck/测试文本/orig.doc");
        } catch (IOException e) {
            System.out.println("文件不存在");
        }catch (FileIsNotTxtException e){
            System.out.println("文件格式错误");
        }
    }

}

核心类

public class MainTest {
    @Test
    public void mainTest() {
        String[] s = new String[3];

        s[0] = "/Users/yiyan/Desktop/3122004761.txt/src/main/java/com/example/papercheck/测试文本/orig.txt";
        s[1] = "/Users/yiyan/Desktop/3122004761.txt/src/main/java/com/example/papercheck/测试文本/orig_0.8_add.txt";
        s[2] = "/Users/yiyan/Desktop/3122004761.txt/src/main/java/com/example/papercheck/测试文本/ans.txt";
        String simHash0;
        String simHash1;
        String str0;
        String str1;
        //if (args.length < 3) return;
        try {
            str0 = FileUtil.readFile(s[0]);
            str1 = FileUtil.readFile(s[1]);
        } catch (IOException e) {
            System.out.println("找不到指定文件");
            return;
        } catch (FileIsNotTxtException e) {
            System.out.println("文件格式错误");
            return;
        }

        simHash0 = SimHashUtil.getSimHash(str0);
        simHash1 = SimHashUtil.getSimHash(str1);

        double similarity = SimHashUtil.getSimilarity(simHash0, simHash1);
        System.out.print("相似度: ");
        System.out.println(similarity);
        try {
            FileUtil.writeFile(s[2], String.valueOf(similarity));
            System.out.println("结果写入文件 "+s[2]+" 完成");
        } catch (IOException e) {
        }
        System.out.println("计算结束,程序自动退出");
    }
}

4.2 测试结果

文件工具类测试

查重测试

ans.txt

4.3 测试覆盖率

5.异常处理

文件不存在异常设计

class FileIsNotTxtException extends Exception {
    public FileIsNotTxtException() {
        super();
    }
}

异常处理示例

文件不存在

@Test
public void test01(){
    try {
        FileUtil.readFile("/Users/yiyan/Desktop/3122004761.txt/src/main/java/com/example/papercheck/测试文本/aaa.txt");
    } catch (IOException e) {
        System.out.println("文件不存在");
    }catch (FileIsNotTxtException e){
        System.out.println("文件格式不对");
    }
}

文件格式异常

@Test
public void test02(){
    try {
        FileUtil.readFile("/Users/yiyan/Desktop/3122004761.txt/src/main/java/com/example/papercheck/测试文本/orig.doc");
    } catch (IOException e) {
        System.out.println("文件不存在");
    }catch (FileIsNotTxtException e){
        System.out.println("文件格式错误");
    }
}

6. 作业总结

通过查阅资料,我学会了如何使用 GitHub,并掌握了软件项目的基本流程。借助 PSP 表格,我对时间的分配有了更清晰的认识。此外,我还学习了如何使用 Jprofiler 进行性能测试,以及掌握了 Maven 作为项目管理工具的使用。希望在接下来的课程学习中,能够进一步深入理解软件工程的相关知识。

标签:个人,项目,System,catch,println,txt,FileUtil,out
From: https://www.cnblogs.com/guazai/p/18414658

相关文章

  • 个人项目
    这个作业属于哪个课程https://edu.cnblogs.com/campus/gdgy/CSGrade22-12这个作业要求在哪里https://edu.cnblogs.com/campus/gdgy/CSGrade22-12/homework/13220这个作业的目标学会论文查重算法,学会使用git等操作github地址https://github.com/nurimanguli/322......
  • 个人项目
    这个作业属于哪个课程https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/这个作业要求在哪里https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13229这个作业的目标开发个人项目,实现项目单元测试个人github仓库地址:https://github.com/Kun3M/322200......
  • c语言快递小项目
    structpack_head{  intfd;//通信的文件描述符  unsignedchartype; //消息类型  unsignedcharusertype;//用户类型:1:用户 2:快递员   charname[32]; //用户名  charpaaswd[32];//密码  charbuf[32]; //调试信息  stru......
  • 【来学Vue吧】创建一个Vue项目
    ......
  • 将项目里的moment替换为day.js
    day.js有和moment.js完全一样的API,但是它的体积却比moment要小的很多,moment打包后的体积有280kb左右,而day.js打包后只有6.3KB。它非常轻量化,因为它可以利用treeShaking如果你的项目里面使用的是moment.js,而你想要把它替换成day.js,很简单,直接使用一个webpack插件即可,而无需做任何......
  • 5 个最佳开源无代码项目管理工具
    想象一下,你是一名项目经理,每天早上刚坐到办公桌前,咖啡还在手里,你的手机和电脑屏幕上已经被各种未完成的任务、项目更新和团队消息填满。你快速浏览着的电子邮件,分配任务的通知不断弹出,而每一个通知都要求你迅速做出决策。与此同时,团队成员纷纷通过即时消息工具询问进度更新、讨......
  • 图像生成技术飞速发展,个人化艺术创造还有多远?
    图像生成技术飞速发展,个人化艺术创造还有多远?通义万相文本绘图与人像美化希望图像生成类应用具备哪些功能通义万相改进建议在当今这个创意与科技交织的时代,图像生成技术正以前所未有的速度重塑视觉艺术的边界。不管你是否有艺术细胞,不管你是否接受了系统的艺术创作教育,你都可以......
  • 个人项目
    这个作业属于哪个课程https://edu.cnblogs.com/campus/gdgy/CSGrade22-12这个作业要求在哪里https://edu.cnblogs.com/campus/gdgy/CSGrade22-12/homework/13220这个作业的目标完整地做一次项目、掌握测试工具、掌握处理异常方法1.Github仓库中新建学号为名的文......
  • 前端项目通过 Nginx 发布至 Linux,并通过 rewrite 配置访问后端接口
    〇、前言本文通过将arco框架的前端项目,部署至CentOS7,并访问同服务器的WebAPI接口,来简单演示一下,如何将前端项目发布至Linux系统。关于ASP.NETWebAPI发布至Linux的步骤,可以参考博主过往文章:https://www.cnblogs.com/hnzhengfy/p/18384107/webapi_centos。一、简......
  • 记一次 公司.NET项目部署在Linux环境压测时 内存暴涨分析
    一:背景讲故事公司部署在某碟上的项目在9月份压测50并发时,发现某个容器线程、内存非正常的上涨,导致功能出现了异常无法使用。根据所学,自己分析了下线程和内存问题,分析时可以使用lldb或者windbg,但是个人比较倾向于界面化的windbg,所以最终使用windbg开干。二:WinDbg分析到底是......