玩转文档处理,Docling 让一切变得简单
文章目录
- 玩转文档处理,Docling 让一切变得简单
- 一、背景:为什么选择 Docling?
- 二、Docling 是什么?
- 三、如何安装 Docling?
- 四、Docling 的核心函数及使用方法
- 1\. `DocumentConverter.convert()`
- 2\. `export_to_markdown()`
- 3\. `export_to_json()`
- 4\. `HierarchicalChunker.chunk()`
- 5\. `PdfPipelineOptions`
- 五、Docling 的应用场景
- 场景 1:将 PDF 转换为 Markdown
- 场景 2:处理扫描版 PDF
- 场景 3:限制文档处理大小
- 场景 4:提取文档分块
- 场景 5:与 LlamaIndex 集成
- 六、常见问题及解决方案
- 问题 1:OCR 引擎未安装
- 问题 2:PyTorch 安装问题
- 问题 3:文档转换超时
- 七、总结

玩转文档处理,Docling 让一切变得简单
一、背景:为什么选择 Docling?
在日常工作中,我们常常需要处理各种格式的文档,如
PDF、Word、PPT、HTML,甚至是图片中的文字内容。这些文档格式繁多,处理起来往往需要不同的工具和技术,效率低下且容易出错。Docling
正是为了解决这一痛点而生。
Docling 是一个强大的 Python 第三方库,专注于文档处理和转换。它支持多种主流文档格式,包括
PDF、DOCX、PPTX、HTML、图片等,并能深度解析 PDF 的页面布局、阅读顺序和表格结构。此外,Docling
提供了统一的文档表示格式(DoclingDocument),可以方便地将文档导出为 Markdown、HTML 或 JSON 等格式。它还支持 OCR
功能,能够处理扫描版的 PDF 和图片。
更重要的是,Docling 无缝集成了 LlamaIndex 和 LangChain
等流行的人工智能框架,非常适合用于构建知识问答(QA)和检索增强生成(RAG)应用。接下来,我们将深入探索 Docling 的强大功能和使用方法。
二、Docling 是什么?
Docling 是一个开源的 Python 库,由 IBM
团队开发。它的目标是简化文档处理流程,支持多种文档格式的解析和转换,并提供与人工智能生态系统的无缝集成。Docling 提供了丰富的功能,包括但不限于:
-
支持多种文档格式的解析和转换。
-
深度解析 PDF 文档,包括页面布局、表格结构和阅读顺序。
-
提供统一的文档表示格式,便于后续处理。
-
支持多种导出格式,如 Markdown、HTML 和 JSON。
-
集成 OCR 功能,支持扫描文档的处理。
-
提供命令行工具(CLI),方便快速操作。
三、如何安装 Docling?
作为第三方库,Docling 可以通过 pip 命令轻松安装:
bash复制
pip install docling
此外,如果需要支持 CPU 版本的 PyTorch,可以使用以下命令:
bash复制
pip install docling --extra-index-url https://download.pytorch.org/whl/cpu
安装完成后,你就可以开始使用 Docling 的强大功能了。
四、Docling 的核心函数及使用方法
以下是 Docling 中常用的五个核心函数及其使用方法:
1. DocumentConverter.convert()
这是 Docling 中最核心的函数,用于将文档转换为 DoclingDocument 格式。
Python复制
from docling.document_converter import DocumentConverter
source = "path/to/your/document.pdf" # 或者使用在线文档的 URL
converter = DocumentConverter()
result = converter.convert(source)
-
第一行导入了
DocumentConverter
类。 -
source
是文档的路径或 URL。 -
converter.convert(source)
将文档转换为 DoclingDocument 格式,结果存储在result
中。
2. export_to_markdown()
将 DoclingDocument 导出为 Markdown 格式。
Python复制
markdown_content = result.document.export_to_markdown()
print(markdown_content)
-
result.document.export_to_markdown()
将文档导出为 Markdown 格式。 -
输出的 Markdown 内容可以用于进一步的处理或存储。
3. export_to_json()
将 DoclingDocument 导出为 JSON 格式。
Python复制
json_content = result.document.export_to_json()
print(json_content)
-
result.document.export_to_json()
将文档导出为 JSON 格式。 -
JSON 格式便于与其他系统或工具集成。
4. HierarchicalChunker.chunk()
对文档进行分块操作。
Python复制
from docling_core.transforms.chunker import HierarchicalChunker
chunks = list(HierarchicalChunker().chunk(result.document))
print(chunks[0])
-
HierarchicalChunker().chunk(result.document)
将文档分块。 -
输出的分块内容包含文本和元数据,便于后续处理。
5. PdfPipelineOptions
自定义 PDF 处理选项。
Python复制
from docling.datamodel.pipeline_options import PdfPipelineOptions
pipeline_options = PdfPipelineOptions(do_table_structure=True)
converter = DocumentConverter(
format_options={"pdf": PdfPipelineOptions(pipeline_options=pipeline_options)}
)
-
PdfPipelineOptions
用于自定义 PDF 处理选项,例如是否解析表格结构。 -
这些选项可以通过
DocumentConverter
的参数传递。
五、Docling 的应用场景
以下是五个常见的使用场景及其代码示例:
场景 1:将 PDF 转换为 Markdown
Python复制
from docling.document_converter import DocumentConverter
source = "path/to/your/document.pdf"
converter = DocumentConverter()
result = converter.convert(source)
markdown_content = result.document.export_to_markdown()
print(markdown_content)
- 将 PDF 文件转换为 Markdown 格式,便于在 Markdown 编辑器中进一步处理。
场景 2:处理扫描版 PDF
Python复制
from docling.datamodel.pipeline_options import PipelineOptions, EasyOcrOptions
from docling.document_converter import DocumentConverter
pipeline_options = PipelineOptions()
pipeline_options.do_ocr = True
pipeline_options.ocr_options = EasyOcrOptions()
converter = DocumentConverter(pipeline_options=pipeline_options)
result = converter.convert("path/to/scanned_document.pdf")
- 使用 OCR 功能处理扫描版的 PDF 文件。
场景 3:限制文档处理大小
Python复制
from docling.document_converter import DocumentConverter
source = "path/to/your/document.pdf"
converter = DocumentConverter()
result = converter.convert(source, max_num_pages=100, max_file_size=20971520)
- 限制文档的处理大小,避免处理过大的文件。
场景 4:提取文档分块
Python复制
from docling.document_converter import DocumentConverter
from docling_core.transforms.chunker import HierarchicalChunker
converter = DocumentConverter()
result = converter.convert("path/to/your/document.pdf")
chunks = list(HierarchicalChunker().chunk(result.document))
print(chunks[0])
- 对文档进行分块处理,便于后续的分析和处理。
场景 5:与 LlamaIndex 集成
Python复制
from llama_index.readers.docling import DoclingReader
from llama_index.core import VectorStoreIndex
source = "path/to/your/document.pdf"
reader = DoclingReader()
documents = reader.load_data(source)
index = VectorStoreIndex.from_documents(documents)
- 将 Docling 与 LlamaIndex 集成,用于构建知识问答系统。
六、常见问题及解决方案
以下是使用 Docling 时常见的三个问题及其解决方案:
问题 1:OCR 引擎未安装
错误信息 :
Error: OCR engine not found
解决方案 :
如果使用 Tesseract OCR,需要先安装 Tesseract:
bash复制
brew install tesseract leptonica pkg-config
然后设置 TESSDATA_PREFIX
环境变量:
bash复制
TESSDATA_PREFIX=/opt/homebrew/share/tessdata/
问题 2:PyTorch 安装问题
错误信息 :
Error: PyTorch not found
解决方案 :
根据你的系统架构选择合适的 PyTorch 版本:
bash复制
pip install docling --extra-index-url https://download.pytorch.org/whl/cpu
问题 3:文档转换超时
错误信息 :
Error: Document conversion timeout
解决方案 :
在调用 convert()
方法时,可以通过 timeout
参数设置超时时间:
Python复制
result = converter.convert(source, timeout=300)
七、总结
Docling 是一个功能强大的 Python
第三方库,专注于文档处理和转换。它支持多种文档格式,提供深度解析功能,并能够与人工智能框架无缝集成。通过简单的安装和使用,Docling
可以极大地简化文档处理流程,提高工作效率。无论是将 PDF 转换为 Markdown,还是处理扫描版文档,Docling
都能轻松应对。如果你正在寻找一个高效、灵活的文档处理工具,Docling 绝对值得一试!
如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!