安装和使用docling
1 介绍
Docling是一个功能强大的文档解析和转换工具,能够将PDF, DOCX, PPTX, XLSX, Images, HTML, AsciiDoc 和Markdown文档转换为HTML、Markdown 和JSON格式。Docling不支持将公式转为Markdown格式。支持OCR(EasyOCR、Tesseract等),安装配置简单。
Docling与MinerU、Marker的功能相似,其中MinerU支持PDF(支持较好)转Markdown、JSON、HTML、Office,支持将公式转为Markdown格式。支持OCR(PaddleOCR),安装配置相对Docling复杂一些。
MarkItDown是微软开源的将Office的文件转化为markdown的项目,支持Office、音频、PDF、OCR等,不过PDF和OCR的支持不太好。
Docling参考地址
# Docling的Github地址
https://github.com/DS4SD/docling
# Docling官网网址
https://ds4sd.github.io/docling/
# EasyOCR的GitHub地址
https://github.com/JaidedAI/EasyOCR
# 模型下载地址
https://www.jaided.ai/easyocr/modelhub/
# EasyOCR官网
https://www.jaided.ai/
MinerU
# Github地址
https://github.com/opendatalab/MinerU
MarkItDown
# Github地址
https://github.com/microsoft/markitdown
2 安装Docling
⚠️ 如果代码执行有问题,请更换软件版本
# 安装docling
pip install docling
# 安装OCR工具
pip install easyocr
3 代码
3.1 EasyOCR简单使用
import easyocr
ocr_model_path = "E:/model/ocr/EasyOCR/model"
reader = easyocr.Reader(
# 设置识别图片中语言的模型
lang_list=['ch_sim', 'en'],
# 注意会自动下载模型到路径下,可以不指定模型目录,会自动下载到C盘下
# 包括三个模型
# 文本检测模型:CRAFT -- craft_mlt_25k.pth
# 中文简体模型:ch_sim -- zh_sim_g2.pth
# 英文模型:en -- latin_g2.pth
model_storage_directory=ocr_model_path
)
result = reader.readtext("E:/test/test.png")
print(result)
3.2 Docling简单使用
官网代码
官网代码会自动将Docling和OCR模型下载到C盘中,由于国内HuggingFace不能直接访问,因此下载Docling会失败,无法执行代码。
from docling.document_converter import DocumentConverter
source = "https://arxiv.org/pdf/2408.09869" # document per local path or URL
converter = DocumentConverter()
result = converter.convert(source)
print(result.document.export_to_markdown()) # output: "## Docling Technical Report[...]"
自定义模型路径
在modelscop上查找“docling-models”,并下载下来;或者在HuggingFace上查找,并下载“ds4sd/docling-models”。
from docling.datamodel.base_models import InputFormat
from docling.datamodel.pipeline_options import PdfPipelineOptions, EasyOcrOptions
from docling.document_converter import PdfFormatOption, DocumentConverter
# 参考接口地址
# https://ds4sd.github.io/docling/v2/#access-document-structures
# 配置OCR模型,设置EasyOCR模型的路径
easyocr_model_storage_directory = "E:/model/ocr/EasyOCR/model"
easyocr_options = EasyOcrOptions()
easyocr_options.model_storage_directory = easyocr_model_storage_directory
# 配置pdf模型,设置Docling模型的路径
pdf_artifacts_path = "E:/model/docling-models"
pdf_pipeline_options = PdfPipelineOptions(artifacts_path=pdf_artifacts_path)
pdf_pipeline_options.ocr_options = easyocr_options
# 转换模型
converter = DocumentConverter(
format_options={
InputFormat.PDF: PdfFormatOption(pipeline_options=pdf_pipeline_options),
InputFormat.IMAGE: ImageFormatOption(pipeline_options=pdf_pipeline_options),
InputFormat.PPTX: PowerpointFormatOption(pipeline_options=pdf_pipeline_options),
InputFormat.DOCX: WordFormatOption(pipeline_options=pdf_pipeline_options),
InputFormat.XLSX: ExcelFormatOption(pipeline_options=pdf_pipeline_options),
InputFormat.HTML: HTMLFormatOption(pipeline_options=pdf_pipeline_options)
}
)
source = "E:/test/test.pdf"
result = converter.convert(source)
print(result.document.export_to_markdown())
3.3 新版本离线安装
参考地址
https://ds4sd.github.io/docling/usage/
3.3.1 下载模型
⚠️ 注意:OCR模型默认下载的只用英文不支持中文,中文需要下载相应的模型并指定语言。
# 整理的模型,下载后可直接使用
https://github.com/MasonYyp/docling-models
命令下载模型
# 命令下载,注意默认下载到用户目录下
docling-tools models download
代码下载模型
from pathlib import Path
from docling.utils import model_downloader
# 指定下载目录
output_dir = Path("E:/docling-models")
test = model_downloader.download_models(
output_dir=output_dir
)
print(test)
3.3.2 Python代码
import pathlib
from docling.datamodel.base_models import InputFormat
from docling.datamodel.pipeline_options import PdfPipelineOptions, EasyOcrOptions
from docling.document_converter import DocumentConverter, PdfFormatOption
# 指定模型路径
artifacts_path = "E:/docling-models"
# 指定OCR模型
easyocr_options = EasyOcrOptions()
# 支持中文和英文,注意必须下载中文简体的支持(zh_sim_g2.pth)
# 可以不设置,默认语言:["fr", "de", "es", "en"]
easyocr_options.lang = ['ch_sim','en']
pipeline_options = PdfPipelineOptions(artifacts_path=artifacts_path)
# 设置支持OCR
pipeline_options.do_ocr = True
# 设置支持表结构
pipeline_options.do_table_structure = True
# 指定OCR模型,可以不设置
pipeline_options.ocr_options = easyocr_options
converter = DocumentConverter(
format_options={
InputFormat.PDF: PdfFormatOption(pipeline_options=pipeline_options)
}
)
source = "E:/test/test-5-2.pdf"
result = converter.convert(source)
md_text= result.document.export_to_markdown()
# 存储markdown
pathlib.Path("E:/test/test-5-2.md").write_bytes(md_text.encode())