链接
[Github 仓库链接](1426219409/201921011063 (github.com))
作业要求
这个作业属于哪个课程 | 工程概论 |
---|---|
这个作业要求在哪里作业要求 | 作业要求 |
这个作业的目标 | 完成论文查重项目 |
开发环境
pycharm 命令行
PSP 2.1 表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 60 |
· Estimate | ·估计这个任务需要多少开发时间 | 350 | 540 |
Development | 开发 | 360 | 540 |
· Analysis | ·需求分析(包括学习新技术) | 30 | 140 |
· Design Spec | ·生成设计文档 | 30 | 60 |
· Design Review | ·设计复审 | 10 | 20 |
· Coding Standard | ·代码规范(为目前的开发制定合适的规范) | 10 | 20 |
·Design | ·具体设计 | 50 | 70 |
· Coding | ·具体编码 | 110 | 140 |
· Code Review | ·代码复审 | 20 | 40 |
· Test | ·测试(自我测试,修改代码,提交代码) | 20 | 30 |
Reporting | 报告 | 40 | 40 |
·Test Repor | 测试报告 | 50 | 20 |
· Size Measurement | ·计算工作量 | 5 | 10 |
· Postmortem & Process Improvement Plan | ·事后总结 | 20 | 30 |
·合计 | 1135 | 1760 |
计算模块接口的设计与实现过程
代码组织
我们的项目包括以下几个主要部分:
-
参数解析部分:使用
argparse
库解析命令行参数,指定原文文件路径、抄袭版论文文件路径和输出答案文件路径。 -
预处理部分:
preprocess_text
函数对输入的文本进行预处理,去除标点符号、数字和特殊字符,并将文本分割成词列表。 -
余弦相似度计算部分:
calculate_cosine_similarity
函数计算两个文档之间的余弦相似度。它使用词频字典和词向量表示文档,并计算它们之间的余弦相似度。 -
主函数部分:
main
函数是程序的主要逻辑部分。它调用其他函数来读取文件内容、进行预处理和计算相似度,并将结果写入输出文件。 -
文件读写部分:使用
open
函数打开原文文件、抄袭版论文文件和输出文件,并使用文件操作读取和写入文件内容。
需要注意的是,上述代码片段并没有包含完整的项目
算法关键
- 文本预处理:使用正则表达式来清理文本,并将其分割为单词列表(在这种情况下是中文字符列表),以便于后续分析。
- 余弦相似度:使用余弦相似度算法来计算两篇文档之间的相似度。
消耗最大的函数
calculate_cosine_similarity
运行截图
![1e17fcc6-fb1b-4822-8e4a-bc99c0c3af83](file:///D:/%E5%9B%BE%E7%89%87/Typedown/1e17fcc6-fb1b-4822-8e4a-bc99c0c3af83.png)
我们设计了几种异常处理情况,包括:
-
报告文件编码格式不对
![bb10758f-1872-4a93-8882-6244ab493d2a](file:///D:/%E5%9B%BE%E7%89%87/Typedown/bb10758f-1872-4a93-8882-6244ab493d2a.png)
解决方法:将代码中编码换成其他编码格式
代码质量综合评分
-
可读性:代码的命名和注释清晰,易于理解。变量和函数名具有描述性,注释提供了对函数和参数的解释。整体上,代码结构清晰,易于阅读和理解。
-
可维护性:代码使用了模块化的设计,将功能划分为独立的函数,提高了可维护性。函数功能单一且独立,易于修改和维护。代码风格和格式一致,增加了代码的可读性和可维护性。
-
性能:代码在计算余弦相似度时使用了NumPy库,利用其向量化操作提高了计算性能。同时,使用Counter类来计算词频,避免了手动编写循环,进一步提高了性能。
-
可扩展性:代码结构较简单,容易扩展。可以通过添加新的函数或修改现有函数来支持更多的功能或处理更多的文档。需要注意的是,代码片段本身并没有提供扩展性的示例,但是其整体结构和设计有助于后续扩展。
-
错误处理:代码没有提供明确的错误处理机制。例如,在文件打开和读取过程中可能会出现异常,但是代码没有捕获和处理这些异常。为了提高代码的鲁棒性,可以添加适当的错误处理和异常处理机制。
展望
尝试测试代码的可行性