当前位置: 首页 > news >正文

个人项目作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/Class12Grade23ComputerScience
这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/Class12Grade23ComputerScience/homework/13468
github仓库 https://github.com/jiandanmingzi/jiandanmingzi/tree/main/3123004657

1.计算模块接口的设计与实现过程

设计概述

计算模块采用分层设计,主要包含两个核心部分:
文件管理类 (FileManager)
职责:封装文件操作,提供统一的文件读写接口
关键方法:构造函数、析构函数、read_lines()、write_lines()
查重算法模块 (PlagCheck命名空间)
职责:实现文本相似度计算的核心算法
关键函数:split_into_words()、compute_simhash()、hamming_distance()、calcu_simi()
关系图:
Main Program

FileManager (文件操作) → PlagCheck (算法模块)
↓ ↓
文件读写 分词 → SimHash → 汉明距离 → 相似度计算

关键算法实现

1.分词算法 (split_into_words)

流程图:
开始

初始化ICU分词器

遍历文本字符

识别单词边界

过滤标点符号和空格(无法过滤中文标点)

返回单词向量

算法关键点:
使用ICU库进行语言无关的分词处理
智能过滤纯英文标点符号的"伪单词"
支持中英文混合文本处理

2. SimHash算法 (compute_simhash)

流程图:
输入单词向量

对每个单词计算64位哈希

构建64维特征向量(统计每位1的出现频率)

生成SimHash指纹(多数表决)

独到之处:
采用64位指纹,平衡精度和计算效率
基于词频加权的特征向量生成
对每个词的哈希值进行位级统计

  1. 相似度计算 (calcu_simi)
    创新点:
    基于汉明距离的相似度度量
    归一化处理确保结果在[0,1]范围内
    空文本检测和边界条件处理

2.计算模块接口部分的性能改进

性能瓶颈:分词算法与重复率计算
分词算法改进:原使用jieba,但效率过低,8k字文章大概需分词8s,改用icu分词
重复率计算算法改进:原使用lcs算法计算,时间复杂度为O(m*n),现改为SimHash算法,时间复杂度约为O(n)

3.计算模块部分异常处理说明。

当输入地址对应的文件不可读/不可写/无法打开时,抛出异常

4.PSP表格

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

附录

测试代码和测试结果(后续只改变边查重文章地址)

08e84fb45129ca9a381808b8cb99e904

f349196f608007e952274a89f50271d1

87464b26f67563d2629e55055b171016

723b1ae69967b75e8194f84a674ea5a8

b44eaa5992687fc9493b69306b85ad65

b73432463202d96b12976e763319973b

http://www.hskmm.com/?act=detail&tid=15184

相关文章:

  • 软工第二次作业--王腾
  • 牛客周赛 Round 110 E,F题解
  • 第5章:路由(Routing)与直连交换机(Direct Exchange)
  • 搜索百科(4):OpenSearch — 开源搜索的新选择
  • JAVA的计算方式
  • 安装 elasticsearch-9.1.4 - 集群 和 kibana-9.1.4
  • 反码 原码 补码
  • 线性结构常见应用之栈[基于郝斌课程]
  • 实测对比:权威榜单之公众号排版Top 5(含效果对比与适用建议)
  • go的泛型
  • 原码补码反码
  • lc1034-边界着色
  • 【汽车电子】汽车功能安全标准 ISO 26262
  • ISO 26262的不同安全等级:ASIL-D ASIL-C ASIL-B ASIL-A
  • C#学习1
  • 02020405 EF Core基础05-EF Core反向工程、EF Core和ADO.NET Core的联系、EF Core无法做到的事情
  • 02020406 EF Core基础06-EF Core生成的SQL
  • Gemini-2.5-Flash-Image-Preview 与 GPT-4o 图像生成能力技术差异解析​ - 教程
  • 新学期每日总结(第2天)
  • 在CodeBolcks下wxSmith的C++编程教程——使用菜单和组件
  • 单调队列
  • 软工第一次编程
  • 第二次软工作业
  • 9.23总结
  • 日志|力扣|不同路径|最小路径和|动态规划|Javase|IO|File|Javaweb
  • 如何建立 5 μm 精度的视觉检测?不仅仅是相机的事
  • 函数 cmd_info_change_cur_model_group
  • 线程--相关概念、两种创建线程的方式
  • 恢复某个数据文件不适当,导致DataGuard无法open数据库
  • Nginx 部署及配置