第一次个人编程作业
一、作业链接
【Github作业链接】(https://github.com/suuuhope/031802425)
二、PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 60 | 60 |
Estimate | 估计这个任务需要多少时间 | 1440 | 1210 |
Development | 开发 | 300 | 160 |
Analysis | 需求分析(包括学习新技术) | 300 | 420 |
Design Spec | 生成设计文档 | 30 | 10 |
Design Review | 设计复审 | 20 | 10 |
Coding Standard | 代码规范( 为目前的开发制定合适的规范) | 10 | 10 |
Design | 具体设计 | 80 | 30 |
Coding | 具体编码 | 120 | 150 |
Code Review | 代码复审 | 30 | 10 |
Test | 测试(自我测试,修改代码,提交修改) | 100 | 100 |
Reporting | 报告 | 180 | 180 |
Test Repor | 测试报告 | 60 | 40 |
Size Measurement | 计算工作量 | 20 | 10 |
Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 30 | 20 |
合计 | 1440 | 1210 |
三、计算模块接口的设计与实现过程
算法流程图:
余弦相似度 (Cosine Similarity)
通过计算两个向量的夹角余弦值来评估他们的相似度。将向量根据坐标值,绘制到向量空间中,求得他们的夹角,并得出夹角对应的余弦值,此余弦值就可以用来表征这两个向量的相似性。夹角越小,余弦值越接近于1,它们的方向越吻合,则越相似。
余弦相似度算法
def CosSimilarity(UL,p1,p2):
si = GetSameItem(UL,p1,p2)
n = len(si)
if n == 0:
return 0
s = sum([UL[p1][item]*UL[p2][item] for item in si])
den1 = math.sqrt(sum([pow(UL[p1][item],2) for item in si]))
den2 = math.sqrt(sum([pow(UL[p2][itme],2) for item in si]))
return s/(den1*den2)
Python库:
jieba库:通过分词获得单个的词语,利用一个中文词库,确定汉字之间的关联概率,汉字间概率大的组成词组,形成分词结果。
sklearn:利用sklearn.metrics.pairwise中的cosine_similarity可直接进行余弦相似度计算。
四、计算模块接口性能:
来自pycharm自带的profile的性能测试(cc.py就是main.py,测试忘了改了):
五、单元测试
六、总结:
一个字——懵。看作业的时候是这样的
看作业要求就看了不短时间,然后直接面向百度编程,一顿查查完之后发现基本全是用Python在实现。于是直接打出GG没学过Python的弊端就显现出来了。贼心不死的我还是在网上找了各种用c++实现查重的方案,结果。。。。。。还是向Python屈服了。用了一些时间看完Python的基本语法,再回头看网上的代码,感觉瞬间好起来了呢,才怪,还是很难懂,但东问问西瞧瞧还是有点看明白了。这次作业再次告诉我,俺是fw要好好学习编程语言,多多实践,不然下次还是像这样啥都8懂。