第一次个人编程作业

个人项目

github
https://github.com/shenxinhao-cell/shenxinhao-cell/blob/main/202121331090

这个作业属于哪个课程 工程概论
这个作业要求在哪里 个人项目
这个作业的目标 创建github文件和编写代码查重

需求

题目:论文查重

描述如下:

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

原文示例:今天是星期天,天气晴,今天晚上我要去看电影。
抄袭版示例:今天是周天,天气晴朗,我晚上要去看电影。
要求输入输出采用文件输入输出,规范如下:

从命令行参数给出:论文原文的文件的绝对路径。
从命令行参数给出:抄袭版论文的文件的绝对路径。
从命令行参数给出:输出的答案文件的绝对路径。
我们提供一份样例,课堂上下发,上传到班级群,使用方法是:orig.txt是原文,其他orig_add.txt等均为抄袭版论文。

注意:答案文件中输出的答案为浮点型,精确到小数点后两位

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向量化方法计算它们之间的余弦相似性
img
性能瓶颈主要是由第三方库产生的,目前难以优化

单元测试

img

测试结果:

img
img

代码覆盖率

img

异常处理

文件读取

img

如果文件未找到,会引发 FileNotFoundError 异常。在这种情况下,你的代码会捕获这个异常,并打印一条错误消息,指出文件未找到。然后,sys.exit(1) 被调用,使程序退出,并返回状态码 1,表示异常终止。
如果除 FileNotFoundError 以外的其他异常发生,同样会被捕获。在这种情况下,代码会打印一条通用错误消息,指示发生了异常,并使用 sys.exit(1) 终止程序

命令行参数

img
确保参数个数正确

posted on 2023-09-20 17:40  shenxinhao  阅读(18)  评论(0编辑  收藏  举报

导航