论文查重

这个作业属于哪个课程 2023软件工程——双学位
这个作业要求在哪里 作业要求

Gitcode仓库地址

地址

实现过程与模块设计

实现过程

  • 获取论文内容,用字符串保存
  • 将获得的字符串内容利用jieba进行分词,以列表的形式储存
  • 统计词频,并返回由词和词频组成的字典
  • 通过余弦定理计算相似度

模块设计

  1. 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})
  1. 用余弦定理计算相似度
    将两篇文章的词频化作两个向量,然后计算cos的值,该值为文章的相似度。值越大,则说明文章越相似

性能检测

利用cProfile模块中的cProfile.run() 函数对程序进行性能检测。结果如下图所示:
image

单元测试

利用python自带的unittest进行单元测试
测试函数与结果如下图所示:
image
测试的两个文件为orig.txt与orig_0.8_add.txt
结果与预期相符,测试通过。

异常处理

当用户输入的文档地址错误或文档不存在时,需要反馈给用户
函数为

if not os.path.exists(path1) :  #异常处理
        print("论文原文文件不存在!")
        exit()
    if not os.path.exists(path2):
        print("抄袭版论文文件不存在!")
        exit()

当输入的论文地址错误或不存在时:
image

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

posted @ 2023-03-11 11:48  bkshape  阅读(47)  评论(0编辑  收藏  举报