其他分享
首页 > 其他分享> > 个人项目

个人项目

作者:互联网

个人项目

软件工程 网工1934
作业要求 作业要求
作业目标 设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率。

Github项目代码链接
jar包所在链接

PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划
- Estimate 估计这个任务需要多少时间 430 620
Development 开发
- Analysis 需求分析(包括学习新技术) 40 50
- Design Spec 生成设计文档 20 30
- Desgin Review 设计复审 20 20
- Coding Standard 代码规范(为目前的开发指定合适的规范) 30 30
- Desgin 具体设计 30 50
- Coding 具体编码 120 200
- Code Review 代码复审 50 60
- Test 测试(自我测试,修改代码,提交修改) 50 100
Reporting 报告
- Test Repor 测试报告 20 30
- Size Measurement 计算工作量 10 20
- Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 50 40
总结 430 620

接口设计和实现过程

接口设计

接口 功能 实现
文件读写工具类AccessUtils 从路径中读取或写入文件 read方法读取文件并返回文本字符串,write方法向路径中写入结果字符串
查重算法工具类HashUtils 根据读到的文本返回simHash 接收字符串并通过汉语言分词依赖分词,计算simhash后返回字符串类型的simhash
查重结果处理类ResultUtils 根据simHash返回查重结果 传入simhash计算海明距离和文本相似度
主启动类TextCheck 项目主启动类 调用其他工具类实现文本查重
四个类对应的测试类 分别测试各个类的方法是否正常运行

项目设计

项目流程设计图

项目结构

项目实现

  1. 解决中文分词问题

参考网站:7个优秀的开源中文分词库推荐,实用性强
经过对比测试,最终选择中文分词依赖:HanLP

maven外部依赖

  1. 相似度算法的实现

对比了余弦相似度算法simHash算法,最终选择simHash算法

simHash算法简单介绍

  1. 数据处理

海明距离两个码字的对应比特取值不同的比特数称为这两个码字的海明距离。在一个有效编码集中,任意两个码字的海明距离的最小值称为该编码集的海明距离。
得到两个文本字符串的simHash值后,通过计算两者海明距离来计算重复率

计算模块接口部分的性能

运行耗时分析图

运行耗时对比图

运行占用内存分析图

上述图示可得:相对较为耗时,占用内存较大的是用于分词的外部依赖和计算分词的hash值

模块部分单元测试展示

测试代码覆盖率

文本路径正确与错误对比

获取原始文本和对比文本的simHash

分词工具分词测试

标点符号对重复率的影响

分词顺序对重复率的影响

模块部分异常处理说明

读取路径为空异常

读取路径错误异常

写入路径错误异常

读取文本为空

读取文本为空时,返回空的simHash,即文本重复率必定为0,因此无需抛出异常

项目运行示例

运行项目测试

运行结果

标签:20,个人,项目,海明,算法,simHash,文本,分词
来源: https://www.cnblogs.com/kizan/p/15291625.html