Skip to content

格式转换

文档摄入的第一步是将各类办公文档转换为 Markdown 格式,为后续分片做准备。

支持的格式

格式转换引擎说明
PDFMinerU专业 PDF 解析,保留排版结构
DOCXMarkItDownMicrosoft Word 文档
DOCLibreOffice → MarkItDown旧版 Word,两步转换
XLSXMarkItDownExcel 表格
XLSLibreOffice → MarkItDown旧版 Excel
PPTXMarkItDownPowerPoint 演示文稿
HTMLMarkItDown网页文档
TXT内置处理纯文本包装为 Markdown
MD无需转换直接使用

转换引擎对比

MarkItDown

优势:

  • 轻量快速,启动快
  • Office 格式支持好 (DOCX, XLSX, PPTX)
  • 适合格式简单的文档

劣势:

  • 不支持 PDF
  • 对复杂排版解析能力有限

适用场景: Word、Excel、PPT、HTML 等常规文档

LibreOffice

优势:

  • 格式兼容性强
  • 支持旧版 Office 格式 (DOC, XLS)
  • 开源免费

劣势:

  • 需独立部署,占用资源较多
  • 转换速度较慢

适用场景: 旧版 Office 文档的两步转换 (DOC→DOCX→MD)

MinerU

优势:

  • PDF 解析精度高
  • 保留表格、图片、公式结构
  • 专为 PDF 设计

劣势:

  • 需独立部署,依赖较多
  • 仅支持 PDF 格式

适用场景: PDF 文档,尤其是包含表格、公式的技术文档


转换路由策略

系统根据文件类型自动选择转换引擎:

java
// 伪代码 - 转换路由逻辑
if ("pdf".equals(fileType)) {
    // PDF 转 MD - 使用 MinerU
    convertPdfToMd();
} else if ("doc".equals(fileType)) {
    // DOC 需要两步转换: DOC -> DOCX -> MD
    convertDocToMd();
} else if (List.of("docx", "xlsx", "pptx", "xls").contains(fileType)) {
    // Office 格式直接转 MD
    convertOfficeToMd();
} else if (List.of("html", "htm").contains(fileType)) {
    // HTML 转 MD
    convertHtmlToMd();
} else if ("txt".equals(fileType)) {
    // TXT 包装为 Markdown 代码块
    wrapTxtToMd();
} else if ("md".equals(fileType)) {
    // MD 无需转换,直接使用
    skipConversion();
}

DOC 两步转换

旧版 DOC 格式需要先转换为 DOCX,再转换为 MD:

DOC 文件 → LibreOffice → DOCX 文件 → MarkItDown → Markdown 文件

转换服务部署

各转换服务独立部署,通过 HTTP API 调用:

配置示例

yaml
molandev:
  rag:
    converter:
      # MarkItDown 转换服务
      mark-it-down-url: http://localhost:10996
      # LibreOffice 转换服务
      libre-office-url: http://localhost:10997
      # MinerU 转换服务
      mineru-url: http://localhost:10998
      # 连接超时 (秒)
      connect-timeout: 30
      # 读取超时 (秒)
      read-timeout: 60

部署建议

转换服务资源需求是否必需说明
MarkItDown✅ 必需处理大部分 Office 格式
LibreOffice⚠️ 可选仅处理旧版 DOC/XLS
MinerU⚠️ 可选仅处理 PDF

最小化部署: 如果不上传 PDF 和旧版 Office 文档,可只部署 MarkItDown。


转换流程


转换结果

转换完成后,会生成以下文件:

文件说明
原始文件保留原始格式,用于下载
Markdown 文件转换结果,用于分片

文档元数据会更新:

json
{
  "id": 1,
  "title": "分布式锁指南",
  "fileType": "pdf",
  "mdFilePath": "/data/knowledge/1/distributed-lock.md",
  "mdFileSize": 15234,
  "stage": "SPLIT"  // 阶段已更新
}

最佳实践

PDF 转换

  • 优先使用 MinerU — 对表格、公式、图片支持更好
  • 检查转换结果 — 复杂 PDF 可能转换不完整
  • 建议上传源文件 — 如有 Markdown 源文件,直接上传

Word 转换

  • 建议上传 DOCX 格式 — 避免两步转换,提升速度
  • 旧版 DOC 转 DOCX — 可用 Word 另存为 DOCX 后上传

代码文档

  • 直接使用 Markdown — 代码文档建议使用 MD 格式
  • 使用代码块 — 标注语言,如 ```java

下一步