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