这个作业属于哪个课程 | 软件工程2024 |
---|---|
这个作业要求在哪里 | 个人项目 |
这个作业的目标 | 设计一个论文查重算法,给出一个原文文件和一个在这份原文上经过了增删改的抄袭版论文的文件,在答案文件中输出其重复率 |
Github
PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 10 | 10 |
·Estimate | · 估计这个任务需要多少时间 | 10 | 10 |
Development | 开发 | 60 | 60 |
·Analysis | · 需求分析 (包括学习新技术) | 20 | 10 |
·Design Spec | · 生成设计文档 | 30 | 30 |
·Design Review | · 设计复审 | 20 | 10 |
·Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 10 | 20 |
·Design | · 具体设计 | 30 | 20 |
·Coding | · 具体编码 | 60 | 30 |
·Code Review | · 代码复审 | 10 | 20 |
·Test | · 测试(自我测试,修改代码,提交修改) | 10 | 10 |
Reporting | 报告 | 80 | 70 |
·Test Repor | · 测试报告 | 40 | 30 |
·Size Measurement | · 计算工作量 | 20 | 25 |
·Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 20 | 20 |
合计 | 410 | 355 |
思路
先将待处理的文章过滤掉标点和换行符得到一个长句子;
然后进行分词(将一个长句子分成若干个词汇),按–词汇:出现次数–这个形式存入一个字典中;
接着统计字典中对应词汇出现的次数,将长句子转换为一个向量;
将两个文章对应的向量代入夹角余弦定理,计算余弦相似度,这里也即对应两个文章的相似度。
外部模块
引入了Python的jinba模块(该模块的.lcut()方法可对句子进行分词),gensim模块(含有向量转换和计算余弦相似度的方法),re模块(用于过滤掉标点和换行符)
模块设计
文件处理模块:获取指定路径的文本内容
语句处理模块:将句子分词且过滤掉标点和转义符号
转换和计算模块:将文字转换为向量并计算其余弦相似度
性能改进
非常的可惜,VS自带的Python性能分析插件不再支持Python3.11版本,无法查看函数所耗时间并进行性能分析,且我没找到可代替的插件
且切回旧版本python引发了其他问题,而专业版(收费版)Pycharm倒是有性能分析工具,但我搞不到。
但是我的思路和模块设计参考了一位学长的博客,从他的博客中我了解到耗时最多的应该是语句处理模块中的分词函数:
但是所用的.lcut函数为外部模块(第三方库)所带的函数,我无法做出改进。
先匹配过滤文章之后再用lcut来处理会比反过来的顺序高效许多。
异常处理
路径异常:指定路径不存在文本;
处理方法:增加路径检测
运行截图
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。