ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Docling v2 迁移指南:DocumentConverter、CLI 与 DoclingDocument 的完整用法解析

Docling v2 迁移指南:DocumentConverter、CLI 与 DoclingDocument 的完整用法解析 Docling v2 迁移指南DocumentConverter、CLI 与 DoclingDocument 的完整用法解析【免费下载链接】doclingGet your documents ready for gen AI项目地址: https://gitcode.com/GitHub_Trending/do/doclingDocling v2 是一次面向多格式文档理解与转换的 API 重构它统一了 CLI 的输入输出格式声明方式--from/--to重写了DocumentConverter的初始化模型按格式白名单 按格式定制选项并将所有文档导出能力从ConversionResult迁移到了新的通用文档表示DoclingDocument上。读完本文你将掌握 v2 的 CLI 语法、DocumentConverter的完整配置方式、convert/convert_all的调用与错误处理语义以及DoclingDocument的迭代、导出、JSON 持久化与重新加载、分块Chunking等核心实战能力并了解这些 API 在源码中的真实实现位置。Docling v2 带来什么Docling v2 引入了三类新特性见 docs/v2.md多格式理解与转换支持 PDF、MS Word、MS PowerPoint、HTML 以及多种图片格式的解析与转换通用文档表示产出新的通用文档表示即DoclingDocument可以封装完整的文档层级结构标题、正文、表格、图片等全新的 API 与 CLI转换入口、格式声明、导出方式全部围绕新的文档模型重新设计。从源码结构看这一“新 API”的核心入口就是 DocumentConverter它在初始化时维护allowed_formats允许转换的输入格式白名单与format_to_options每个格式对应的FormatOption包含 pipeline 类、pipeline 选项和文档后端转换方法统一返回携带DoclingDocument的ConversionResult。CLI 的语法变化Docling v2 更新了命令行语法以支持多种格式。典型用法如下与 docs/v2.md 中一致# 将单个文件转换为 Markdown默认输出 docling myfile.pdf # 将单个文件转换为 JSON 和 Markdown并关闭 OCR docling myfile.pdf --to json --to md --no-ocr # 将输入目录中的 PDF 文件转换为 Markdown默认 docling ./input/dir --from pdf # 将输入目录中的 PDF 和 Word 文件转换为 Markdown 和 JSON docling ./input/dir --from pdf --from docx --to md --to json --output ./scratch # 转换输入目录中所有受支持的文件遇到第一个错误即中止 docling ./input/dir --output ./scratch --abort-on-error相对 Docling v1 的关键变化移除了针对不同导出格式的独立开关统一替换为--from输入格式与--to输出格式参数新增--abort-on-error批处理转换中一旦遇到错误立即中止移除了原来针对 PDF 的--backend选项。这些变化都能在 CLI 源码中得到印证。docling/cli/main.py 中定义了--from与--to两个多值选项--to缺省时默认输出 Markdown见 docling/cli/main.py#L1270-L1271。--abort-on-error在 docling/cli/main.py#L999-L1006 中实现帮助文本明确其为“遇到第一个错误时中止处理”。需要说明的是v1 的--backend虽然被移除但当前 CLI 以--pdf-backend的方式保留了 PDF 解析后端的选择能力其取值为PdfBackend枚举默认THREADED_DOCLING_PARSE见 docling/cli/main.py#L924-L926。输入格式枚举InputFormat与输出格式枚举OutputFormat定义在 docling/datamodel/base_models.py#L97-L145--from/--to接受的具体字符串取值即以这两个枚举为准。此外当第一个参数不是子命令时CLI 会通过 自定义 Typer 命令组 自动路由到convert命令因此docling myfile.pdf这种“裸调用”形式依然可用。设置 DocumentConverter格式白名单与按格式定制为了容纳多种输入格式v2 改变了DocumentConverter的初始化方式你可以在初始化时定义一份允许的格式列表allowed_formats并按格式提供自定义选项format_options。默认情况下所有受支持格式都被允许若未提供format_options则所有allowed_formats都会使用各自的默认值。格式选项可以包含要使用的 pipeline 类、传给 pipeline 的选项以及文档后端。它们以格式专属类型提供例如PdfFormatOption、WordFormatOption等from docling.document_converter import DocumentConverter from docling.datamodel.base_models import InputFormat from docling.document_converter import ( DocumentConverter, PdfFormatOption, WordFormatOption, ) from docling.pipeline.simple_pipeline import SimplePipeline from docling.pipeline.standard_pdf_pipeline import StandardPdfPipeline from docling.datamodel.pipeline_options import PdfPipelineOptions from docling.backend.pypdfium2_backend import PyPdfiumDocumentBackend ## 默认初始化方式保持不变 # doc_converter DocumentConverter() # 原先的 PipelineOptions 现在叫 PdfPipelineOptions pipeline_options PdfPipelineOptions() pipeline_options.do_ocr False pipeline_options.do_table_structure True #... ## 自定义选项现在按格式定义。 doc_converter ( DocumentConverter( # 下面所有参数都是可选的内部有默认值。 allowed_formats[ InputFormat.PDF, InputFormat.IMAGE, InputFormat.DOCX, InputFormat.HTML, InputFormat.PPTX, ], # 格式白名单不匹配的文件会被忽略。 format_options{ InputFormat.PDF: PdfFormatOption( pipeline_optionspipeline_options, # pipeline 选项放这里。 backendPyPdfiumDocumentBackend # 可选选用其他后端 ), InputFormat.DOCX: WordFormatOption( pipeline_clsSimplePipeline # 办公格式和 HTML 的默认值 ), }, ) )提示如果只使用默认配置v2 的行为与 v1 完全一致。从源码看这一机制在 DocumentConverter.init中实现allowed_formats为None时取list(InputFormat)即全量受支持格式format_to_options对每个允许的格式做“自定义选项优先否则回落到默认选项”的填充默认选项由内部映射表给出——例如 PDF 默认使用StandardPdfPipelineThreadedDoclingParseDocumentBackend而 DOCX/PPTX/HTML/ODT 等办公与网页格式默认使用SimplePipeline见 _get_default_optionFormatOption基类带有模型校验器若未显式提供pipeline_options会自动用pipeline_cls.get_default_options()填充见 docling/document_converter.py#L103-L117。BaseFormatOption的结构pipeline_options与backend两个核心字段定义在 docling/datamodel/base_models.py#L74-L85。完整的多格式转换示例可参考 docs/examples/run_with_formats.py它演示了混合文件列表PDF、DOCX、PPTX、HTML、图片等的转换与导出PDF 侧的 pipeline 与后端组合示例见 docs/examples/custom_convert.py。更深入的转换参数请查看参考文档 docs/reference/document_converter.md 与 docs/reference/pipeline_options.md。转换文档convert 与 convert_allv2 简化了向DocumentConverter提供输入的方式并为转换方法重新命名以获得更清晰的语义你可以直接用单个文件、文件列表或DocumentStream对象发起转换而无需先构造DocumentConversionInput对象。DocumentConverter.convert现在负责转换单个文件输入此前为convert_singleDocumentConverter.convert_all现在负责一次转换多个文件此前为convert。from docling.datamodel.document import ConversionResult ## 转换单个文件支持 URL 或本地路径 conv_result: ConversionResult doc_converter.convert(https://arxiv.org/pdf/2408.09869) # 原先为 convert_single ## 一次转换多个文件 input_files [ tests/data/html/wiki_duck.html, tests/data/docx/word_sample.docx, tests/data/docx/lorem_ipsum.docx, tests/data/pptx/powerpoint_sample.pptx, tests/data/2305.03393v1-pg9-img.png, tests/data/pdf/2206.01062.pdf, ] # 直接把文件列表或流传给 convert_all conv_results_iter doc_converter.convert_all(input_files) # 原先为 convert通过raises_on_error参数你可以控制转换在首次遇到问题时是抛出异常还是“韧性”地把所有文件都转换完、将错误反映在每个文件的转换状态中。默认情况下任何错误会立即抛出并中止转换此前 v1 会吞掉异常。conv_results_iter doc_converter.convert_all(input_files, raises_on_errorFalse) # 原先为 convert源码层面convert 内部把单个 source 包装成单元素列表后委托给 convert_allraises_on_errorTrue时只要某个结果的status不在SUCCESS/PARTIAL_SUCCESS中就会抛出ConversionError并携带各ErrorItem的错误信息见 docling/document_converter.py#L576-L591。转换状态枚举ConversionStatuspending/started/failure/success/partial_success/skipped定义在 docling/datamodel/base_models.py#L88-L94。此外convert/convert_all均标注了validate_call严格校验并额外接受max_num_pages、max_file_size、page_range等限制参数可用于控制单文档页数上限与页码范围。访问文档结构DoclingDocumentv2 同样简化了访问与导出转换结果的方式。通用文档表示现在以DoclingDocument对象的形式出现在转换结果中。DoclingDocument提供了一组便捷的 API用于构建、迭代和导出文档内容import pandas as pd from docling_core.types.doc import TextItem, TableItem conv_result: ConversionResult doc_converter.convert(https://arxiv.org/pdf/2408.09869) # 原先为 convert_single ## 查看转换后的文档结构 conv_result.document.print_element_tree() ## 按阅读顺序迭代元素含层级级别 for item, level in conv_result.document.iterate_items(): if isinstance(item, TextItem): print(item.text) elif isinstance(item, TableItem): table_df: pd.DataFrame item.export_to_dataframe(docconv_result.document) print(table_df.to_markdown()) elif ...: #...⚠️废弃说明对 Docling v1 文档表示conv_result.legacy_document的支持已被完全移除现在必须使用 v2 格式## 使用更新后的 v2 文档表示 conv_result.document导出为 JSON、Markdown、Doctags注意v1 中ConversionResult上的所有render_...方法已在 Docling v2 中移除现统一挂在DoclingDocument上DoclingDocument.export_to_dictDoclingDocument.export_to_markdownDoclingDocument.export_to_document_tokensconv_result: ConversionResult doc_converter.convert(https://arxiv.org/pdf/2408.09869) # 原先为 convert_single ## 导出为所需格式 print(json.dumps(conv_res.document.export_to_dict())) print(conv_res.document.export_to_markdown()) print(conv_res.document.export_to_document_tokens())⚠️废弃说明legacy_document的导出路径已被完全移除。作为历史参考v1 的旧写法如下在当前版本中会失败## ❌ 已移除此 v1 代码块不再可用 print(json.dumps(conv_res.legacy_document.export_to_dict())) print(conv_res.legacy_document.export_to_markdown()) print(conv_res.legacy_document.export_to_document_tokens())从 CLI 侧的实现可以看到当前支持的完整导出面export_documents 中依次处理了 JSON、YAML、HTML含按页拆分、Text、Markdown、Doctags、WebVTT、DocLang、DCLX 与 Chunks 等格式其中 Markdown 导出为空时还会回写ErrorItem并把状态置为FAILURE。这印证了 v2 的设计导出逻辑全部收敛在DoclingDocument之上ConversionResult只负责携带文档与转换元数据。从 JSON 重新加载 DoclingDocument你可以把DoclingDocument以 JSON 格式保存到磁盘并在之后重新加载# 保存到磁盘 doc: DoclingDocument conv_res.document # 由转换结果产出 with Path(./doc.json).open(w) as fp: fp.write(json.dumps(doc.export_to_dict())) # 用 export_to_dict 保证一致性 # 从磁盘加载 with Path(./doc.json).open(r) as fp: doc_dict json.loads(fp.read()) doc DoclingDocument.model_validate(doc_dict) # 用标准 pydantic API 填充文档由于DoclingDocument是 Pydantic 模型export_to_dict与model_validate构成一对可逆操作先导出为 dict 保证序列化口径一致再用标准的 Pydantic API 反序列化。这意味着DoclingDocument的 JSON 文件可以作为文档资产独立流转、入库或作为下游任务如分块、检索、再加工的中间格式而无需重新运行转换管线。Chunking面向检索的分块Docling v2 定义了新的分块基类体系BaseMetachunk 元数据BaseChunk包含 chunk 文本与元数据BaseChunker分块器基类从DoclingDocument产出 chunks。在此之上v2 提供了更新后的HierarchicalChunker实现它利用新的DoclingDocument输出更丰富的 chunk 格式包括用于定位grounding的相应 doc items适用的标题headings作为上下文适用的题注captions作为上下文。分块的完整用法包括HybridChunker、LineBasedTokenChunker以及分块依赖的安装方式请参阅 Chunking 概念文档CLI 中--to chunks选项也内置了hybrid/hierarchical两种分块器见 docling/cli/main.py#L177-L180。相关示例还包括 docs/examples/hybrid_chunking.ipynb 与 docs/examples/trivial_chunking.py。迁移要点小结主题Docling v1Docling v2CLI 格式声明各导出格式独立开关--from/--to参数批处理错误吞掉异常新增--abort-on-errorAPI 侧默认raises_on_errorTruePDF 后端--backend移除现由--pdf-backendAPI 侧为PdfFormatOption.backend表达转换入口convert_single/convertconvert单文件/convert_all多文件文档结果legacy_documentrender_...conv_result.documentDoclingDocumentexport_to_*初始化全局PipelineOptionsallowed_formats白名单 按格式的PdfFormatOption等整体上v2 的迁移路径是清晰的如果你只依赖默认配置代码可以原样保留一旦需要定制把“全局 pipeline 选项”思维切换为“按格式定制”思维format_options并把所有文档访问与导出改走conv_result.document即可完成从 v1 到 v2 的平滑过渡。更多 API 细节可继续参考 docs/reference/docling_document.md 与 docs/reference/cli.md。【免费下载链接】doclingGet your documents ready for gen AI项目地址: https://gitcode.com/GitHub_Trending/do/docling创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表