需 OCR 即可將 Word、Excel 與 PowerPoint 一鍵轉(zhuǎn)換為 Markdown)
PaddleOCR doc2md無(wú)需 OCR 即可將 Word、Excel 與 PowerPoint 一鍵轉(zhuǎn)換為 Markdown【免費(fèi)下載鏈接】PaddleOCRTurn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between images/PDFs and LLMs. Supports 100 languages.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/pa/PaddleOCRdoc2md 是 PaddleOCR 內(nèi)置的輕量級(jí) Office 文檔結(jié)構(gòu)化轉(zhuǎn)換功能它繞開(kāi) OCR 推理鏈路直接解析 OOXML 文檔結(jié)構(gòu)并輸出規(guī)范的 Markdown 文本。本文以官方教程 docs/version3.x/doc2md.en.md 為核心骨架結(jié)合倉(cāng)庫(kù)源碼深入講解其架構(gòu)、命令行與 Python API 用法、各格式支持細(xì)節(jié)及常見(jiàn)問(wèn)題排查幫助你在知識(shí)庫(kù)構(gòu)建、文檔檢索與內(nèi)容提取場(chǎng)景中直接落地使用。1. 功能定位不跑模型的結(jié)構(gòu)化轉(zhuǎn)換器doc2md 的核心設(shè)計(jì)理念是無(wú)需 OCR 推理。與 OCR 對(duì)圖片/掃描件做像素級(jí)文字識(shí)別不同doc2md 直接讀取 Office 文件的 XML 內(nèi)部結(jié)構(gòu).docx/.xlsx/.pptx本質(zhì)上是 ZIP 打包的 OOXML 文檔將段落、表格、圖片、公式等結(jié)構(gòu)化元素映射為 Markdown 語(yǔ)法。因此它速度極快、零 GPU 依賴(lài)適合擁有原始 Office 文件的場(chǎng)景。從源碼看整個(gè)功能收斂在 paddleocr/_doc2md 包內(nèi)對(duì)外暴露兩個(gè)核心入口見(jiàn) paddleocr/init.pydoc2md_convert(source, **kwargs)轉(zhuǎn)換文檔并返回結(jié)果對(duì)象doc2md_supported_formats()列出當(dāng)前支持的擴(kuò)展名。支持格式.docxWord、.xlsxExcel、.pptxPowerPoint。三種格式的核心能力對(duì)比如下功能Word (.docx)Excel (.xlsx)PowerPoint (.pptx)標(biāo)題層級(jí)? 內(nèi)置樣式 字號(hào)啟發(fā)式 中文編號(hào)——文本格式化粗體/斜體/下劃線/刪除線???上標(biāo) / 下標(biāo)???超鏈接???列表有序 / 無(wú)序 / 嵌套?——表格含合并單元格? HTML table? HTML table? HTML table圖片? 按比例寬度? 浮動(dòng)圖片? 按比例寬度數(shù)學(xué)公式OMML → LaTeX? 行內(nèi) / 顯示公式? drawing 層公式?代碼塊? 等寬字體自動(dòng)識(shí)別——文本框?——圖表Chart? → HTML table—? 14 種圖表類(lèi)型頁(yè)眉 / 頁(yè)腳? 多節(jié) 奇偶頁(yè)——多 sheet / 多幻燈片—??---分隔演講者備注——?2. 安裝與依賴(lài)使用 doc2md 前請(qǐng)先按照安裝教程完成 PaddleOCR 基礎(chǔ)安裝然后安裝 doc2md 可選依賴(lài)pip install paddleocr[doc2md]該 extra 依賴(lài)在 pyproject.toml 中定義四類(lèi)解析庫(kù)缺一不可包名版本約束用途python-docx0.8.11Word (.docx) 文檔解析python-pptx0.6.21PowerPoint (.pptx) 文檔解析openpyxl3.0.0Excel (.xlsx) 文檔解析pylatexenc2.10,3數(shù)學(xué)公式 Unicode → LaTeX 符號(hào)映射值得注意的實(shí)現(xiàn)細(xì)節(jié)是doc2md 采用延遲導(dǎo)入lazy import策略三個(gè)轉(zhuǎn)換器模塊docx.py、xlsx.py、pptx.py在真正轉(zhuǎn)換時(shí)才引入對(duì)應(yīng)解析庫(kù)。若缺失依賴(lài)會(huì)拋出如RuntimeError: DOCX conversion requires python-docx: pip install paddleocr[doc2md]之類(lèi)的明確錯(cuò)誤參見(jiàn) docx.py 與 xlsx.py這也是 FAQ 中轉(zhuǎn)換時(shí)報(bào) python-docx is required的根因。3. 命令行快速上手doc2md 以paddleocr doc2md子命令形式集成在 CLI 中注冊(cè)邏輯見(jiàn) paddleocr/_cli.py。基礎(chǔ)用法# 轉(zhuǎn)換 Word 文檔輸出到文件 paddleocr doc2md -i report.docx -o output.md # 轉(zhuǎn)換 Excel 表格輸出到文件 paddleocr doc2md -i data.xlsx -o output.md # 轉(zhuǎn)換 PowerPoint 演示文稿輸出到文件 paddleocr doc2md -i slides.pptx -o output.md # 不指定輸出路徑結(jié)果打印到終端stdout paddleocr doc2md -i report.docx # 查看支持的格式列表后退出 paddleocr doc2md --formats完整命令行參數(shù)如下參數(shù)說(shuō)明類(lèi)型默認(rèn)值-i,--input輸入文件路徑必填使用--formats時(shí)可省略支持.docx、.xlsx、.pptxstr必填-o,--output輸出 Markdown 文件路徑不設(shè)置則打印到 stdout設(shè)置后圖片自動(dòng)保存到同目錄images/子目錄strNone-q,--quiet靜默模式不打印耗時(shí)、保存路徑等提示flagFalse--formats打印支持的文件格式列表并退出此時(shí)無(wú)需--inputflagFalse--no-drawings跳過(guò)文本框docx與 drawing 層數(shù)學(xué)公式xlsx的提取僅適用于 docx / xlsxflagFalse--no-headers-footers跳過(guò)頁(yè)眉頁(yè)腳提取僅適用于 docxflagFalse--sheet-name僅轉(zhuǎn)換指定名稱(chēng)的 sheet不設(shè)置則轉(zhuǎn)換全部?jī)H適用于 xlsxstrNone--max-rows每個(gè) sheet 的最大轉(zhuǎn)換行數(shù)用于限制大表格輸出僅適用于 xlsxintNone這些 flag 在 CLI 內(nèi)部被一一映射為 Python API 的 kwargs見(jiàn) paddleocr/_cli.py--no-drawings對(duì)應(yīng)extract_drawingsFalse--no-headers-footers對(duì)應(yīng)extract_headers_footersFalse--sheet-name與--max-rows直接透?jìng)鳌^D(zhuǎn)換完成且未開(kāi)啟--quiet時(shí)CLI 會(huì)打印耗時(shí)毫秒與輸出/圖片保存路徑。4. Python API 詳解Python API 的頂層入口是paddleocr._doc2md.convert其底層實(shí)現(xiàn)見(jiàn) paddleocr/_doc2md/core.py先校驗(yàn)文件存在性再通過(guò)注冊(cè)表按擴(kuò)展名/MIME 類(lèi)型選出轉(zhuǎn)換器實(shí)例執(zhí)行convert_file后若指定output則自動(dòng)寫(xiě)入 Markdown 文件并落盤(pán)images/圖片。基礎(chǔ)用法from paddleocr._doc2md import convert # 轉(zhuǎn)換文檔返回結(jié)果對(duì)象 result convert(report.docx) # 訪問(wèn) Markdown 文本 print(result.markdown) # 查看提取的圖片字典key 為相對(duì)路徑value 為圖片字節(jié) print(list(result.images.keys())) # 查看文檔標(biāo)題 print(result.title) # 查看元信息格式、sheet 數(shù)量等 print(result.metadata)ConvertResult字段說(shuō)明數(shù)據(jù)結(jié)構(gòu)定義見(jiàn) paddleocr/_doc2md/base.py字段類(lèi)型說(shuō)明markdownstr轉(zhuǎn)換后的 Markdown 文本imagesdict[str, bytes]提取的圖片字典key 為相對(duì)路徑如images/image1.pngvalue 為圖片原始字節(jié)titleOptional[str]文檔標(biāo)題可能為Nonemetadatadict文檔元信息如格式類(lèi)型、sheet 數(shù)量等指定輸出路徑自動(dòng)保存 Markdown 與圖片from paddleocr._doc2md import convert # 指定 output 后Markdown 寫(xiě)入文件圖片保存到同目錄 images/ 下 result convert(report.docx, outputoutput/report.md)圖片落盤(pán)邏輯由convert統(tǒng)一處理result.images中的每個(gè)相對(duì)路徑都被拼接到輸出文件所在目錄逐一以二進(jìn)制寫(xiě)入見(jiàn) core.py因此 Markdown 中的圖片引用天然是相對(duì)路徑。各格式可用的 kwargs 參數(shù)參數(shù)類(lèi)型默認(rèn)值適用格式說(shuō)明extract_drawingsboolTruedocx, xlsx是否提取文本框docx/ drawing 層數(shù)學(xué)公式xlsxextract_headers_footersboolTruedocx是否提取頁(yè)眉頁(yè)腳sheet_nameOptional[str]Nonexlsx僅轉(zhuǎn)換指定名稱(chēng)的 sheetNone表示全部max_rowsOptional[int]Nonexlsx每個(gè) sheet 的最大轉(zhuǎn)換行數(shù)按格式傳入 kwargs 示例from paddleocr._doc2md import convert # Word不提取文本框和頁(yè)眉頁(yè)腳 result convert(report.docx, extract_drawingsFalse, extract_headers_footersFalse) # Excel僅轉(zhuǎn)換名為 Sheet1 的 sheet最多 100 行 result convert(data.xlsx, sheet_nameSheet1, max_rows100)5. 各格式支持特性深度解析5.1 Word (.docx)標(biāo)題識(shí)別采用三種互補(bǔ)策略?xún)?nèi)置 Heading 樣式Word 內(nèi)置 Heading 1–6 樣式直接映射為#–######字號(hào)啟發(fā)式字號(hào)大于正文 1.5 倍且段落較短時(shí)自動(dòng)提升為標(biāo)題中文編號(hào)一、格式識(shí)別為 H2一格式識(shí)別為 H3。對(duì)應(yīng)正則見(jiàn) docx.py_RE_H2 re.compile(r^[一二三四五六七八九十百千][、.])、_RE_H3 re.compile(r^[一二三四五六七八九十百千])。文本格式化粗體**、斜體*、下劃線u、刪除線~~、上標(biāo)sup、下標(biāo)sub。樣式解析時(shí)遵循run 級(jí) 字符樣式 段落樣式的優(yōu)先級(jí)鏈見(jiàn) docx.py 中的_effective_bold/_effective_italic/_effective_underline輔助函數(shù)確保繼承樣式不被漏掉。列表有序、無(wú)序、嵌套列表縮進(jìn)層級(jí)自動(dòng)識(shí)別。表格輸出為 HTMLtable格式合并單元格用rowspan/colspan還原。圖片按文檔內(nèi)容區(qū)寬度計(jì)算百分比輸出img width75%形式。數(shù)學(xué)公式OMML 格式公式轉(zhuǎn)為 LaTeX行內(nèi)公式用$...$顯示公式用$$...$$。代碼塊自動(dòng)檢測(cè)等寬字體Courier New、Consolas 等 9 種輸出為 fenced code block。其他文本框內(nèi)容wps:txbx對(duì)應(yīng) Word 2010 wordprocessingShape 命名空間見(jiàn) docx.py、圖表Chart → HTML table、超鏈接支持普通鏈接與HYPERLINK域代碼兩種格式域代碼正則_RE_FIELD_HYPERLINK見(jiàn) docx.py、頁(yè)眉頁(yè)腳多節(jié) 奇偶頁(yè)。頁(yè)眉頁(yè)腳中僅含頁(yè)碼的文本如- 3 -、Page of會(huì)被_RE_PAGE_ONLY正則過(guò)濾避免污染正文見(jiàn) docx.py。5.2 Excel (.xlsx)多 sheet每個(gè) sheet 輸出一個(gè)以## sheet名稱(chēng)開(kāi)頭的章節(jié)。數(shù)據(jù)邊界裁剪通過(guò)_find_data_bounds自動(dòng)定位非空單元格區(qū)域去除尾部空行/空列只輸出有效數(shù)據(jù)范圍實(shí)現(xiàn)見(jiàn) xlsx.py 起。合并單元格使用rowspan/colspan還原合并結(jié)構(gòu)。字體格式化粗體、斜體、下劃線、刪除線、上標(biāo)、下標(biāo)。超鏈接支持單元格級(jí)超鏈接。浮動(dòng)圖片同時(shí)支持OneCellAnchor與TwoCellAnchor兩種錨定方式——OneCellAnchor可從ext.cx直接讀取圖片顯示寬度EMU 單位TwoCellAnchor則回退為默認(rèn)處理見(jiàn) xlsx.py。列寬換算按1 字符 ≈ 7px、1px 9525 EMU計(jì)算見(jiàn) xlsx.py。數(shù)學(xué)公式解析 sheet 關(guān)聯(lián)的 drawing 層 XML在mc:AlternateContent/mc:Choice下遍歷a:p段落提取 OMML 公式并轉(zhuǎn)為 LaTeX見(jiàn) xlsx.py。5.3 PowerPoint (.pptx)多幻燈片每張幻燈片內(nèi)容以---分隔。文本格式化粗體、斜體、下劃線、刪除線、上標(biāo)、下標(biāo)刪除線通過(guò) DrawingML 命名空間下的a:strike元素檢測(cè)見(jiàn) pptx.py。圖片按幻燈片寬度計(jì)算百分比輸出帶寬度的img標(biāo)簽。表格HTMLtable格式支持合并單元格與帶背景圖片的表格。圖表支持 14 種圖表類(lèi)型面積圖、折線圖、餅圖、氣泡圖、柱狀圖、條形圖、圓環(huán)圖、雷達(dá)圖、散點(diǎn)圖等類(lèi)型枚舉映射見(jiàn) pptx.py 的_CHART_TYPE_NAMES全部轉(zhuǎn)換為 HTML table 輸出。分組形狀GroupShape遞歸處理嵌套的形狀組合。數(shù)學(xué)公式從mc:AlternateContent中提取 OMML 公式并轉(zhuǎn)為 LaTeX。演講者備注附加在每張幻燈片內(nèi)容末尾。6. 架構(gòu)原理注冊(cè)表驅(qū)動(dòng)的轉(zhuǎn)換器doc2md 的內(nèi)部架構(gòu)遵循注冊(cè)表 策略模式代碼結(jié)構(gòu)清晰、易于擴(kuò)展base.py定義ConvertResult數(shù)據(jù)類(lèi)與BaseConverter抽象基類(lèi)后者聲明supported_extensions/supported_mimetypes類(lèi)屬性與抽象的convert_file方法registry.pyConverterRegistry維護(hù)擴(kuò)展名 → 轉(zhuǎn)換器類(lèi)和MIME 類(lèi)型 → 轉(zhuǎn)換器類(lèi)兩張映射表。register支持作為裝飾器使用get_converter先按擴(kuò)展名匹配、再按 MIME 兜底均未命中時(shí)拋出帶支持列表的ValueError——這正是 FAQ 中格式不支持報(bào) ValueError的來(lái)源見(jiàn) registry.pyconverters/docx、xlsx、pptx 三個(gè)轉(zhuǎn)換器分別實(shí)現(xiàn)對(duì)應(yīng)格式的 XML 解析與 Markdown 渲染math/OMML 公式解析與 Unicode → LaTeX 符號(hào)映射依賴(lài)pylatexenc供三種格式復(fù)用。convert()入口通過(guò)from . import converters觸發(fā)全部?jī)?nèi)置轉(zhuǎn)換器的注冊(cè)見(jiàn) core.py隨后交由default_registry.get_converter(file_path)分發(fā)見(jiàn) core.py。用戶(hù)如需新增自定義格式可自行繼承BaseConverter并注冊(cè)到注冊(cè)表無(wú)需改動(dòng)核心流程。7. FAQ常見(jiàn)問(wèn)題與排查Q轉(zhuǎn)換時(shí)提示RuntimeError: python-docx is requireddoc2md 采用延遲導(dǎo)入缺少對(duì)應(yīng)格式解析庫(kù)時(shí)會(huì)拋出此錯(cuò)誤。按需安裝依賴(lài)pip install python-docx # Word (.docx) pip install python-pptx # PowerPoint (.pptx) pip install openpyxl # Excel (.xlsx) pip install pylatexenc # 數(shù)學(xué)公式支持或一次安裝全部pip install paddleocr[doc2md]。Q格式不支持提示ValueError運(yùn)行paddleocr doc2md --formats查看當(dāng)前支持的擴(kuò)展名。doc2md 僅支持.docx、.xlsx、.pptx不支持.doc舊版 Word、.csv、.pdf等格式。QExcel 轉(zhuǎn)換后表格行數(shù)很多輸出太長(zhǎng)使用--max-rows限制每個(gè) sheet 的行數(shù)paddleocr doc2md -i data.xlsx -o output.md --max-rows 100Q只想轉(zhuǎn)換 Excel 中的某一個(gè) sheet使用--sheet-name指定 sheet 名稱(chēng)paddleocr doc2md -i data.xlsx -o output.md --sheet-name Sheet1QWord 文檔中的頁(yè)眉頁(yè)腳不需要如何跳過(guò)使用--no-headers-footers參數(shù)paddleocr doc2md -i report.docx -o output.md --no-headers-footersQ圖片輸出到哪里使用-o指定輸出文件時(shí)圖片自動(dòng)保存在輸出文件同目錄的images/文件夾下Markdown 中的圖片引用路徑同步更新為相對(duì)路徑。Qdoc2md 與 PaddleOCR 的 OCR 功能有什么區(qū)別doc2md 直接解析 Office 文檔的 XML 結(jié)構(gòu)不使用任何 OCR 模型速度快、零 GPU 依賴(lài)適用于擁有原始 Office 文件的場(chǎng)景PaddleOCR 的 OCR 功能則針對(duì)圖片或掃描件進(jìn)行文字識(shí)別適用于沒(méi)有原始文檔的場(chǎng)景。兩者互為補(bǔ)充前者負(fù)責(zé)結(jié)構(gòu)化文檔 → 文本后者負(fù)責(zé)圖像 → 文本。【免費(fèi)下載鏈接】PaddleOCRTurn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between images/PDFs and LLMs. Supports 100 languages.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/pa/PaddleOCR創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考