个人项目:论文查重
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/gdgy/Networkengineering1834 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/gdgy/Networkengineering1834/homework/11146 |
这个作业的目标 | 实现论文查重算法,熟悉PSP表格,熟悉代码性能测试 |
1.Github仓库:
https://github.com/zwb5/3118005302
2.PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟 |
---|---|---|---|
Planning | 计划 | 10 | 10 |
· Estimate | 估计这个任务需要多少时间 | 10 | 10 |
Development | 开发 | 400 | 500 |
· Analysis | 需求分析 (包括学习新技术 | 100 | 150 |
· Design Spec | 生成设计文档 | 10 | 10 |
· Design Review | 设计复审 | 10 | 10 |
· Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 10 | 5 |
· Design | 具体设计 | 30 | 35 |
· Coding | 具体编码 | 200 | 250 |
· Code Review | 代码复审 | 10 | 10 |
· Test | 测试 | 30 | 30 |
Reporting | 报告 | 30 | 20 |
· Test Repor | 测试报告 | 10 | 5 |
· Size Measurement | 计算工作量 | 10 | 5 |
· Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 10 | 10 |
· 合计 | 440 | 530 |
3.模块接口的设计与实现过程
余弦相似度算法:
一个向量空间中两个向量夹角间的余弦值作为衡量两个个体之间差异的大小,余弦值接近1,夹角趋于0,表明两个向量越相似,余弦值接近于0,夹角趋于90度,表明两个向量越不相似。
思路:1、分词;2、列出所有词;3、分词编码;4、词频向量化;5、套用余弦函数计量两个句子的相似度。
1、分词:使用jieba模块对句子分词后,分别得到两个列表。
2、列出所有词,将两个列表放在一个set中,并将其转换成字典,key为set中的词,value为set中词出现的位置。
3、将两个列表进行编码,将每个字转换为出现在set中的位置。
4、对两个列表进行oneHot编码,就是计算每个分词出现的次数。
5、得出两个句子的词频向量之后,就变成了计算两个向量之间夹角的余弦值,值越大相似度越高。
4.模块接口部分的性能改进
利用profile模块进行性能分析
def profileTest():
……
if __name__ == "__main__":
profile.run("profileTest()")
其中输出每列的具体解释如下:
●ncalls:表示函数调用的次数;
●tottime:表示指定函数的总的运行时间,除掉函数中调用子函数的运行时间;
●percall:(第一个 percall)等于 tottime/ncalls;
●cumtime:表示该函数及其所有子函数的调用运行的时间,即函数开始调用到返回的时间;
●percall:(第二个 percall)即函数运行一次的平均时间,等于 cumtime/ncalls;
●filename:lineno(function):每个函数调用的具体信息;
5.模块部分单元测试展示
分词测试:
字典测试:
词频编码测试:
结果写入测试:
相似度测试:
6.模块部分异常处理说明
找不到文件: