第一次个人编程作业

这个作业属于那个课程广工2023软件工程课程
这个作业的要求在哪里作业要求
这个作业的目标设计一个论文查重程序
其他参考文献

1. 项目地址

项目地址

2. PSP表格

PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划3040
· Estimate· 估计这个任务需要多少时间750900
Development开发500800
· Analysis· 需求分析 (包括学习新技术)100140
· Design Spec· 生成设计文档3040
· Design Review· 设计复审5060
· Coding Standard· 代码规范 (为目前的开发制定合适的规范)5050
· Design· 具体设计7090
· Coding· 具体编码100140
· Code Review· 代码复审4060
· Test· 测试(自我测试,修改代码,提交修改)60100
Reporting报告120150
· Test Repor· 测试报告6080
· Size Measurement· 计算工作量3030
· Postmortem & Process Improvement Plan· 事后总结, 并提出过程改进计划3040
· 合计7801090

3. 接口设计与实现过程

  1. 程序类
    主类:MainProgram
    其他类:FileIO类(文件输入输出),SimHash类(计算HASH值、SimHash值等),Exceptions类(处理相关异常)、SimHashDistance类(计算相似度并返回的函数)
    测试类:FileIOTest类(测试FileIO类),SimHashTest类(测试SimHash类),SimHashDistance类(测试SimHashDistance类)

  2. 项目结构
    项目结构

  3. 程序运行流程
    流程图

  4. 核心算法:
    采用了simhash+海明距离来判断内容的相似程度

simhash是由 Charikar 在2002年提出来的,参考 《Similarity estimation techniques from rounding algorithms》 。 介绍下这个算法主要原理,为了便于理解尽量不使用数学公式,分为这几步:

1、分词,把需要判断文本分词形成这个文章的特征单词。最后形成去掉噪音词的单词序列并为每个词加上权重,我们假设权重分为5个级别(1~5)。比如:“ 美国“51区”雇员称内部有9架飞碟,曾看见灰色外星人 ” ==> 分词后为 “ 美国(4) 51区(5) 雇员(3) 称(1) 内部(2) 有(1) 9架(3) 飞碟(5) 曾(1) 看见(3) 灰色(4) 外星人(5)”,括号里是代表单词在整个句子里重要程度,数字越大越重要。

2、hash,通过hash算法把每个词变成hash值,比如“美国”通过hash算法计算为 100101,“51区”通过hash算法计算为 101011。这样我们的字符串就变成了一串串数字,还记得文章开头说过的吗,要把文章变为数字计算才能提高相似度计算性能,现在是降维过程进行时。

3、加权,通过 2步骤的hash生成结果,需要按照单词的权重形成加权数字串,比如“美国”的hash值为“100101”,通过加权计算为“4 -4 -4 4 -4 4”;“51区”的hash值为“101011”,通过加权计算为 “ 5 -5 5 -5 5 5”。

4、合并,把上面各个单词算出来的序列值累加,变成只有一个序列串。比如 “美国”的 “4 -4 -4 4 -4 4”,“51区”的 “ 5 -5 5 -5 5 5”, 把每一位进行累加, “4+5 -4±5 -4+5 4±5 -4+5 4+5” ==》 “9 -9 1 -1 1 9”。这里作为示例只算了两个单词的,真实计算需要把所有单词的序列串累加。

5、降维,把4步算出来的 “9 -9 1 -1 1 9” 变成 0 1 串,形成我们最终的simhash签名。 如果每一位大于0 记为 1,小于0 记为 0。最后算出结果为:“1 0 1 0 1 1”。

通过比较差异的位数就可以得到两串文本的差异,差异的位数,称之为“海明距离”,通常认为海明距离<3的是高度相似的文本。

4. 程序性能分析[性能分析]

性能分析

float和List占有内存较多,用于存贮字符串集合,计算等

5. 单元测试

各类方法测试:
测试
测试

主函数命令测试:
测试

结果展示:
结果展示

6. 异常处理部分

  1. 命令格式异常
    命令格式异常

  2. 文件不存在
    文件不存在异常

  3. 文件为空或者长度不支持使用hanlp分词
    在这里插入图片描述
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值