Python使用MinerU的简单的示例

作者:

文章目录
  • 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.py https://github.com/opendatalab/MinerU/tree/master/scripts
  • 安装Python环境 # 我的版本是:magic-pdf==1.1.0 pip 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文件。 # 安装modelscope pip 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 json import os import requests from modelscope import snapshot_download def 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}’)
  • Python安装完MinerU后,可以直接执行下面的代码,首次执行时会自动下载PaddleOCR模型的权重和参数,PaddleOCR模型会自动下载到用户目录下的.paddleocr目录下。 解析PDF文件的Python代码如下: import os from magic_pdf.data.data_reader_writer import FileBasedDataWriter, FileBasedDataReader from magic_pdf.data.dataset import PymuDocDataset from magic_pdf.model.doc_analyze_by_custom_model import doc_analyze from 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) # 判断是否支持ocr if 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’) 到此这篇关于Python使用MinerU的简单的示例的文章就介绍到这了,更多相关Python使用MinerU内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!  您可能感兴趣的文章: python中使用xlrd、xlwt操作excel表格详解 python中的sort方法使用详解 Python random模块(获取随机数)常用方法和使用例子 详细介绍Python进度条tqdm的使用 使用python调用浏览器并打开一个网址的例子 Python标准库之Sys模块使用详解 python标准日志模块logging的使用方法
  • 目录
    • 1 简介
    • 2 安装MinerU
    • 3 Python使用MinerU

    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.py
    https://github.com/opendatalab/MinerU/tree/master/scripts
    

    安装Python环境

    # 我的版本是:magic-pdf==1.1.0
    pip 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文件。

    # 安装modelscope
    pip 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 json
    import os
    
    import requests
    from modelscope import snapshot_download
    
    
    def 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}')
    

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

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

    import os
    
    from magic_pdf.data.data_reader_writer import FileBasedDataWriter, FileBasedDataReader
    from magic_pdf.data.dataset import PymuDocDataset
    from magic_pdf.model.doc_analyze_by_custom_model import doc_analyze
    from 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)
    
    # 判断是否支持ocr
    if 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')

    到此这篇关于Python使用MinerU的简单的示例的文章就介绍到这了,更多相关Python使用MinerU内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 

    您可能感兴趣的文章:

    • python中使用xlrd、xlwt操作excel表格详解
    • python中的sort方法使用详解
    • Python random模块(获取随机数)常用方法和使用例子
    • 详细介绍Python进度条tqdm的使用
    • 使用python调用浏览器并打开一个网址的例子
    • Python标准库之Sys模块使用详解
    • python标准日志模块logging的使用方法

    站内搜索