个人项目
作业属于哪个课程 | 软件工程 |
---|---|
作业要求 | 作业要求 |
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 |
需求分析
- 设计一个论文查重算法,通过给出原文和原文上经过了抄袭版的论文,在答案中输出重复率
- 文件输入规范
- 命令行参数给出:论文原文的文件的绝对路径
- 命令行参数给出:抄袭论文的文件的绝对路径
- 命令行参数给出:输出答案的绝对路径
- 给出答案为浮点型,保留后两位小数
流程
关键代码
相似度计算
# 计算余弦相似度
# 传入参数为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自带的性能分析软件
覆盖率分析
覆盖率为93%,没有被覆盖的地方为异常处理处