GitHub链接:https://github.com/mrhuang7/mrhuang7
这个作业属于哪个课程 | 软件工程 |
---|---|
这个作业要求在哪里 | 作业要求 |
这个作业的目标 | 论文查重程序工程设计 |
1. 模块接口的设计与实现过程
-
算法设计
基于向量夹角余弦值计算文本相似度
衡量不同文本之间的相似度,其实有多种方法,比如欧式距离法,余弦距离法等等。对于欧式距离而言,余弦距离更体现出两个向量在方向上的差异。当我们的余弦值接近1时,夹角接近0度,此时两个向量相似度更高。当夹角等于0时,两个向量相等。
-
具体思路
在整个文本查重的流程中,我们使用余弦相似度来判断。首先我们需要对文本进行分词,将文本分成一个个单个的词汇。然后进行列词,计算词频。然后我们构建词语以及他们的频率构成的向量。将向量利用余弦相似度进行比较,得出相似程度的百分比。
-
利用模块
在本次论文查重中,我们主要有用到jieba包,cosine_similarity包等
2.模块接口部分的性能改进
-
改进前

-
分析
我们原先使用filter的cut和lcut处理,然后进行匹配过滤,但是这样子做显得过于臃肿。于是我们查阅相关资料,讨论使用正则过滤html标签。以及使用html转义符实体化。采用这种处理方法可以使我们更好地达到目标。
-
改进后
3.模块部分单元测试展示
- 源文本与测试文本orig_0.8-dis_1.txt进行测试
运行结果显示两文本之间相似度为0.89,符合预期
运行结果显示两文本之间相似度0.63,符合预期
- 源文本与测试文本orig_0.8-dis_10.txt进行测试
运行结果显示两文本之间相似度0.75,符合预期
- 源文本与测试文本orig_0.8-del.txt进行测试
运行结果显示两文本之间相似度0.73,符合预期
- 我们利用python的profile模块,对程序中的每一项时间损耗进行单元测试
分析单元测试情况,我们可以看出运行时间最长的模块应该是文本的分词,列词,计算词频,构建词向量。
4.模块部分异常处理说明
-
空白文档情况
当我们对两个文档进行测试时,可能会遇到情况是其中一个是空白文档。从实际来讲,此时两个文档的相似度应该是0。下面我们进行测试
5. PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 120 | 150 |
Estimate | 估计这个任务需要多少时间 | 60 | 50 |
Development | 开发 | 720 | 1440 |
Analysis | 需求分析 (包括学习新技术) | 240 | 480 |
Design Spec | 生成设计文档 | 200 | |
Design Review | 设计复审 | ||
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 180 | 100 |
Design | 具体设计 | 360 | |
Coding | 具体编码 | 300 | |
Code Review | 代码复审 | ||
Test | 测试(自我测试,修改代码,提交修改) | ||
Reporting | 报告 | ||
Test Repor | 测试报告 | ||
Size Measurement | 计算工作量 | ||
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | ||
合计 | 2880 | 3800 |