天天看点

第一次个人作业

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

6.总结与反思

继续阅读