基于MinerU抽取pdf、docx、xlsx、pptx等文件的内容

发布时间:2026/7/10 16:01:42

基于MinerU抽取pdf、docx、xlsx、pptx等文件的内容
目录概要环境搭建模型配置代码实现小结概要之前在项目用过MinerU最近看到又更新了好多新功能所以抽空整理了下作为一个技术分享。MinerU是一个很强大的开源文件抽取工具感谢官方团队MinerU | 面向 Agent 和 RAG 的智能文档解析平台大家快去github打星https://github.com/opendatalab/mineru主要功能介绍摘抄的官方的详细去官网看吧MinerU — 专为 LLM · RAG · Agent 场景构建的高精度文档解析引擎将 PDF · DOCX · PPTX · XLSX · 图片 · 网页转为结构化 Markdown / JSON · VLMOCR 双引擎 · 109 种语言MCP Server · LangChain / Dify / FastGPT 原生集成 · 10 国产算力适配环境搭建名称版本python3.12.9mineru3.4.2uv0.11.27相关依赖requirements.txtaccelerate1.14.0 aiofiles25.1.0 annotated-doc0.0.4 annotated-types0.7.0 anyio4.14.1 av18.0.0 beautifulsoup44.15.0 certifi2026.6.17 charset-normalizer3.4.9 click8.4.2 cobble0.1.4 colorama0.4.6 colorlog6.10.1 distro1.9.0 et-xmlfile2.0.0 fast-langdetect0.2.5 fastapi0.139.0 fasttext-predict0.9.2.4 filelock3.29.7 flatbuffers25.12.19 fsspec2026.6.0 ftfy6.3.1 h110.16.0 hf-xet1.5.1 httpcore1.0.9 httpx0.28.1 httpx-retries0.6.0 huggingface-hub0.36.2 idna3.18 jinja23.1.6 jiter0.16.0 json-repair0.61.2 loguru0.7.3 lxml6.1.1 magika1.0.3 mammoth1.12.0 markdown-it-py4.2.0 markupsafe3.0.3 mdurl0.1.2 mineru3.4.2 mineru-vl-utils1.0.5 modelscope1.38.1 modelscope-hub0.1.7 mpmath1.3.0 networkx3.6.1 numpy2.5.1 onnxruntime1.27.0 openai2.44.0 opencv-python5.0.0.93 openpyxl3.1.5 packaging26.2 pdftext0.7.0 pillow12.3.0 protobuf7.35.1 psutil7.2.2 pyclipper1.4.0 pydantic2.13.4 pydantic-core2.46.4 pydantic-settings2.14.2 pygments2.20.0 pylatexenc2.10 pypdf6.14.2 pypdfium25.9.0 pypptx-with-oxml1.0.3 python-docx1.2.0 python-dotenv1.2.2 python-multipart0.0.32 pyyaml6.0.3 qwen-vl-utils0.0.8 regex2026.6.28 reportlab5.0.0 requests2.34.2 rich15.0.0 robust-downloader0.0.2 safetensors0.8.0 setuptools81.0.0 shapely2.1.2 shellingham1.5.4 six1.17.0 sniffio1.3.1 soupsieve2.8.4 starlette1.3.1 sympy1.14.0 tokenizers0.21.4 torch2.12.1 torchvision0.27.1 tqdm4.68.4 transformers4.52.4 typer0.26.8 typing-extensions4.16.0 typing-inspection0.4.2 urllib32.7.0 uvicorn0.50.2 wcwidth0.8.2 win32-setctime1.2.0 xlsxwriter3.2.9模型配置下载模型需要用到MinerU相关模型OpenDataLab--PDF-Extract-Kit-1.0和OpenDataLab--MinerU2.5-Pro-2605-1.2B可通过命令mineru-models-download -s modelscope下载相关模型默认会下载到C:\\Users\\Admin\\.cache\\modelscope\\models下可通过C:\\Users\\用户\\mineru.json去修改模型存放路径。此外如果是非GPU跑的话需要在mineru.json中添加参数device-mode: cpu。代码实现import os # 【关键】在导入 mineru 之前限制多进程数量防止内存爆炸 os.environ[MAX_WORKERS] 1 os.environ[MINERU_MIN_BATCH_INFERENCE_SIZE] 1 from pathlib import Path from loguru import logger from mineru.cli.common import do_parse from mineru.model.docx.docx_converter import DocxConverter from mineru.model.xlsx.xlsx_converter import XlsxConverter from mineru.model.pptx.pptx_converter import PptxConverter from mineru.cli.common import read_fn from mineru.backend.pipeline.pipeline_analyze import doc_analyze_streaming # 导入核心md转换模块和枚举类 from mineru.backend.pipeline.pipeline_middle_json_mkcontent import make_blocks_to_markdown from mineru.utils.enum_class import MakeMode def parse_pdf(pdf_path, output_dir): 抽取pdf文件的内容会将解析的内容输出到指定目录 包括.md、images、.json等文件 :param pdf_path: pdf文件路径 :param output_dir: 输出文件目录 :return: 无 try: do_parse( output_dir, [Path(pdf_path).stem], [read_fn(Path(pdf_path))], [ch], end_page_id10, backendpipeline ) except Exception as e: logger.exception(e) def parse_pdf_to_memory(pdf_path: str): 纯内存解析 PDF不生成任何本地文件只抽取其文本内容返回不包含表格图片等信息 :param pdf_path: pdf文件路径 :return: 纯文本内容list try: # 1. 读取 PDF 为字节流 pdf_bytes read_fn(Path(pdf_path)) # 2. 准备内存容器用于捕获解析结果 memory_results [] # 3. 严格按照源码定义的 4 个参数定义回调函数 def on_doc_ready(doc_index, model_list, middle_json, ocr_enable): if middle_json and pdf_info in middle_json: pdf_info_list middle_json[pdf_info] # 【核心修复点】pdf_info 是一个列表需要逐页遍历处理 for page_info in pdf_info_list: # 提取每一页的预处理块列表 preproc_blocks page_info.get(preproc_blocks, []) if preproc_blocks: content_list make_blocks_to_markdown( preproc_blocks, MakeMode.CONTENT_LIST, img_buket_path ) memory_results.append(content_list) # 4. 调用 doc_analyze_streaming # 使用 MemoryWriter 替代 FileBasedDataWriter实现图片纯内存处理 doc_analyze_streaming( pdf_bytes_list[pdf_bytes], image_writer_list[None], # 关键使用内存写入器拦截图片 lang_list[ch], on_doc_readyon_doc_ready, # 关键传入回调函数 parse_methodauto, formula_enableTrue, table_enableTrue ) # 5. 将按页收集的结果合并为一个完整的列表 full_content_list [] for page_content in memory_results: full_content_list.extend(page_content) return full_content_list except Exception as e: logger.exception(e) return None def parse_docx(docx_path): 抽取docx文件的内容返回内容list :param docx_path: docx文件路径 :return: docx文件内容 with open(docx_path, rb) as fh: converter DocxConverter() converter.convert(fh) pages converter.pages print(pages) return pages def parse_xlsx(xlsx_path): 抽取xlsx文件的内容返回内容list :param xlsx_path: xlsx文件路径 :return: xlsx文件内容 with open(xlsx_path, rb) as fh: converter XlsxConverter() converter.convert(fh) pages converter.pages print(pages) return pages def parse_pptx(pptx_path): 抽取pptx文件的内容返回内容list :param pptx_path: pptx文件路径 :return: pptx文件内容 with open(pptx_path, rb) as fh: converter PptxConverter() converter.convert(fh) pages converter.pages print(pages) return pages if __name__ __main__: # 解析pdf 文件 _pdf_path D:/workpython/uv-mineru-demo/data/001.pdf _output_dir ./output parse_pdf(_pdf_path, _output_dir) # 只需要获取解析内容 parse_pdf_to_memory(_pdf_path) # 解析doc文件 _docx_path D:/workpython/uv-mineru-demo/data/001.docx parse_docx(_docx_path) # 解析excel文件 _xlsx_path D:/workpython/uv-mineru-demo/data/001.xlsx parse_xlsx(_xlsx_path ) # 解析pptx文件 _pptx_path D:/workpython/uv-mineru-demo/data/001.pptx parse_pptx(_pptx_path)小结总体抽取出的内容效果还是非常不错的特别是抽取pdf文档能把相关的内容存储成md文件之前项目中用于前端展示与原文件基本一致扫描或者嵌入的图片也能正确抽取出来推荐大家快去试试吧

相关新闻

Visual Studio 五月更新 —— 计划、评审、优化

Visual Studio 五月更新 —— 计划、评审、优化

2026/7/10 16:01:42

Plan 智能体,动工前先做好计划   刚着手编写代码,这时对着这三个文件才意识到,应该先计划好再开始的。全新的 Plan 智能体 正是为解决这类场景打造。您无需仓促直接修改代码,可借助 Copilot 协同制定可落地的计划,全…

raylib-games实战教程:Global Game Jam获奖游戏开发全流程

raylib-games实战教程:Global Game Jam获奖游戏开发全流程

2026/7/10 16:01:42

raylib-games实战教程:Global Game Jam获奖游戏开发全流程 【免费下载链接】raylib-games A collection of small sample games made with raylib 项目地址: https://gitcode.com/gh_mirrors/ra/raylib-games 想要在48小时内完成一款完整的游戏开发吗&#x…

ThriveX-Blog高可用架构:如何支撑百万级访问量

ThriveX-Blog高可用架构:如何支撑百万级访问量

2026/7/10 16:01:42

ThriveX-Blog高可用架构:如何支撑百万级访问量 【免费下载链接】ThriveX-Blog 🎉 ThriveX 是一个年轻、高颜值、全开源、永不收费的现代化博客管理系统。它采用前后端分离开发模式,是一个 NextJS Spring Boot 的产物 项目地址: https://gi…

ComfyUI-Easy-Use:让AI绘画从复杂到简单的终极解决方案

ComfyUI-Easy-Use:让AI绘画从复杂到简单的终极解决方案

2026/7/10 17:51:45

ComfyUI-Easy-Use:让AI绘画从复杂到简单的终极解决方案 【免费下载链接】ComfyUI-Easy-Use In order to make it easier to use the ComfyUI, I have made some optimizations and integrations to some commonly used nodes. 项目地址: https://gitcode.com/gh_m…

Requests-Scala与JDK 11 HttpClient:底层实现原理分析

Requests-Scala与JDK 11 HttpClient:底层实现原理分析

2026/7/10 17:51:45

Requests-Scala与JDK 11 HttpClient:底层实现原理分析 【免费下载链接】requests-scala A Scala port of the popular Python Requests HTTP client: flexible, intuitive, and straightforward to use. 项目地址: https://gitcode.com/gh_mirrors/re/requests-sc…

STM32与BQ25887实现高效锂电池平衡系统

STM32与BQ25887实现高效锂电池平衡系统

2026/7/10 17:51:45

1. BQ25887与STM32F031K6的电池平衡系统概述 在锂离子电池组应用中,两节串联(2S)电池的电压平衡是确保系统安全和延长电池寿命的关键技术。德州仪器的BQ25887作为一款集成电池平衡功能的升压充电管理IC,与STM32F031K6微控制器的组…

一机多玩:Nucleus Co-op如何让单机游戏变身多人派对

一机多玩:Nucleus Co-op如何让单机游戏变身多人派对

2026/7/10 17:51:45

一机多玩:Nucleus Co-op如何让单机游戏变身多人派对 【免费下载链接】nucleuscoop Starts multiple instances of a game for split-screen multiplayer gaming! 项目地址: https://gitcode.com/gh_mirrors/nu/nucleuscoop 你是否曾幻想过与好友围坐在同一台…

终极分屏神器Nucleus Co-op:一台电脑实现多人同乐游戏体验

终极分屏神器Nucleus Co-op:一台电脑实现多人同乐游戏体验

2026/7/10 17:51:45

终极分屏神器Nucleus Co-op:一台电脑实现多人同乐游戏体验 【免费下载链接】nucleuscoop Starts multiple instances of a game for split-screen multiplayer gaming! 项目地址: https://gitcode.com/gh_mirrors/nu/nucleuscoop 你是否曾经羡慕过主机游戏的…

CEloss注意点

CEloss注意点

2026/7/10 17:41:45

1. np.exp 溢出:在 softmax 函数中,np.exp 会对输入矩阵的每个元素取指数。当输入值较大时,指数运算的结果会变得极大,从而超出浮点数所能表示的范围,引发溢出警告。 2. np.log 除零:在 CEloss 函数里&…

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南

2026/7/9 19:40:56

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gi…

6个月转型AI工程师:实战路径与核心技能

6个月转型AI工程师:实战路径与核心技能

2026/7/9 18:28:30

1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公…

YOLOv5模型剪枝与量化实战:边缘设备部署优化

YOLOv5模型剪枝与量化实战:边缘设备部署优化

2026/7/10 6:57:56

1. 项目背景与核心价值在计算机视觉领域,YOLOv5因其出色的实时检测性能成为工业界宠儿。但当我们尝试将其部署到边缘设备(如树莓派、Jetson Nano或手机终端)时,立刻会遇到两个致命问题:模型体积庞大(原始YO…

终极原神FPS解锁器完整指南:轻松突破60帧限制

终极原神FPS解锁器完整指南:轻松突破60帧限制

2026/7/10 0:00:42

终极原神FPS解锁器完整指南:轻松突破60帧限制 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 原神FPS解锁器是一款专为《原神》玩家设计的开源工具,通过先进的Wri…

YesPlayMusic:如何用高颜值播放器重塑你的网易云音乐体验?[特殊字符]

YesPlayMusic:如何用高颜值播放器重塑你的网易云音乐体验?[特殊字符]

2026/7/10 0:00:42

YesPlayMusic:如何用高颜值播放器重塑你的网易云音乐体验?🎵 【免费下载链接】YesPlayMusic 高颜值的第三方网易云播放器,支持 Windows / macOS / Linux :electron: 项目地址: https://gitcode.com/gh_mirrors/ye/YesPlayMusic…

从零实现红黑树:手写C++的set与map容器

从零实现红黑树:手写C++的set与map容器

2026/7/10 0:00:42

1. 项目概述:从STL容器到自研轮子在C的日常开发中,std::set和std::map是我们再熟悉不过的伙伴了。它们一个负责管理不重复的集合,一个负责维护键值对映射,底层都依赖一颗高效的红黑树来保证数据的有序性和操作的性能。但你是否曾想…