第一次个人编程作业

这个作业属于哪个课程 软件工程2024-双学位(广东工业大学)
这个作业要求在哪里 软件工程第二次作业
这个作业的目标 1. 在Gitcode仓库中新建一个学号为名的文件夹
2. 记录PSP表格
3. 使用编程语言完成论文查重程序
4. 使用Code Quality Analysis分析代码
5. 使用Studio Profiling Tools来优化代码
6. 使用Gitcode来管理代码
7. 使用单元测试对项目进行测试,并使用插件查看测试分支覆盖率等指标
其他参考文献

我的GitCode链接 |

论文查重

PSP表格

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

论文查询程序设计

经过调研,决定采用python的difflib库来实现需求。(该库能较为方便的实现论文查重功能)
difflib中常用两个类:SequenceMatcher 和 Differ,它们都可以用来比较两个序列(如字符串、列表、元组等)之间的差异,并生成相应的结果,十分方便。
difflib 库中的 SequenceMatcher 类是 Python 的一个非常有用的工具,用于比较两个序列之间的相似度,找出它们之间最长的连续匹配的子序列。它可以用于比较任何类型的序列(如字符串、列表或元组),非常适合于文本比较和差异分析等场景。

SequenceMatcher模块

我们需要从 difflib 模块导入 SequenceMatcher 类:

from difflib import SequenceMatcher

然后创建一个 SequenceMatcher 对象,通过传入两个序列来初始化:

matcher = SequenceMatcher(None, "文本1", "文本2")

获取匹配度

SequenceMatcher 提供了 ratio() 方法来计算两个序列之间的相似度(返回值是一个在 0 到 1 之间的浮点数,1 表示完全匹配):

similarity = matcher.ratio()
print(similarity)

找出匹配的块

使用 get_matching_blocks() 方法来获取序列之间匹配的块:

matching_blocks = matcher.get_matching_blocks()
for block in matching_blocks:
    print(block)

查找差异

difflib.SequenceMatcher 提供了 get_opcodes() 方法,返回一个操作码列表,描述如何从第一个序列变换到第二个序列。可以显示两个序列之间的差异。

opcodes = matcher.get_opcodes()
for tag, i1, i2, j1, j2 in opcodes:
    print(f"{tag}: a[{i1}:{i2}] b[{j1}:{j2}]")

这里的 tag 表示操作类型(如 'replace'、'delete'、'insert' 或 'equal'),i1:i2 表示第一个序列中受影响的范围,而 j1:j2 表示第二个序列中受影响的范围。

性能优化

posted @ 2024-03-18 10:18  李子聪  阅读(45)  评论(0)    收藏  举报