第一次个人编程作业

忘记写自己的GitHub了 这里补一下:
https://github.com/comesomemusic/comesomemusic.git

第一次个人编程作业

软件工程第一次个人编程作业

软件工程 https://edu.cnblogs.com/campus/gdgy/informationsecurity1812/
作业要求 https://edu.cnblogs.com/campus/gdgy/informationsecurity1812/homework/11155
作业目标 论文查重(python实现)

PSP表格

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

计算模块接口的设计与实现过程

根据需求:校验重复。得出解决方案就是拆分和计算重复率。

首先要做的就是把文章拆分成词语,这里使用jieba拆分。拆分完成之后放入一个字典。然后就是采取相应的算法计算相似度,我采用Jaccard index计算相似度,即两个词语集合求交除以两个词语集合的并。

算法的关键就是用jieba拆分并选择Jaccard index计算。(因为网上有很多不同的算法,并且抄袭的标准个人也不一样,最终选择这个比较朴实无华,应该和各类标准都比较接近)

计算模块接口部分的性能改进。

总体比较简单,所以改进也不大,主要事件花在jieba的函数上。

性能分析图

单元测试结果

测试代码:

coding:utf-8

def CalEachWordAp(words): # 文本中记录各词语出现次数r
d = {}
for word in words:
d[word] = 0

for word in words:
    d[word] += 1
return d

word = ['一位', '真正', '的', '作家', '永远', '只', '为', '内心', '写作', ',', '只有', '内心', '才', '会', '真实', '地', '告诉', '他', ',', '他', '的', '自私', '、', '他', '的', '高尚', '是', '多么', '突出', '。', '内心', '让', '他', '真实', '地', '了解', '自己', ',', '一旦', '了解', '了', '自己', '也', '就', '了解', '了', '世界', '。', '很多年', '前', '我', '就', '明白', '了', '这个', '原则', ',', '可是', '要', '捍卫', '这个', '原则', '必须', '付出', '艰辛', '的', '劳动', '和', '长', '时期', '的', '痛苦', ',', '因为', '内心', '并非', '时时刻刻', '都', '是', '敞开', '的', ',', '它', '更', '多', '的', '时候', '倒', '是', '封闭', '起来', ',', '于是', '只有', '写作', ',', '不停', '地', '写作', '才能', '使', '内心', '敞开', ',', '才能', '使', '自己', '置身于', '发现', '之中', ',', '就', '像', '日出', '的', '光芒', '照亮', '了', '黑暗', ',', '灵感', '这时候', '才']
dt=CalEachWordAp(word)

print(dt)

测试覆盖率

计算模块部分异常处理说明

1.文件读写异常处理

try:
    orig_text=open(sys.argv[1], 'r', encoding='utf-8')
    tested_text=open(sys.argv[2],'r',encoding='utf-8')
    result=open(sys.argv[3],'w',encoding='utf-8')   
    or_txt=orig_text.read()
    te_txt=tested_text.read()
    words1=jieba.lcut(or_txt)
    words2=jieba.lcut(te_txt)
except Exception as e:
    print(e)

2除零异常

try:
    J=n/m
except Exception as e:
    print(e)

posted @ 2020-09-25 00:43  dennn  阅读(115)  评论(0编辑  收藏  举报