跳到内容

Docling 文档

Docling v2 引入了一种统一的文档表示格式,称为 DoclingDocument。它被定义为一个 pydantic 数据类型,可以表达文档共有的多种特性,例如

  • 文本、表格、图片等
  • 包含章节和分组的文档层级结构
  • 区分正文与页眉、页脚(修饰性元素)
  • 所有项的布局信息(即 bounding box),如果可用
  • 来源信息

Pydantic 类型的定义在模块 docling_core.types.doc 中实现,更多详细信息请参见源代码定义

它还提供了一套文档构建 API,可以从零开始构建 DoclingDocument

文档结构示例

为了说明 DoclingDocument 格式的特性,在下面的小节中,我们以从 tests/data/word_sample.docx 转换而来的 DoclingDocument 为例,并提供了一些并排比较,左侧显示了序列化为 YAML 的转换后文档的片段,右侧显示了原始 MS Word 中对应的部分。

基本结构

DoclingDocument 暴露了文档内容的顶层字段,分为两类。第一类是内容项,它们存储在以下字段中

  • texts:所有具有文本表示的项(段落、节标题、公式等)。基类是 TextItem
  • tables:所有表格,类型为 TableItem。可以带有结构标注。
  • pictures:所有图片,类型为 PictureItem。可以带有结构标注。
  • key_value_items:所有键值项。

以上所有字段都是列表,存储继承自 DocItem 类型的项。它们可以根据其类型表达不同的数据结构,并通过 JSON 指针引用父项和子项。

第二类是内容结构,它封装在

  • body:文档正文树形结构的根节点
  • furniture:所有不属于正文的项(页眉、页脚等)的树形结构的根节点
  • groups:一组不表示内容,但充当其他内容项容器的项(例如列表、章节)

以上所有字段仅存储 NodeItem 实例,它们通过 JSON 指针引用子项和父项。

文档的阅读顺序通过 body 树以及树中每个项的子项顺序来封装。

以下示例展示了第一页中的所有项如何嵌套在 title 项(#/texts/1)下方。

doc_hierarchy_1

分组

以下示例展示了标题“Let's swim”(#/texts/5)下的所有项如何作为子项嵌套。 “Let's swim” 的子项既有文本项,也有包含列表元素的组。组项存储在顶层 groups 字段中。

doc_hierarchy_2