ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

个人项目:论文查重

2021-09-18 22:34:17  阅读:212  来源: 互联网

标签:查重 论文 句子 个人 30 余弦 60 set 分词


作业所属课程 课程
作业要求
要求
作业目标
实现论文查重算法

熟练使用PSP表格

熟练使用单元测试

熟练使用代码质量检测工具

熟练使用性能分析工具

1.git hub地址

图片即超链接
图片即超链接

2.PSP表格

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

3.开发环境以及设计原理

3.1开发环境

  • 开发环境:IDEA 2021

3.2设计原理

余弦相似度算法:一个向量空间中两个向量夹角间的余弦值作为衡量两个个体之间差异的大小,余弦值接近1,夹角趋于0,表明两个向量越相似,余弦值接近于0,夹角趋于90度,表明两个向量越不相似。

下面我们介绍使用余弦相似度计算两段文本的相似度。思路:1、分词;2、列出所有词;3、分词编码;4、词频向量化;5、套用余弦函数计量两个句子的相似度。

句子A:这只皮靴号码大了。那只号码合适。
句子B:这只皮靴号码不小,那只更合适。
1、分词:
使用结巴分词对上面两个句子分词后,分别得到两个列表:
listA=[‘这‘, ‘只‘, ‘皮靴‘, ‘号码‘, ‘大‘, ‘了‘, ‘那‘, ‘只‘, ‘号码‘, ‘合适‘]
listB=[‘这‘, ‘只‘, ‘皮靴‘, ‘号码‘, ‘不小‘, ‘那‘, ‘只‘, ‘更合‘, ‘合适‘]

2、列出所有词,将listA和listB放在一个set中,得到:
set={'不小', '了', '合适', '那', '只', '皮靴', '更合', '号码', '这', '大'}
将上述set转换为dict,key为set中的词,value为set中词出现的位置,即‘这’:1这样的形式。
dict1={'不小': 0, '了': 1, '合适': 2, '那': 3, '只': 4, '皮靴': 5, '更合': 6, '号码': 7, '这': 8, '大': 9},可以看出“不小”这个词在set中排第1,下标为0。

3、将listA和listB进行编码,将每个字转换为出现在set中的位置,转换后为:
listAcode=[8, 4, 5, 7, 9, 1, 3, 4, 7, 2]
listBcode=[8, 4, 5, 7, 0, 3, 4, 6, 2]
我们来分析listAcode,结合dict1,可以看到8对应的字是“这”,4对应的字是“只”,9对应的字是“大”,就是句子A和句子B转换为用数字来表示。

4、对listAcode和listBcode进行oneHot编码,就是计算每个分词出现的次数。oneHot编号后得到的结果如下:
listAcodeOneHot = [0, 1, 1, 1, 2, 1, 0, 2, 1, 1]
listBcodeOneHot = [1, 0, 1, 1, 2, 1, 1, 1, 1, 0]
下图总结了句子从分词,列出所有词,对分词进行编码,计算词频的过程

5、得出两个句子的词频向量之后,就变成了计算两个向量之间夹角的余弦值,值越大相似度越高。
listAcodeOneHot = [0, 1, 1, 1, 2, 1, 0, 2, 1, 1]
listBcodeOneHot = [1, 0, 1, 1, 2, 1, 1, 1, 1, 0]

根据余弦相似度,句子A和句子B相似度很高。


  • 接口设计

  • maven工程引用dependency

4.性能分析

  • overview

  • 实时内存

    分析可得:分词模块占用的比例较大,由于不熟悉分词模块内容,我无法在分词上做出更进一步的改进

5.测试分析

  • TXtest
    initData()函数中objects包含5组数据,它们会在构造函数中被接收,相当于进行5次不同数据的测试
    1. 由于每篇文章的第一句话都是不同的,可以用来测试对应文章是否成功被读取到List中

    2. 文章是否被成功读取到List中

    3. 输出文件是否可以成功创建

    4. 结果:

    5. 测试覆盖率

    6. 异常测试

      结果

    7. 编译结果

5.小结

这次的作业需求涉及到了我很多没有涉及到的知识面,在很多地方消耗了非常多的时间,比如git命令行的操作,如何在idea中提交git,如何使用maven工程更好的调用第三方jar包和jprofile进行代码分析等等,让我了解到了自己平时在学习编程语言上遗漏的知识点,同时本次作业也参考了一些往届师兄师姐的思路和想法,希望自己在未来的日子里能够专心学习Java语言的各种特性更好的去完成项目的开发。

标签:查重,论文,句子,个人,30,余弦,60,set,分词
来源: https://www.cnblogs.com/zxccode/p/15257972.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有