无尘阁日记

无尘阁日记

教学教案文档(不规则),用GPT协作提出提取方案
2025-12-23

image.png

问:

比如这样的pdf文档 如何切出一道道完整的题目,并加上题目标签,属于什么题型、年份、难度、题干、图片、选项、答案、解析、知识点等等

请你给我提供一套解决思路。

答:

好,这个问题本质上不是“怎么切 PDF”,而是如何把一份“教学型 PDF”结构化为“机器可理解、可检索、可再利用的题库数据”。我给你一套工程级、可落地、可扩展的完整思路,从认知到技术,一层一层来。

我会以你给的这类典型资料为参照(69 页、题型+典例+解析混合的数学讲义)来讲清楚这件事 。

第一层:先认清这是一个“结构还原问题”,不是 OCR 问题

很多人一上来就想:
PDF → OCR → 文本 → 正则 → 题目

这是必死路线

因为像你这个 PDF,本质上是:

  • 人为排版的“教学文档”

  • 不是标准化的“试卷”

  • 同一页里可能同时出现:
    题干 + 小问 + 解析 + 图像 + 公式 + 红字提示

所以正确的认知是:

你不是在“提取题目”,
你是在还原作者脑子里的题目结构

也就是说,你真正要做的是:
文档语义分块(Semantic Chunking)+ 题目结构建模

第二层:定义你的“标准题目数据模型”(这是核心)

在动任何技术之前,先定义你最终想得到什么。

一个完整、可用、可扩展的题目 JSON,至少应该长这样:

Question {
  id
  source: {
    book_name
    chapter
    section
    page_range
  }
  meta: {
    subject: 数学
    grade: 高中
    topic: 圆锥曲线
    sub_topic: 向量与共线
    year: 2024 / 未知
    exam_type: 模拟 / 高考 / 校考
    difficulty: 0.6
    question_type: 解答题 / 选择题 / 填空题
  }
  stem: {
    text
    latex
    images[]
  }
  sub_questions: [
    {
      index: (1)
      stem
      answer
      analysis
    }
  ]
  options: []   // 选择题才有
  answer
  analysis
  knowledge_points[]
}

你后面做的一切,只是在不断逼近这个结构

第三层:PDF 预处理(决定你成功率 60% 的一步)

对这种资料,不要直接 OCR,优先顺序是:

1️⃣ PDF 文本层提取
2️⃣ 版面信息(坐标、字体、字号、颜色)
3️⃣ 再兜底 OCR(只用于公式/图片文字)

具体工具组合建议

  • pdfplumber / pdfminer

    • 文本

    • 每一行的坐标(x0, y0, x1, y1)

    • 字体大小、粗细

    • 能拿到:

  • Mathpix / PaddleOCR(公式模式)

    • 专门识别公式图

  • 页面图像渲染

    • 用于切题图、几何图

关键不是“识别准”,而是:
你能不能知道“这段文字在页面的什么位置”

第四层:文档级“语义分段”(切出题目骨架)

以你这个文档为例,天然存在几种强语义锚点

  • 「题型一 / 二 / 三」

  • 「典例 1-1 / 1-2」

  • 「变式 1-1」

  • 「解析」

  • 「(1)(2)(3)」子问

  • 红色/加粗公式说明

推荐做法:多信号联合切分

不是靠一个规则,而是投票制

1️⃣ 文本信号

  • 正则:

    • 【典例\s*\d+-\d+】

    • 【变式\s*\d+-\d+】

    • 【解析】

    • (\d+)

2️⃣ 版面信号

  • 典例标题字号更大

  • 解析往往整体偏左/偏右

  • 小问行首有固定缩进

3️⃣ 视觉信号

  • 红字、蓝字(很多教辅都有)

  • 图像下方紧跟解析

最终你要做的是:
把一页切成一组有顺序的 Block

Block {
  type: title / stem / sub_stem / analysis / image
  text
  bbox
  page
}

第五层:从 Block 组合成“一道完整题”

这是最容易出 bug、也是最值钱的一步。

组合逻辑不是“遇到解析就结束”,而是:

  • 一道题 =
    从「典例/变式标题」开始
    到「下一个同级标题」之前结束

  • 子问归属规则:

    • (1)(2)(3)出现 → 子问

    • 若解析中仍出现(1)(2),要回溯绑定

图像绑定规则(非常重要)

  • 若图片 bbox 位于某一 stem 的下方、左右 200px 内
    → 绑定到该题

  • 若图片出现在解析区
    → 标记为 analysis_image

第六层:标签与元数据的“半自动生成”

这一层,AI 才是真正主角

你不需要硬规则去判断:

  • 题型

  • 难度

  • 知识点

你要做的是:结构化喂给模型,让它“判题”

推荐做法:分层 Prompt

Prompt 1:题目理解

输入:

  • 题干

  • 子问

  • 解析

输出:

  • 这是选择 / 解答?

  • 是否为圆锥曲线?

  • 是否涉及向量共线?

Prompt 2:知识点抽取

输出:

  • 主知识点(不超过 3 个)

  • 常见误区

  • 是否为高频考点

Prompt 3:难度估计

可用维度:

  • 运算复杂度

  • 推理步数

  • 是否多知识点耦合

第七层:校验与回流(否则你迟早崩)

你一定要设计人工+自动的校验闭环

  • 随机抽题 → 人工复核

  • 发现错误 → 回溯是哪一层错了:

    • PDF 切错?

    • Block 合并错?

    • LLM 判断错?

真正能规模化的系统,
不是一次性 100% 正确,而是能快速修正

第八层:一条现实可跑的 MVP 路线

如果你现在就想做,推荐:

第一阶段(1–2 周)

  • 只做:

    • 题目切分

    • 题干 + 解析

  • 不做难度、不做知识点

第二阶段

  • 加 AI 标签

  • 加图像绑定

第三阶段

  • 做题型统计、搜索、相似题推荐

一句点醒你的话(也是你这个问题的本质)

你问的是“怎么切题”,
但真正值钱的是:

你在把“人类教师的教学经验”,转译成“机器可用的认知结构”。

这不是工具活,这是认知工程