个人作业
论文查重
2.PSP表格
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 10 | 20 |
| Estimate | 估计这个任务需要多少时间 | 10 | 10 |
| Development | 开发 | 300 | 300 |
| Analysis | 需求分析 (包括学习新技术) | 180 | 300 |
| Design Spec | 生成设计文档 | 20 | 60 |
| Design Review | 设计复审 | 20 | 60 |
| Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 10 | 30 |
| Design | 具体设计 | 240 | 300 |
| Coding | 具体编码 | 240 | 300 |
| Code Review | 代码复审 | 30 | 30 |
| Test | 测试(自我测试,修改代码,提交修改) | 60 | 50 |
| Reporting | 报告 | 90 | 90 |
| Test Repor | 测试报告 | 30 | 40 |
| Size Measurement | 计算工作量 | 30 | 10 |
| Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 30 | 60 |
| 合计 | 1300 | 1660 |
3、设计思路
通过对网上信息的查找,发现了两种汉字文本查重的插件方法,一种是通过将文字抽象成向量进行余弦运算求出相似度,另一种方法是对不同文本的SimHash值进而比较海明距离以此比较文本相似度,这里我运用了计算余弦相似性的方法。
1.读取文件,将文本录入程序中
2.删除无效字符和标点符号,经查资料发现一般查重都需要设置停止词,比如“啊哦呀是的”这些无实际意义的字以及一些标点符号,在分词后进行计算是会影响查重结果,运用的python中re库中的re.sub功能将下列字符替换为空

3.分词,分词正是中文查重与英文查重不同的地方,也是难点,在查阅资料之前我也很为这个部分担心,后来借助于jieba库的功能才得以实现这个要求。英文通常由一个单词就能表示一个意思,而中文往往是通过两个字来组成一个意思,比如“学生”、“学院”这类词被拆分开后,其能表达的意思就非常局限,跟原来的意思也相距甚远,而jieba分词正是将句子中连贯表达一个意思的词语逐个切分,将一句完整的话切分为几个词。
4.余弦运算求相似度
余弦相似度:两个向量的夹角越接近于0,其余弦值越接近于1,表面两个向量越相似。
向量夹角余弦计算:
在空间向量中,两个向量的夹角也可以通过两个向量夹角的余弦值衡量两个个体差异的大小。余弦值越接近1,两个向量越相似。
向量之间的余弦计算可以如下表示:

同理,我们可以通过把文本转化为一个个的向量,以此来计算不同文本之间的相似度。
我们可以使用jieba分割出的词实现这一功能,将整个文本抽象为由多个单词作为元素组成的大向量,再通过余弦公式计算得到两个文本的相似度,这也是整个程序最核心的算法部分,之前的步骤都是为这一步的计算进行铺垫。

4、模块审计以及模块占用时间和性能


5、异常处理

在之前的程序中我所采用的读取文本方式是直接path_ 1= 具体的文本路径,发现出现找不到文件的情况,原因是未填写文本的决定路径,只是填写了文本路径的一部分内容也就是相对路径,进而造成报错。在修改错误的同时,通过借鉴别人的代码,也将输入路径的方式改成运行后填写,这样做在进行多文本比较时就可以直接通过运行程序调整而不用修改源代码
浙公网安备 33010602011771号