news 2026/2/4 19:43:22

将PDF转化为RAG文件,进行数据清洗

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
将PDF转化为RAG文件,进行数据清洗

在本地 RAG 系统中使用 Marker:高精度 PDF 到 Markdown 的离线开源解决方案(2025 更新)

在本地 RAG(Retrieval-Augmented Generation)系统中,PDF 解析质量是决定最终问答准确率的关键(Garbage In, Garbage Out)。传统工具如 PyPDF2 或规则-based 提取器在处理多栏学术论文、LaTeX 公式、复杂表格时表现极差。

2025 年,Marker(由 VikParuchuri 开发)仍是学术文献 PDF 转 Markdown 的开源 SOTA 方案之一。它结合深度学习布局分析、高精度 OCR(默认 Surya)和公式重建,支持批量处理,输出干净的 Markdown + 结构化 JSON 元数据。相比 Nougat(更慢、专攻 arXiv),Marker 速度更快(4-10x)、泛化更好;相比 MinerU(表格强但配置复杂),Marker 安装更简单、VRAM 占用更低。

本节提供生产级批量 ETL 脚本,将 PDF 目录转换为 LLM 友好的 Markdown(用于 embedding)和 JSON(用于溯源引用)。

一、技术栈架构

Marker 将 PDF 的视觉层重构为语义层

  • 核心引擎:Marker(PyTorch-based)。
  • OCR:默认 Surya(文档专用、高精度),可选 ocrmypdf/Tesseract。
  • 布局分析:深度模型检测 Header/Footer/Image/Table/Equation/Code。
  • 公式处理:自动转为 LaTeX($$ 块)。
  • 表格处理:转为 HTML/Markdown 表格。
  • 后处理:启发式拼接阅读顺序、清洗噪音、保留引用。
  • 输入:批量 PDF 目录。
  • 输出:结构化 Markdown + JSON(块级 bbox、页码、图像)。
  • 硬件:NVIDIA GPU(VRAM ≥ 8GB 推荐,RTX 4070+ 可达峰值速度)。
二、环境构建

确保系统安装 CUDA Toolkit(推荐 12.1+)。

# 1. 创建虚拟环境(Python 3.10+) conda create -n pdf_etl python=3.10 conda activate pdf_etl # 2. 安装 PyTorch(根据 CUDA 版本调整) pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121 # 3. 安装 Marker(最新版支持多格式、JSON 输出) pip install marker-pdf # 4. 可选辅助库(进度条、JSON 加速) pip install tqdm ujson

首次运行会自动下载模型权重(~3-5GB,到 ~/.cache/huggingface)。

三、生产级批量转换脚本

脚本支持增量处理、错误恢复、显存清理和可选参数。避免简单 for 循环,使用 tqdm 进度监控。

新建文件:pdf_etl_pipeline.py

import os import glob import ujson as json import torch from tqdm import tqdm from marker.models import load_all_models from marker.convert import convert_single_pdf from marker.settings import settings # 可自定义设置 # --- 配置区域 --- INPUT_DIR = "./data/pdfs" # PDF 输入目录 OUTPUT_DIR = "./data/processed" # 输出目录 BATCH_MULTIPLIER = 2 # 显存倍数(RTX 4090 可设 4-8,12GB 卡建议 1-2) MAX_PAGES = None # None=全部,调试时设 10 FORCE_OCR = False # True=强制全 OCR(扫描件) OUTPUT_FORMAT = "markdown" # markdown / json / html / chunks # ---------------- def setup_models(): """加载模型并检测设备""" device = "cuda" if torch.cuda.is_available() else "cpu" print(f"🚀 运行设备: {device.upper()}") if device == "cpu": print("⚠️ CPU 模式极慢,建议使用 GPU。") # 加载所有模型(布局、OCR、公式等) models = load_all_models() settings.TORCH_DEVICE = device # 强制设备 return models def process_batch(models): """批量 ETL 主流程""" os.makedirs(OUTPUT_DIR, exist_ok=True) pdf_files = glob.glob(os.path.join(INPUT_DIR, "*.pdf")) if not pdf_files: print(f"❌ {INPUT_DIR} 中未找到 PDF 文件") return print(f"📂 发现 {len(pdf_files)} 个文件,开始转换...") success = 0 errors = [] for pdf_path in tqdm(pdf_files, desc="转换进度", unit="file"): filename = os.path.basename(pdf_path) doc_id = os.path.splitext(filename)[0] md_path = os.path.join(OUTPUT_DIR, f"{doc_id}.md") json_path = os.path.join(OUTPUT_DIR, f"{doc_id}.json") # 增量跳过 if os.path.exists(md_path) and os.path.exists(json_path): continue try: # 核心转换(返回文本、图像字典、元数据) full_text, images, out_meta = convert_single_pdf( filename=pdf_path, models=models, max_pages=MAX_PAGES, batch_multiplier=BATCH_MULTIPLIER, force_ocr=FORCE_OCR, output_format=OUTPUT_FORMAT # 可单独输出 JSON ) # 保存 Markdown with open(md_path, "w", encoding="utf-8") as f: f.write(full_text) # 保存 JSON 元数据(块级页码、bbox、图像路径) with open(json_path, "w", encoding="utf-8") as f: json.dump(out_meta, f, ensure_ascii=False, indent=2) # 可选:保存提取图像 img_dir = os.path.join(OUTPUT_DIR, doc_id + "_images") if images: os.makedirs(img_dir, exist_ok=True) for img_name, img_obj in images.items(): img_obj.save(os.path.join(img_dir, img_name)) success += 1 except Exception as e: error_msg = f"{filename} 处理失败: {str(e)}" errors.append(error_msg) torch.cuda.empty_cache() # 清理显存防 OOM 连锁 # 总结 print(f"\n✅ 完成!成功: {success}/{len(pdf_files)}") if errors: print(f"⚠️ 失败 ({len(errors)}):") for err in errors: print(f" - {err}") if __name__ == "__main__": if not os.path.exists(INPUT_DIR): os.makedirs(INPUT_DIR) print(f"📁 已创建 {INPUT_DIR},请放入 PDF 文件") else: models = setup_models() process_batch(models)

运行:python pdf_etl_pipeline.py

四、核心优势
  • 公式重建:像素公式 → 标准 LaTeX( .........),LLM 可直接理解数学逻辑。
  • 阅读顺序修复:基于 bbox 排序,多栏/复杂布局转为自然单栏流。
  • 表格高保真:HTML 表格,保留合并单元格。
  • 块级元数据:JSON 包含页码、坐标 → RAG 可实现“引用高亮原文”。
  • 速度:单 20 页论文 ~10-30 秒(GPU),批量更快。
五、替代方案与权衡(2025 更新)
方案核心技术适用场景劣势
MarkerLayout + Surya OCR + Heuristics通用学术/书籍(首选)极端复杂表格偶有丢失
MinerUVLM (1.2B-2.5B) + PDF-Extract-Kit复杂中文/扫描件/表格密集配置复杂、VRAM 高
NougatSwin + mBART纯 arXiv 公式密集速度慢(1页/10s+)、泛化差
UnstructuredYOLO + rules快速多模态提取公式/表格精度低
六、下一步:接入向量数据库

转换后,使用 LangChain 切分 + 本地 embedding:

from langchain.text_splitter import MarkdownHeaderTextSplitter headers_to_split_on = [ ("#", "Header 1"), ("##", "Header 2"), ("###", "Header 3"), ] splitter = MarkdownHeaderTextSplitter(headers_to_split_on=headers_to_split_on) with open("./data/processed/paper.md", "r", encoding="utf-8") as f: md_text = f.read() docs = splitter.split_text(md_text) # 附带标题元数据 # 接下来:embedding (bge-m3) → upsert 到 Chroma/Qdrant/Milvus

Marker + 此管道,可在本地构建高质量 RAG 知识库

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/4 6:51:48

Linux内核实时调度:从基础到实战的终极指南

Linux内核实时调度:从基础到实战的终极指南 【免费下载链接】linux-insides-zh Linux 内核揭秘 项目地址: https://gitcode.com/gh_mirrors/li/linux-insides-zh 在当今的嵌入式系统和工业自动化领域,实时性已成为系统设计的核心考量。你是否曾面…

作者头像 李华
网站建设 2026/1/27 1:06:37

大数据领域数据治理的核心要点与实践策略

大数据领域数据治理的核心要点与实践策略 1. 引入与连接 1.1 引人入胜的开场 在当今数字化时代,数据就如同石油一般,是企业和社会发展的重要资源。想象一下,一家大型电商企业,每天都能收集到海量的数据,包括用户的浏览…

作者头像 李华
网站建设 2026/1/31 17:58:34

2026毕设ssm+vue基于渐进式网页应用的大众社交软件论文+程序

本系统(程序源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、选题背景 关于“动漫内容聚合与社区化传播”问题的研究,现有研究主要以“短视频平台推荐算法”“泛二次元社区运营”或“弹…

作者头像 李华
网站建设 2026/1/31 12:45:33

MechJeb2终极指南:KSP太空飞行自动化解决方案

MechJeb2终极指南:KSP太空飞行自动化解决方案 【免费下载链接】MechJeb2 MechJeb2 - KSP mod 项目地址: https://gitcode.com/gh_mirrors/me/MechJeb2 MechJeb2是Kerbal Space Program游戏中备受推崇的自动驾驶模组,它为玩家提供了完整的飞行自动…

作者头像 李华
网站建设 2026/1/31 16:30:13

终极指南:AI框架统一工具Ivy如何重塑机器学习开发

Ivy统一AI框架正在彻底改变机器学习开发者的工作方式,让代码在不同框架间实现无缝流转。这个革命性的工具解决了长期困扰AI开发者的框架碎片化问题,真正实现了"一次编码,处处运行"的开发理念。 【免费下载链接】ivy The Unified AI…

作者头像 李华
网站建设 2026/2/4 6:39:02

2026毕设ssm+vue基于兼职信息系统设计与实现论文+程序

本系统(程序源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、选题背景关于动漫内容管理与展示系统的研究,现有研究主要以传统的内容管理系统(CMS)为主&#xff0…

作者头像 李华