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

第一次编程作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience

这个作业的要求在哪里 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience/homework/13477

这个作业的目标 实现一个3000字以上论文查重程序

Github链接:CJ-fighting/3123004476

PSP表格

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

接口的设计和实现过程

image

程序主要分为三个类:FileHandler文件读写类,Tokenizer文本处理类,SimilarityCalculator相似度计算类。

算法主要运用了余弦相似度
分词方法:jieba.cut(text)把中文句子拆成词,解决“中文没有空格”的问题。
词频统计:collections.Counter高效统计词出现的次数。
向量化表示:把文本转化为“词频向量”,方便计算相似度。
余弦相似度:一种常见的文本相似度算法,适合高维稀疏向量。广泛用于信息检索、推荐系统、文档查重。

计算模块单元测试展示
测试代码如下def run_tests():
print("==== 测试开始 ====")

# 1. 完全相同的文本
t1 = "今天是星期天,天气晴"
t2 = "今天是星期天,天气晴"
sim = cosine_similarity(t1, t2)
print("测试1:完全相同")
print(f"相似度 = {sim:.4f}")  # 预期接近 1.0# 2. 完全不同的文本
t1 = "今天是星期天,天气晴"
t2 = "我喜欢吃苹果"
sim = cosine_similarity(t1, t2)
print("\n测试2:完全不同")
print(f"相似度 = {sim:.4f}")  # 预期接近 0.0# 3. 部分相似(有共同词)
t1 = "今天是星期天,天气晴"
t2 = "今天周天,天气很好"
sim = cosine_similarity(t1, t2)
print("\n测试3:部分相似")
print(f"相似度 = {sim:.4f}")  # 预期在 0.3~0.7 之间# 4. 空文本
t1 = ""
t2 = "今天是星期天"
sim = cosine_similarity(t1, t2)
print("\n测试4:空文本")
print(f"相似度 = {sim:.4f}")  # 预期 = 0.0print("==== 测试结束 ====")

调用测试函数

if name == "main":
run_tests()

测试给定数据集文件
Orig_0.8_del的文本查重数据
image
image

Orig_0.8_add的查重数据
image
image

有可能出现的异常情况
文本为空
位置:cosine_similarity()
if norm1 == 0 or norm2 == 0:
return 0.0
异常类型:除零错误 (ZeroDivisionError)
触发条件:如果某个文本完全为空,向量长度为 0。
避免方法:代码里显式判断 norm1 == 0 or norm2 == 0,返回 0.0,成功避免了除零异常。

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

相关文章:

  • 7
  • Xilnx FPGA 资源结构
  • 2025年录音转文字技术解析与实用工具评测 - 指南
  • CF2147H Maxflow GCD Coloring 题解
  • Uiverse.io 2.0 震撼发布:新增 3000+ 动效组件!适配 React、Vue
  • 问题及解决方法
  • 2025.9.22
  • 第一天
  • (1-10-2)MyBatis 进阶篇 - 教程
  • 联想拯救者无法登录当前账户
  • WPF二合一平板电脑上屏幕旋转时获取屏幕宽高问题
  • 代码中的善意:构建人性化的软件开发文化
  • 超级恶心的题面 [USACO21OPEN] Portals G
  • 如何隐藏一个元素
  • 昆仑通态触摸屏保存参数到内部存储器并读取的方法成都控制器开发提供
  • helloword
  • 使用reCAPTCHA提升WordPress网站安全性 - 指南
  • 软工9.22
  • 在控制台执行可列出所有placeholder样式
  • 今日总结
  • 9/22
  • 对于一门古老东欧玄学的初步研究的简要报告
  • Codeforces 2127 D(图论,组合数学,DFS,分类讨论)
  • Java学习笔记:从三个实验看编程思维的锤炼
  • 题解:AT_arc068_d [ARC068F] Solitaire
  • Codeforces Round 1051 (Div. 2) D1D2题解
  • JSP
  • 每日博客
  • 探展打卡 Serverless,2025 云栖大会来了
  • 从 0 到 1,AI 走进服装店:记住每位顾客的喜好,比你还靠谱