Skip to content

Latest commit

 

History

History
78 lines (55 loc) · 2.34 KB

File metadata and controls

78 lines (55 loc) · 2.34 KB

PDF 预处理与表格友好切块

本文档记录当前 PDF 入库策略,重点解决国标文件中大量表格、限量值、单位和页码溯源的问题。

当前流程

PDF
  -> PyMuPDF 按页读取
  -> 页面正文块提取
  -> 表格区域检测
  -> 正文块避开表格区域
  -> 表格转 Markdown
  -> 表格逐行转“检索事实”
  -> RuleChunker 切块
  -> 每个 chunk 加来源文件、页码、内容类型、表格号、表题
  -> BGE Embedding
  -> ChromaDB

内容类型

当前会生成以下 chunk_type

类型 说明
page_text PDF 页面正文,不包含检测到的表格区域
table_markdown 表格原文转 Markdown,保留整体结构
table_row_fact 表格每一行转成面向问答检索的自然语言事实

表格行事实示例

原始表格可能是:

食品名称 食品添加剂 最大使用量/(g/kg)
糕点 山梨酸钾 1.0

入库时会生成类似文本:

来源文件:GB xxxx.pdf;页码:第12页;内容类型:table_row_fact;表格:2。
来源:第12页,表格2。检索事实:山梨酸钾在糕点中的最大使用量/(g/kg)为1.0,单位见字段“最大使用量/(g/kg)”。可检索问法:山梨酸钾在糕点中的限量是多少。完整字段:食品名称为糕点;食品添加剂为山梨酸钾;最大使用量/(g/kg)为1.0。

这样比单纯保存表格文本更适合回答:

山梨酸钾在糕点中的限量是多少?

当前未做

当前还没有真正接入 PaddleOCR。对于扫描件 PDF,后续会增加:

页面渲染为图片 -> PaddleOCR -> 版面/表格恢复 -> 同样生成 page_text/table_row_fact

当前也没有使用 DeepSeek 做表格抽取。原因是基础表格解析和类型识别应优先使用确定性工程逻辑;DeepSeek 更适合后续做:

  • 表格标题补全
  • 字段语义归一
  • 复杂表头解释
  • 自动生成更多问法
  • 对 OCR 噪声进行纠错

对向量库的影响

只运行预处理脚本不会影响向量库。

调用 /api/v1/documents/upload 会写入:

  • SQLite:data/app.db
  • 原始文件:data/uploads/
  • ChromaDB:data/chroma/

目前重复上传同一文件会产生多个 document_id 和重复向量。后续应增加 file_hash,支持重复文件跳过或覆盖。