脚本宝典收集整理的这篇文章主要介绍了个人项目,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
软件工程 | https://edu.cnblogs.COM/Campus/gdgy/networkengineering1934-Softwareengineering |
---|---|
作业要求 | https://edu.cnbLOGs.com/campus/gdgy/networkengineering1934-softwareengineering/homework/12137 |
作业目标 | 通过独立完成个人项目熟悉软件开发流程,提高编程能力 |
PSP2.1 | PErsonal Software PRocess Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 15 | 10 |
EstiMATE | 估计这个任务需要多少时间 | 1040 | 1500 |
Development | 开发 | 730 | 950 |
Analysis | 需求分析 | 30 | 22 |
Design Spec | 生成设计文档 | 16 | 18 |
Design review | 设计复审 | 12 | 26 |
Coding Standard | 代码规范 | 6 | 5 |
Design | 具体设计 | 23 | 36 |
Coding | 具体编码 | 500 | 780 |
Code Review | 代码复审 | 60 | 48 |
test | 测试(自我测试,修改代码,提交修改) | 150 | 200 |
Reporting | 报告 | 40 | 30 |
Test Repor | 测试报告 | 36 | 25 |
Size Measurement | 计算工作量 | 20 | 15 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 20 | 40 |
合计 | 1040 | 1500 |
通过在网上查找资料,了解到论文查重有两个常用的算法,分别是利用TF-iDF与余弦相似性和汉明距离来判断文本的相似度,我在个人项目中采用了SimHash算法,过对不同文本的SimHash值进而比较海明距离,从而判断两个文本的相似度。 SimHash算法原理
分词 对给定的一段文本进行分词,产生n个特征词,并赋予每个特征词一个权重。比如一段文本为“中国科大计算机系的学生的能力怎么样”,产生的特征词就应该是“中国科大”、“计算机系”、“的”、“学生”、“能力”、“怎么样”,然后对这些词分别赋予权重,假设有1-5五个分类,分词之后以上五个词便会各有一个权重,比如中国科大(4)、计算机系(3)、的(1)、学生(4)、能力(5)、怎么样(3)。 其中,数字越大,代表特征词在句子中的重要性就越高。这样,我们就得到了一个文本的分词的词向量和每个词向量对应的权重。
Hash 通过hash函数对每一个词向量进行映射,产生一个n位二进制串,比如CSDN的hash值就是100101。
加权 前面的计算我们已经得到了每个词向量的Hash串和该词向量对应的权重,这一步我们计算权重向量W=hash*weight。 具体的计算过程如下:hash二进制串中为1的乘以该特征词的分词权重,二进制串中为0的乘以该特征词的分词权重后取负,继而得到权重向量。 举个例子,CSDN的hash二进制串是100101,CSDN的权重是3,那么生成的权重向量就是[3,-3,-3,3,-3,3]。
合并 对于一个文本,我们计算出了文本分词之后每一个特征词的权重向量,在合并这个阶段,我们把文本所有词向量的权重向量相累加,得到一个新的权重向量,形如[3,4,1,5,-5,1]
降维 对于前面合并后得到的文本的权重向量,大于0的位置1,小于等于0的位置0,就可以得到该文本的SimHash值,以上面提到的[3,4,1,5,-5,1]为例,我们得到[1,1,1,1,0,1]这个bit串,也就是论文中提及的该文本的指纹。 到此为止,我们已经计算出了一个文本的SimHash值。那么,如何判断两个文本是否相似呢?我们要用到海明距离。
由公式
,将汉明距离带入x即可计算出文本相似度参考文章:SimHash算法原理
计算查重率流程
项目结构
具体实现 1、读写文本 2、将文本分词 使用IKanalyzer包将文本分成多个词 3、Hash 用hash函数将每个分词映射成一串二进制数 4、加权 由于没有找到什么方法能让程序自动给每个分词赋予权重,所以每个分词的权重都设置成1 5、合并降维 将每个分词映射得到的二进制数字串降维并相加,得到文本的SimHash值 6、计算汉明距离,得到查重率 计算模块接口部分的性能 可以发现内存消耗最大的方法是用于分词操作的方法,这也是难度最大的操作 计算模块部分单元测试展示 SimHash类相关方法测试 1、hash方法:将每个分词映射到一个二进制数 2、simHash方法:输出文本的SimHash值 SimHash值计算结果: Similaraty类相关方法测试 1、hammingDistance方法:计算两个文本的汉明距离 可以得到两个汉明距离分别为33和35,区别不是很大,应该是没有给每个分词赋予不同权重导致的 2、getSimilar方法:计算两个文本的重复率 计算结果:@H_881_304@
Compare类相关方法测试 1、ans方法:读入两个文本,计算重复率 计算结果: 2、main方法 计算模块部分异常处理说明 1、空文本 测试样例: 测试结果: 2、输入参数不够 测试样例: 测试结果:以上是脚本宝典为你收集整理的个人项目全部内容,希望文章能够帮你解决个人项目所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。