<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Docling on IT 空間</title><link>https://blog.jiatool.com/tags/Docling/</link><description>Recent content in Docling on IT 空間</description><generator>Hugo -- gohugo.io</generator><language>zh</language><managingEditor>jia@jiatool.com (Jia)</managingEditor><webMaster>jia@jiatool.com (Jia)</webMaster><copyright>&amp;copy;{year}, Jia All Rights Reserved</copyright><lastBuildDate>Sat, 01 Feb 2025 17:00:00 +0800</lastBuildDate><atom:link href="https://blog.jiatool.com/tags/Docling/index.xml" rel="self" type="application/rss+xml"/><item><title>透過 Docling 輕鬆解析常見文件，匯出成 JSON、Markdown、HTML 格式</title><link>https://blog.jiatool.com/posts/docling_intro/</link><pubDate>Sat, 01 Feb 2025 17:00:00 +0800</pubDate><author>jia@jiatool.com (Jia)</author><atom:modified>Tue, 10 Jun 2025 21:55:00 +0800</atom:modified><guid>https://blog.jiatool.com/posts/docling_intro/</guid><description>前言 去年底 (2024/11) IBM 最新開源 Docling 工具 (Python 套件)，可以讀取一些常見的文件格式（PDF、DOCX、PPTX、XLSX、圖片、HTML、Markdown&amp;h</description><content:encoded>&lt;h2 id="前言">前言&lt;/h2>
&lt;p>去年底 (2024/11) IBM 最新開源 Docling 工具 (Python 套件)，可以讀取一些常見的文件格式（PDF、DOCX、PPTX、XLSX、圖片、HTML、Markdown&amp;hellip;）並匯出成 JSON、Markdown、HTML，以及對 PDF 裡的頁面佈局、表格、公式、程式碼&amp;hellip;等等有較好的理解，而且也支援 OCR 辨識。&lt;/p>
&lt;p>我還沒有做太多測試、比較，只是做個簡單的紀錄。&lt;/p>
&lt;br/>
&lt;!--adsense-->
&lt;br/>
&lt;h2 id="安裝套件">安裝套件&lt;/h2>
&lt;p>安裝很簡單，透過 pip 安裝：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre class="chroma">&lt;code class="language-Shell" data-lang="Shell">pip install docling
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>* 本文使用 Docling 版本為：v2.17.0&lt;/p>
&lt;br/>
&lt;h2 id="使用教學--範例程式碼">使用教學 &amp;amp; 範例程式碼&lt;/h2>
&lt;p>簡單三步驟：設定來源、轉換文件、輸出結果&lt;/p>
&lt;br/>
&lt;h3 id="設定文件來源">設定文件來源&lt;/h3>
&lt;p>Docling 支援多種格式：PDF、DOCX、PPTX、XLSX、Image、HTML、Markdown、AsciiDoc&lt;br />
參考：&lt;a href="https://docling-project.github.io/docling/usage/supported_formats/">https://docling-project.github.io/docling/usage/supported_formats/&lt;/a>&lt;/p>
&lt;p>輸入可以是網址或本地檔案路徑：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="n">source&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;https://arxiv.org/pdf/2412.16720&amp;#34;&lt;/span> &lt;span class="c1"># PDF path or URL&lt;/span>
&lt;span class="n">source&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;./docs/測試用.pdf&amp;#34;&lt;/span>
&lt;span class="n">source&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;./docs/測試用2.docx&amp;#34;&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;br/>
&lt;h3 id="轉換文件">轉換文件&lt;/h3>
&lt;p>將文件轉換成它定義的 DolingDocument 格式，就會包含文件的像是檔名、文字、表格、圖片&amp;hellip;等等資訊。&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="c1"># 簡單快速使用&lt;/span>
&lt;span class="n">converter&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">DocumentConverter&lt;/span>&lt;span class="p">()&lt;/span>
&lt;span class="c1"># 也可以限制轉換格式&lt;/span>
&lt;span class="c1"># converter = DocumentConverter(&lt;/span>
&lt;span class="c1"># allowed_formats=[InputFormat.PDF, InputFormat.IMAGE, InputFormat.DOCX, InputFormat.PPTX, InputFormat.MD, InputFormat.HTML, InputFormat.ASCIIDOC],&lt;/span>
&lt;span class="c1"># format_options={&lt;/span>
&lt;span class="c1"># InputFormat.PDF: PdfFormatOption(&lt;/span>
&lt;span class="c1"># pipeline_cls=StandardPdfPipeline, backend=PyPdfiumDocumentBackend&lt;/span>
&lt;span class="c1"># ),&lt;/span>
&lt;span class="c1"># InputFormat.DOCX: WordFormatOption(&lt;/span>
&lt;span class="c1"># pipeline_cls=SimplePipeline # , backend=MsWordDocumentBackend&lt;/span>
&lt;span class="c1"># ),&lt;/span>
&lt;span class="c1"># },&lt;/span>
&lt;span class="c1"># )&lt;/span>
&lt;span class="c1"># 預測模型會在首次使用時自動下載，也可以指定事先下載好的資料夾路徑&lt;/span>
&lt;span class="c1"># 在離線環境方便使用&lt;/span>
&lt;span class="c1"># 模型可能是這邊下載：https://huggingface.co/ds4sd/docling-models&lt;/span>
&lt;span class="c1"># 我也不太確定&lt;/span>
&lt;span class="c1"># pipeline_options = PdfPipelineOptions(artifacts_path=&amp;#34;your location&amp;#34;)&lt;/span>
&lt;span class="c1"># converter = DocumentConverter(&lt;/span>
&lt;span class="c1"># format_options={&lt;/span>
&lt;span class="c1"># InputFormat.PDF: PdfFormatOption(pipeline_options=pipeline_options)&lt;/span>
&lt;span class="c1"># }&lt;/span>
&lt;span class="c1"># )&lt;/span>
&lt;span class="c1"># pipeline&lt;/span>
&lt;span class="c1"># https://docling-project.github.io/docling/usage/#adjust-pipeline-features&lt;/span>
&lt;span class="c1"># 開始轉換文件&lt;/span>
&lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">converter&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">convert&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">source&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="c1"># 也可以限制文件頁數和大小&lt;/span>
&lt;span class="c1"># result = converter.convert(source, max_num_pages=10, max_file_size=20971520)&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;br/>
&lt;h3 id="輸出結果">輸出結果&lt;/h3>
&lt;p>將轉換後的文件輸出成不同的格式，像是純文字、HTML、Markdown 和 JSON：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="k">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">result&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">document&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">export_to_text&lt;/span>&lt;span class="p">())&lt;/span>
&lt;span class="k">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">result&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">document&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">export_to_dict&lt;/span>&lt;span class="p">())&lt;/span> &lt;span class="c1"># json&lt;/span>
&lt;span class="k">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">result&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">document&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">export_to_html&lt;/span>&lt;span class="p">())&lt;/span>
&lt;span class="k">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">result&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">document&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">export_to_markdown&lt;/span>&lt;span class="p">())&lt;/span>
&lt;span class="k">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">result&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">document&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">export_to_document_tokens&lt;/span>&lt;span class="p">())&lt;/span>
&lt;span class="c1"># print(result.document.print_element_tree())&lt;/span>
&lt;span class="c1"># print(result.document._export_to_indented_text(max_text_len=16))&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;br/>
&lt;p>也可以直接儲存成檔案：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="kn">from&lt;/span> &lt;span class="nn">pathlib&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">Path&lt;/span>
&lt;span class="n">result&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">document&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">save_as_markdown&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">filename&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">Path&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;./docs/test.md&amp;#34;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;span class="n">result&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">document&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">save_as_html&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">filename&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">Path&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;./docs/test.html&amp;#34;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;span class="n">result&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">document&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">save_as_json&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">filename&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">Path&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;./docs/test.json&amp;#34;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;span class="n">result&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">document&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">save_as_document_tokens&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">filename&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">Path&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;./docs/test.tokens&amp;#34;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;span class="n">result&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">document&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">save_as_yaml&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">filename&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">Path&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;./docs/test.yaml&amp;#34;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;br/>
&lt;h3 id="完整範例程式碼">完整範例程式碼&lt;/h3>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;span class="lnt">41
&lt;/span>&lt;span class="lnt">42
&lt;/span>&lt;span class="lnt">43
&lt;/span>&lt;span class="lnt">44
&lt;/span>&lt;span class="lnt">45
&lt;/span>&lt;span class="lnt">46
&lt;/span>&lt;span class="lnt">47
&lt;/span>&lt;span class="lnt">48
&lt;/span>&lt;span class="lnt">49
&lt;/span>&lt;span class="lnt">50
&lt;/span>&lt;span class="lnt">51
&lt;/span>&lt;span class="lnt">52
&lt;/span>&lt;span class="lnt">53
&lt;/span>&lt;span class="lnt">54
&lt;/span>&lt;span class="lnt">55
&lt;/span>&lt;span class="lnt">56
&lt;/span>&lt;span class="lnt">57
&lt;/span>&lt;span class="lnt">58
&lt;/span>&lt;span class="lnt">59
&lt;/span>&lt;span class="lnt">60
&lt;/span>&lt;span class="lnt">61
&lt;/span>&lt;span class="lnt">62
&lt;/span>&lt;span class="lnt">63
&lt;/span>&lt;span class="lnt">64
&lt;/span>&lt;span class="lnt">65
&lt;/span>&lt;span class="lnt">66
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="kn">import&lt;/span> &lt;span class="nn">json&lt;/span>
&lt;span class="kn">from&lt;/span> &lt;span class="nn">pathlib&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">Path&lt;/span>
&lt;span class="kn">from&lt;/span> &lt;span class="nn">docling_core.types&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">DoclingDocument&lt;/span>
&lt;span class="kn">from&lt;/span> &lt;span class="nn">docling.datamodel.base_models&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">InputFormat&lt;/span>
&lt;span class="kn">from&lt;/span> &lt;span class="nn">docling.document_converter&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="p">(&lt;/span>
&lt;span class="n">DocumentConverter&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="n">PdfFormatOption&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="n">WordFormatOption&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="p">)&lt;/span>
&lt;span class="kn">from&lt;/span> &lt;span class="nn">docling.datamodel.pipeline_options&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">PdfPipelineOptions&lt;/span>
&lt;span class="kn">from&lt;/span> &lt;span class="nn">docling.pipeline.simple_pipeline&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">SimplePipeline&lt;/span>
&lt;span class="kn">from&lt;/span> &lt;span class="nn">docling.pipeline.standard_pdf_pipeline&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">StandardPdfPipeline&lt;/span>
&lt;span class="kn">from&lt;/span> &lt;span class="nn">docling.backend.pypdfium2_backend&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">PyPdfiumDocumentBackend&lt;/span>
&lt;span class="c1"># source = &amp;#34;https://arxiv.org/pdf/2408.09869&amp;#34; # PDF path or URL&lt;/span>
&lt;span class="c1"># source = &amp;#34;./docs/OpenAIo1SystemCard.pdf.pdf&amp;#34;&lt;/span>
&lt;span class="n">source&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;./docs/測試文件.docx&amp;#34;&lt;/span>
&lt;span class="n">converter&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">DocumentConverter&lt;/span>&lt;span class="p">()&lt;/span>
&lt;span class="c1"># # 可以限制轉換格式&lt;/span>
&lt;span class="c1"># converter = DocumentConverter(&lt;/span>
&lt;span class="c1"># allowed_formats=[InputFormat.PDF, InputFormat.IMAGE, InputFormat.DOCX, InputFormat.PPTX, InputFormat.MD, InputFormat.HTML, InputFormat.ASCIIDOC],&lt;/span>
&lt;span class="c1"># format_options={&lt;/span>
&lt;span class="c1"># InputFormat.PDF: PdfFormatOption(&lt;/span>
&lt;span class="c1"># pipeline_cls=StandardPdfPipeline, backend=PyPdfiumDocumentBackend&lt;/span>
&lt;span class="c1"># ),&lt;/span>
&lt;span class="c1"># InputFormat.DOCX: WordFormatOption(&lt;/span>
&lt;span class="c1"># pipeline_cls=SimplePipeline # , backend=MsWordDocumentBackend&lt;/span>
&lt;span class="c1"># ),&lt;/span>
&lt;span class="c1"># },&lt;/span>
&lt;span class="c1"># )&lt;/span>
&lt;span class="c1"># 開始轉換文件&lt;/span>
&lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">converter&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">convert&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">source&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="c1"># 也可以限制文件頁數和大小&lt;/span>
&lt;span class="c1"># result = converter.convert(source, max_num_pages=10, max_file_size=20971520)&lt;/span>
&lt;span class="c1"># 輸出結果&lt;/span>
&lt;span class="c1"># print(result.document.export_to_text())&lt;/span>
&lt;span class="k">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">result&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">document&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">export_to_dict&lt;/span>&lt;span class="p">())&lt;/span>
&lt;span class="c1"># print(result.document.export_to_html())&lt;/span>
&lt;span class="c1"># print(result.document.export_to_markdown())&lt;/span>
&lt;span class="c1"># print(result.document.export_to_document_tokens())&lt;/span>
&lt;span class="c1"># print(result.document.print_element_tree())&lt;/span>
&lt;span class="c1"># print(result.document._export_to_indented_text(max_text_len=16))&lt;/span>
&lt;span class="c1"># 直接儲存成檔案&lt;/span>
&lt;span class="c1"># result.document.save_as_markdown(filename=Path(&amp;#34;./docs/test.md&amp;#34;))&lt;/span>
&lt;span class="c1"># result.document.save_as_html(filename=Path(&amp;#34;./docs/test.html&amp;#34;))&lt;/span>
&lt;span class="c1"># result.document.save_as_json(filename=Path(&amp;#34;./docs/test.json&amp;#34;))&lt;/span>
&lt;span class="c1"># result.document.save_as_document_tokens(filename=Path(&amp;#34;./docs/test.tokens&amp;#34;))&lt;/span>
&lt;span class="c1"># result.document.save_as_yaml(filename=Path(&amp;#34;./docs/test.yaml&amp;#34;))&lt;/span>
&lt;span class="c1"># 另一種方法，儲存與讀取&lt;/span>
&lt;span class="c1"># # Save to disk&lt;/span>
&lt;span class="c1"># with open(&amp;#39;./docs/test.json&amp;#39;, &amp;#39;w&amp;#39;, encoding=&amp;#39;utf-8&amp;#39;) as fp:&lt;/span>
&lt;span class="c1"># json.dump(doc.export_to_dict(), fp, ensure_ascii=False) # use `export_to_dict` to ensure consistency&lt;/span>
&lt;span class="c1"># # Load from disk&lt;/span>
&lt;span class="c1"># with open(&amp;#39;./docs/test.json&amp;#39;, &amp;#39;r&amp;#39;, encoding=&amp;#39;utf-8&amp;#39;) as f:&lt;/span>
&lt;span class="c1"># doc_dict = json.load(f)&lt;/span>
&lt;span class="c1"># doc = DoclingDocument.model_validate(doc_dict) # use standard pydantic API to populate doc&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;br/>
&lt;h3 id="切割-chunk">切割 chunk&lt;/h3>
&lt;p>另外 Docling 也內建切 chunk 的函式，在做 RAG 時會使用到：&lt;a href="https://docling-project.github.io/docling/examples/hybrid_chunking/">https://docling-project.github.io/docling/examples/hybrid_chunking/&lt;/a>&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="c1"># 切 chunk&lt;/span>
&lt;span class="kn">from&lt;/span> &lt;span class="nn">docling.document_converter&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">DocumentConverter&lt;/span>
&lt;span class="kn">from&lt;/span> &lt;span class="nn">docling_core.transforms.chunker&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">HierarchicalChunker&lt;/span> &lt;span class="c1"># 分層分塊器&lt;/span>
&lt;span class="n">conv_res&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">DocumentConverter&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">convert&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;https://arxiv.org/pdf/2206.01062&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="n">doc&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">conv_res&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">document&lt;/span>
&lt;span class="n">chunks&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">list&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">HierarchicalChunker&lt;/span>&lt;span class="p">()&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">chunk&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">doc&lt;/span>&lt;span class="p">))&lt;/span>
&lt;span class="k">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">chunks&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">30&lt;/span>&lt;span class="p">])&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;br/>
&lt;h3 id="其他">其他&lt;/h3>
&lt;p>官方文件內有示範多種範例，可以探索還有哪些使用方法：&lt;a href="https://docling-project.github.io/docling/examples/">https://docling-project.github.io/docling/examples/&lt;/a>&lt;/p>
&lt;br/>
&lt;!--adsense-->
&lt;br/>
&lt;h2 id="結語">結語&lt;/h2>
&lt;p>除了 Docling，其他類似功能的套件還有像是 &lt;a href="https://github.com/Unstructured-IO/unstructured" target="_blank" rel="noopener">
unstructured
&lt;/a>、&lt;a href="https://github.com/microsoft/markitdown" target="_blank" rel="noopener">
MarkItDown
&lt;/a>、&lt;br />
&lt;a href="https://pymupdf.readthedocs.io/en/latest/pymupdf4llm/" target="_blank" rel="noopener">
PyMuPDF4LLM
&lt;/a>、&lt;a href="https://github.com/opendatalab/MinerU" target="_blank" rel="noopener">
MinerU
&lt;/a>&amp;hellip;，我有空應該也會找時間來試試看。&lt;/p>
&lt;br/>
&lt;br/>
&lt;hr />
&lt;p>參考：&lt;br />
&lt;a href="https://docling-project.github.io/docling/" target="_blank" rel="noopener">
Docling 官方文件
&lt;/a>&lt;br />
&lt;a href="https://github.com/DS4SD/docling" target="_blank" rel="noopener">
Docling GitHub
&lt;/a>&lt;br />
&lt;a href="https://huggingface.co/ds4sd/docling-models" target="_blank" rel="noopener">
ds4sd/docling-models | Hugging Face
&lt;/a>&lt;/p>
&lt;br/>
&lt;blockquote>
&lt;p>Embrace the unknown and embrace change. That&amp;rsquo;s where true breakthroughs happen.&lt;br />
擁抱未知，擁抱變化。那才是真正的突破所在！&lt;/p>
&lt;p align="right">—— 黃仁勳 (NVIDIA 共同創辦人暨執行長)&lt;/p>
&lt;/blockquote></content:encoded><dc:creator>Jia</dc:creator><media:content url="https://blog.jiatool.comimages/cover/docling_intro.jpg" medium="image"><media:title type="html">featured image</media:title></media:content><media:content url="https://blog.jiatool.comimages/posts/docling_intro_meta.jpg" medium="image"><media:title type="html">meta image</media:title></media:content><category>Docling</category><category>套件</category><category>分享</category><category>Python套件</category></item></channel></rss>