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.py https://github.com/opendatalab/mineru/tree/master/scripts
2 安装mineru
安装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}')
3 python使用mineru
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内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论