第一次个人编程作业
论文查重
Github链接:github
博客就不上传代码了,具体的看GitHub链接叭
找了很多资料,解决这样的一个文本相似度问题,从基于余弦定理的文本相似度,到simhash\minhash,还有到gensim,可以说都系统的看了一遍,其各方法的原理也都了解了,但了解原理是一回事,要想做出来就是另一回事了QAQ。
So 我还是用python+基于余弦定理的文本相似度叭
基于余弦定理的文本相似度
原理:
向量实际上是多维空间中有方向的线段。如果两个向量的方向一致,即夹角接近零,那么这两个向量就相近。而要确定两个向量方向是否一致,这就要用到余弦定理计算向量的夹角了。假如文本X 和文本 Y 对应向量分别是
• x1,x2,…,x64000
• y1,y2,…,y64000
那么它们夹角的余弦等于:

夹角越小,余弦值越接近1,就表明夹角越接近0度,也就是两个向量越相似,这就叫"余弦相似性"
流程:

计算模块接口部分的性能测试
使用pycharm自带的性能分析工具测试该程序


单元测试 , 按照原来文件的顺序,两两的文本相似度如下


模块异常处理
两个文本比较相似度,任意一个文本是空的,都会发生异常,除0异常(被除数为0),空序列异常


、、、
class Empty_error(Exception):
def init(self):
print("文本为空")
、、、
PSP表格
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 180 | 120 |
| Estimate | 估计这个任务需要多少时间 | 20 | 20 |
| Development | 开发 | 200 | 200 |
| Analysis | 需求分析 (包括学习新技术) | 400 | |
| Design Spec | 生成设计文档 | 60 | 50 |
| Design Review | 设计复审 | 60 | 40 |
| Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 60 | 40 |
| Design | 具体设计 | 100 | 100 |
| Coding | 具体编码 | 600 | 700 |
| Code Review | 代码复审 | 200 | 150 |
| Test | 测试(自我测试,修改代码,提交修改) | 200 | 150 |
| Reporting | 报告 | 100 | 100 |
| Test Repor | 测试报告 | 60 | 30 |
| Size Measurement | 计算工作量 | 40 | 40 |
| Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 120 | 90 |
| 合计 | 2400 | 2430 |
总结
解决这样的一个文本相似度问题,从基于余弦定理的文本相似度,到simhash\minhash,还有到gensim,可以说都系统的看了一遍,其各方法的原理也都了解了,但了解原理是一回事,要想做出来就是另一回事了。有试过simhash和gensim,刚开始好几天,都想用simhash解决这样的文本相似度问题,但建立了n个simhash.py,前两天才又发现所写得程序有bug,一切推翻重来,时间紧迫,在同学的帮助下,还是采用基于余弦定理的文本相似度叭……这也反映了我代码基础的薄弱,路漫漫其修远兮……
另外知识储备不足,有很多需要去学习

浙公网安备 33010602011771号