第一次个人编程作业

个人项目

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/Networkengineering1834
这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/Networkengineering1834/homework/11146
这个作业的目标 使用 java、C 或 python 编程语言开发论文查重功能,测试代码性能和覆盖率,并学会用 PSP 表格记录开发过程

github 仓库

第一次个人编程作业 —— 论文查重


PSP

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

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

设计思路
  • 从文档中读取文本内容
  • 使用 jieba 将文本内容进行分词
  • 计算各个文本的词频和逆文本频率
  • 通过余弦向量计算文本相似度
实现过程


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

单元测试代码
@Test
public void testParticiple() throws IOException {
    String content = "我喜欢软工这门课,它让我学到了很多";
    String[] res = check_paper.participle(content);
    for (String word : res) {
        System.out.println(word);
    }
}

测试分词函数:随意输入一段文本,该函数会将文本内容进行划分,提取出关键词汇。
分词函数的代码覆盖率

@Test
public void testWordFreq() throws IOException {
    String[] content = {"喜欢", "软工", "这门", "课", "让我", "学到了", "很多"};
    Map<Object, Object> res = check_paper.wordFreq(content);
    System.out.println(res);
}

测试词频函数:将分词后的数据传入该函数,计算出该关键词的词频。
词频函数的代码覆盖率

@Test
public void testMain() throws IOException {
    String[] paths = {
            "D:\\IDEA\\check_paper\\src\\paper\\orig.txt",
            "D:\\IDEA\\check_paper\\src\\paper\\orig_0.8_add.txt",
            "D:\\IDEA\\check_paper\\src\\paper\\result.txt"
    };
    check_paper.main(paths);
}

测试主函数:获取两个文本后进行分词,计算关键词的词频,再计算tfidf,最后得出词向量获取文本相似度。
主函数的代码覆盖率

测试抄袭文本
原文路径:D:\IDEA\check_paper\src\paper\orig.txt		抄袭论文路径:D:\IDEA\check_paper\src\paper\orig_0.8_add.txt
查重率:0.93

原文路径:D:\IDEA\check_paper\src\paper\orig.txt		抄袭论文路径:D:\IDEA\check_paper\src\paper\orig_0.8_del.txt
查重率:0.98

原文路径:D:\IDEA\check_paper\src\paper\orig.txt		抄袭论文路径:D:\IDEA\check_paper\src\paper\orig_0.8_dis_1.txt
查重率:0.98

原文路径:D:\IDEA\check_paper\src\paper\orig.txt		抄袭论文路径:D:\IDEA\check_paper\src\paper\orig_0.8_dis_10.txt
查重率0.93

原文路径:D:\IDEA\check_paper\src\paper\orig.txt		抄袭论文路径:D:\IDEA\check_paper\src\paper\orig_0.8_dis_15.txt
查重率:0.83


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

性能测试




代码覆盖率


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

论文路径出错:要求重新输入


参考资料:

  1. TF-IDF与余弦相似性的应用(一):自动提取关键词
  2. TF-IDF与余弦相似性的应用(二):找出相似文章
posted @ 2020-09-25 01:17  Yichacha  阅读(108)  评论(0编辑  收藏  举报