个人项目:论文查重

发布时间 2023-09-17 11:53:28作者: HaaaPY

个人项目

作业属于哪个课程 软件工程
作业要求 作业要求
github地址 作业github地址

PSP

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 20 9
· Estimate · 估计这个任务需要多少时间 20 9
Development 开发 190 174
· Analysis · 需求分析 (包括学习新技术) 30 17
· Design Spec · 生成设计文档 20 11
· Design Review · 设计复审 10 4
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 20 12
· Design · 具体设计 30 23
· Coding · 具体编码 40 67
· Code Review · 代码复审 10 8
· Test · 测试(自我测试,修改代码,提交修改 30 32
Reporting 报告 60 36
· Test Repor · 测试报告 30 23
· Size Measurement · 计算工作量 20 8
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 10 5
· 合计 270 219

需求分析

  • 设计一个论文查重算法,通过给出原文和原文上经过了抄袭版的论文,在答案中输出重复率
  • 文件输入规范
    • 命令行参数给出:论文原文的文件的绝对路径
    • 命令行参数给出:抄袭论文的文件的绝对路径
    • 命令行参数给出:输出答案的绝对路径
  • 给出答案为浮点型,保留后两位小数

流程

image

关键代码

相似度计算

# 计算余弦相似度
# 传入参数为numpy
def cos_similarity(vector1,vector2):
    dot=np.sum(np.dot(vector1,vector2))
    a=np.sum(vector1**2)**0.5
    b=np.sum(vector2**2)**0.5
    return dot/(a*b)

将词句变成向量

def TF(data1,data2):
    count_vec=CountVectorizer()
    data=[data1,data2]
    vec_1=count_vec.fit_transform(data).toarray()[0]
    vec_2=count_vec.fit_transform(data).toarray()[1]
    return vec_1,vec_2

分词和过滤

# 过滤器
# 目的是过滤掉标点符号,换行符等没有什么意义的符号
def filter(data):

    result=[]

    # 遍历 ,data中所有的元素
    for index in data:
        # 用正则表达式将,a-z,A-Z,0-9,汉字,有意义的留下来
        if(re.match(u"[a-zA-Z0-9\u4e00-\u9fa5]",index)):
            result.append(index)
        else:
            pass
    return result

# 分词
def seg(data):
    data=jieba.cut(data)
    data=filter(data)
    return " ".join(data)

性能分析

使用Pycharm自带的性能分析软件
image

覆盖率分析

image

覆盖率为93%,没有被覆盖的地方为异常处理处
image