论文查重算法

这个作业属于哪个课程 信安1912
这个作业要求在哪里 个人项目要求
这个作业的目标 设计论文查重算法,学习PSP+单元测试+性能分析+git管理代码

Github链接:

https://github.com/mightbealie/3219005443

PSP表格

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

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

主模块

获取路径下文件内容,输出相似度

Analyse类

Analyse

  • TF-IDF

\[词频(TF)=\frac{某个词在文章中的出现次数}{该文出现次数最多的词的出现次数} \]

\[逆文档频率(IDF)=\log\frac{语料库的文档总数}{包含该词的文档数+1} \]

\[TF-IDF=\times{词频(TF)}{逆文档频率(IDF)} \]

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

性能分析图

注意到答案输出中有这个问题,虽然不影响答案输出,但改进后可以使总体耗时降低

在import jieba库时加入以下这句

import jieba.analyse
jieba.setLogLevel(jieba.logging.INFO)

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

单元测试结果

文本1 文本2 相似度
orig.txt orig_0.8_add.txt 0.85
orig.txt orig_0.8_del.txt 0.75
orig.txt orig_0.8_dis_1.txt 0.90
orig.txt orig_0.8_dis_10.txt 0.70
orig.txt orig_0.8_dis_15.txt 0.65

覆盖率

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

如果在输入路径时输入错误,会导致程序错误运行。需要在开始计算前判断程序是否存在,若存在才继续计算,若不存在则结束程序。

  • 引入 os.path.exists检查文件路径是否存在
  • 在main_test中加入以下代码
    if not os.path.exists(path1) :
        print("论文原文文件不存在!")
        exit()
    if not os.path.exists(path2):
        print("抄袭版论文文件不存在!")
        exit()

自我总结

在这次项目完成中遇到了比较大的困难,由于在代码签入的过程中存在障碍,签入过程不太顺利,于是是在所有代码完成后一次性签入。
本次作业还是让我收获到了很多,比如学会了PSP,代码性能分析,覆盖率分析。