软工作业2:python实现论文查重
软件工程 | https://edu.cnblogs.com/campus/gdgy/CSGrade21-12 |
---|---|
作业要求 | https://edu.cnblogs.com/campus/gdgy/CSGrade21-12/homework/13014 |
作业目标 | 了解熟悉个人开发流程,实现项目单元测试,使用python实现论文查重软件,使用命令行参数 |
PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 20 |
Estimate | 估计这个任务需要多少时间 | 20 | 15 |
Development | 开发 | 300 | 400 |
Analysis | 需求分析 (包括学习新技术) | 80 | 120 |
Design Spec | 生成设计文档 | 40 | 50 |
Design Review | 设计复审 | 20 | 30 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 20 | 20 |
Design | 具体设计 | 60 | 80 |
Coding | 具体编码 | 100 | 120 |
Code Review | 代码复审 | 20 | 30 |
Test | 测试(自我测试,修改代码,提交修改) | 60 | 80 |
Reporting | 报告 | 60 | 70 |
Test Repor | 测试报告 | 20 | 40 |
Size Measurement | 计算工作量 | 20 | 20 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 30 | 10 |
合计 | 880 | 1105 |
模块与接口设计
remove_punctuation(text):
这个函数负责接受一个文本字符串并删除其中的标点符号。这个函数是一个文本预处理步骤,用于清理文本数据。
read_file(file_path):
这个函数用于从文件中读取文本内容,接受文件路径作为参数,返回读取的文本内容。它用于读取原始论文和要检查的论文。
tokenize_chinese_text(text):
这个函数使用jieba分词工具将中文文本进行分词,返回分词后的文本字符串。这个函数用于将文本转换为可用于相似性计算的格式。
calculate_similarity(original_text, text_to_check):
这个函数接受两个文本字符串,分别是原始论文和要检查的论文,然后使用TF-IDF向量化方法计算它们之间的余弦相似性。最后,它将相似性值保留小数点后两位并返回。
main():
主函数是程序的入口点,它负责解析命令行参数,调用其他函数来执行查重任务,最后将查重结果写入输出文件。
模块之间的关系:
remove_punctuation、read_file、tokenize_chinese_text 和 calculate_similarity 这些函数都是被 main 函数调用的,它们分别用于文本预处理、文本读取、文本分词和相似性计算。
main 函数协调了整个查重任务的流程,首先解析命令行参数,然后调用其他函数来完成文本处理和相似性计算,最后将相似性结果写入输出文件。
性能分析
算法实现
去除文本中的标点符号和空格,换行,使用jieba库进行分词后使用TF-IDF向量化方法计算它们之间的余弦相似性
性能瓶颈主要是由第三方库产生的,目前难以优化
单元测试
测试结果:
代码覆盖率
异常处理
文件读取
如果文件未找到,会引发 FileNotFoundError 异常。在这种情况下,你的代码会捕获这个异常,并打印一条错误消息,指出文件未找到。然后,sys.exit(1) 被调用,使程序退出,并返回状态码 1,表示异常终止。
如果除 FileNotFoundError 以外的其他异常发生,同样会被捕获。在这种情况下,代码会打印一条通用错误消息,指示发生了异常,并使用 sys.exit(1) 终止程序
命令行参数
确保参数个数正确