论文查重
这个作业属于哪个课程 | 2023软件工程——双学位 |
---|---|
这个作业要求在哪里 | 作业要求 |
Gitcode仓库地址
实现过程与模块设计
实现过程
- 获取论文内容,用字符串保存
- 将获得的字符串内容利用jieba进行分词,以列表的形式储存
- 统计词频,并返回由词和词频组成的字典
- 通过余弦定理计算相似度
模块设计
- jieba
jieba.lcut(string,cut_all=False)
利用这个代码可将句子分成单词的形式
例如:
“我在广东工业大学第二食堂吃饭”
可被分为
“我 在 广东 工业 大学 第二 食堂 吃饭”
2. Counter
用于快速计数,例如:
from collections import Counter
cnt = Counter()
for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']:
cnt[word] += 1
print cnt
结果为:
Counter({'blue': 3, 'red': 2, 'green': 1})
- 用余弦定理计算相似度
将两篇文章的词频化作两个向量,然后计算cos的值,该值为文章的相似度。值越大,则说明文章越相似
性能检测
利用cProfile模块中的cProfile.run() 函数对程序进行性能检测。结果如下图所示:
单元测试
利用python自带的unittest进行单元测试
测试函数与结果如下图所示:
测试的两个文件为orig.txt与orig_0.8_add.txt
结果与预期相符,测试通过。
异常处理
当用户输入的文档地址错误或文档不存在时,需要反馈给用户
函数为
if not os.path.exists(path1) : #异常处理
print("论文原文文件不存在!")
exit()
if not os.path.exists(path2):
print("抄袭版论文文件不存在!")
exit()
当输入的论文地址错误或不存在时:
PSP表格
PSP | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 60 | 120 |
·Estimate | ·估计这个任务需要多少时间 | 60 | 120 |
Development | 开发 | 830 | 1080 |
· Analysis | ·需求分析 (包括学习新技术) | 480 | 600 |
·Design Spec | · 生成设计文档 | 60 | 60 |
·Design Review | ·设计复审 | 30 | 30 |
· Coding Standard | · 代码规范(为目前的开发制定合适的规范) | 10 | 10 |
·Design | ·具体设计 | 30 | 60 |
·Coding | ·具体编码 | 150 | 180 |
·具体编码 | ·代码复审 | 10 | 20 |
·Test | ·测试(自我测试,修改代码,提交修改) | 60 | 120 |
Reporting | 报告 | 180 | 210 |
·Test Repor | ·测试报告 | 90 | 100 |
·Size Measurement | ·计算工作量 | 30 | 40 |
·Postmortem & Process Improvement Plan | ·事后总结, 并提出过程改进计划 | 60 | 70 |
Total | 总计 | 1070 | 1410 |
参考文献:
余弦相似性查找相似文http://www.ruanyifeng.com/blog/2013/03/cosine_similarity.html