基于MinerU抽取pdf、docx、xlsx、pptx等文件的内容
发布时间:2026/7/10 16:01:12
分类:文化教育
浏览:1234

目录概要环境搭建模型配置代码实现小结概要之前在项目用过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文件之前项目中用于前端展示与原文件基本一致扫描或者嵌入的图片也能正确抽取出来推荐大家快去试试吧