> 技术文档 > Python简单使用MinerU_mineru python

Python简单使用MinerU_mineru python


Python简单使用MinerU

1 简介

MinerU是国产的一款将PDF转化为机器可读格式的工具(如markdown、json),可以很方便地抽取为任意格式。目前支持图像(.jpg及.png)、PDF、Word(.doc及.docx)、以及PowerPoint(.ppt及.pptx)等。

# 官网地址https://mineru.readthedocs.io/en/latest/index.html# Github地址https://github.com/opendatalab/mineru# API接口地址https://mineru.readthedocs.io/en/latest/user_guide/quick_start/convert_pdf.html# 模型下载脚本地址# 从ModelScope下载模型:download_models.py# 从HuggingFace下载模型: download_models_hf.pyhttps://github.com/opendatalab/MinerU/tree/master/scripts

2 安装MinerU

安装Python环境

# 我的版本是:magic-pdf==1.1.0pip install -U \"magic-pdf[full]\" -i https://pypi.tuna.tsinghua.edu.cn/simple

下载权重

官网提供了HuggingFace和ModelScope两种方法下载,本文从ModlScope上下载,

# 官网下载方法地址https://github.com/opendatalab/MinerU/blob/master/docs/how_to_download_models_zh_cn.md

开始下载权重

⚠️ 注意:模型下载完成后,脚本会自动生成用户目录下的magic-pdf.json文件,并自动配置默认模型路径。 您可在【用户目录】下找到magic-pdf.json文件。

# 安装modelscopepip install modelscope# 下载文件wget https://gcore.jsdelivr.net/gh/opendatalab/MinerU@master/scripts/download_models.py -O download_models.py# 也可以到下面的地址,找到download_models.py下载https://github.com/opendatalab/MinerU/tree/master/scripts# 执行下载模型# 为了方便使用模型,我修改了download_models.py,添加了设置模型的位置。python download_models.py

修改后的download_models.py

⚠️ 此步可以不做。

文件中的local_dir是我新加的下载模型的位置,如果不设置会下载到下面目录中:windows的用户目录为 “C:\\Users\\用户名”, linux用户目录为 “/home/用户名”。

import jsonimport osimport requestsfrom modelscope import snapshot_downloaddef download_json(url): # 下载JSON文件 response = requests.get(url) response.raise_for_status() # 检查请求是否成功 return response.json()def download_and_modify_json(url, local_filename, modifications): if os.path.exists(local_filename): data = json.load(open(local_filename)) config_version = data.get(\'config_version\', \'0.0.0\') if config_version < \'1.1.1\': data = download_json(url) else: data = download_json(url) # 修改内容 for key, value in modifications.items(): data[key] = value # 保存修改后的内容 with open(local_filename, \'w\', encoding=\'utf-8\') as f: json.dump(data, f, ensure_ascii=False, indent=4)if __name__ == \'__main__\': mineru_patterns = [ \"models/Layout/LayoutLMv3/*\", \"models/Layout/YOLO/*\", \"models/MFD/YOLO/*\", \"models/MFR/unimernet_small_2501/*\", \"models/TabRec/TableMaster/*\", \"models/TabRec/StructEqTable/*\", ] # 设置模型下载的位置 local_dir=\"E:/mineru\" # 下载模型 model_dir = snapshot_download(\'opendatalab/PDF-Extract-Kit-1.0\', allow_patterns=mineru_patterns, local_dir=local_dir) layoutreader_model_dir = snapshot_download(\'ppaanngggg/layoutreader\', local_dir=local_dir) model_dir = model_dir + \'/models\' print(f\'model_dir is: {model_dir}\') print(f\'layoutreader_model_dir is: {layoutreader_model_dir}\') json_url = \'https://gcore.jsdelivr.net/gh/opendatalab/MinerU@master/magic-pdf.template.json\' config_file_name = \'magic-pdf.json\' home_dir = os.path.expanduser(\'~\') config_file = os.path.join(home_dir, config_file_name) json_mods = { \'models-dir\': model_dir, \'layoutreader-model-dir\': layoutreader_model_dir, } download_and_modify_json(json_url, config_file, json_mods) print(f\'The configuration file has been configured successfully, the path is: {config_file}\')

3 Python使用MinerU

Python安装完MinerU后,可以直接执行下面的代码,首次执行时会自动下载PaddleOCR模型的权重和参数,PaddleOCR模型会自动下载到用户目录下的.paddleocr目录下。

解析PDF文件的Python代码如下:

import osfrom magic_pdf.data.data_reader_writer import FileBasedDataWriter, FileBasedDataReaderfrom magic_pdf.data.dataset import PymuDocDatasetfrom magic_pdf.model.doc_analyze_by_custom_model import doc_analyzefrom magic_pdf.config.enums import SupportedPdfParseMethod# pdf文件路径pdf_file_path = \"E:/hello/test-5-2.pdf\"# 获取没有后缀的pdf文件名称pdf_file_path_without_suff = pdf_file_path.split(\".\")[0]print(pdf_file_path_without_suff)# 文件所在的目录pdf_file_path_parent_dir = os.path.dirname(pdf_file_path)image_dir = os.path.join(pdf_file_path_parent_dir, \"images\")print(image_dir)# Markdown的写入实例# markdown_dir = \"./output/markdown\"# writer_markdown = FileBasedDataWriter(markdown_dir)writer_markdown = FileBasedDataWriter()# 读取图片writer_image = FileBasedDataWriter(image_dir)# 读取文件流reader_pdf = FileBasedDataReader(\"\")bytes_pdf = reader_pdf.read(pdf_file_path)# 处理数据dataset_pdf = PymuDocDataset(bytes_pdf)# 判断是否支持ocrif dataset_pdf.classify() == SupportedPdfParseMethod.OCR: # 支持OCR infer_result = dataset_pdf.apply(doc_analyze, ocr=True) pipe_result = infer_result.pipe_ocr_mode(writer_image)else: # 不支持OCR infer_result = dataset_pdf.apply(doc_analyze, ocr=False) pipe_result = infer_result.pipe_txt_mode(writer_image)# 在每一页上都使用模型解析文本infer_result.draw_model(pdf_file_path)# 获取模型处理后的结果model_inference_result = infer_result.get_infer_res()print(model_inference_result)# 为pdf生成含有颜色标注布局的pdf文件pipe_result.draw_layout(f\"{pdf_file_path_without_suff}_layout.pdf\")# 为pdf生成含有颜色标注文本行的pdf文件pipe_result.draw_span(f\"{pdf_file_path_without_suff}_spans.pdf\")# 获取markdown的内容markdown_content = pipe_result.get_markdown(image_dir)print(markdown_content)# 保存markdown文件# pipe_result.dump_md(writer_markdown, f\"{pdf_file_path_without_suff}.md\", image_dir)pipe_result.dump_md(writer_markdown, f\"{pdf_file_path_without_suff}.md\", image_dir)# json文本列表# 数据类型包括type、text、text_level、page_idx、img_path等content_list_content = pipe_result.get_content_list(image_dir)print(content_list_content)# 保存json文本列表pipe_result.dump_content_list(writer_markdown, f\"{pdf_file_path_without_suff}_content_list.json\", image_dir)# 获取含有位置信息的json文本middle_json_content = pipe_result.get_middle_json()# 保存含有位置信息的json文本pipe_result.dump_middle_json(writer_markdown, f\'{pdf_file_path_without_suff}_middle.json\')