agentic_huge_data_base / wiki
页面 RAGFlow · 6.1 文档解析策略·DeepWiki 中文全文译文

6.1 · 文档解析策略(Document Parsing Strategies)

复杂文档理解与引用检索 · 聚焦本章的模块关系、源码依据与实现要点。

项目RAGFlow 章节6.1 状态全文译文 模块入库与解析、文档对象与元数据、配置治理、图谱与关系
源码线索
  • common/data_source/dropbox_connector.py
  • common/data_source/rdbms_connector.py
  • deepdoc/parser/__init__.py
  • deepdoc/parser/docx_parser.py
  • deepdoc/parser/excel_parser.py
  • deepdoc/parser/html_parser.py
  • deepdoc/parser/json_parser.py
  • deepdoc/parser/markdown_parser.py
  • deepdoc/parser/pdf_parser.py
  • deepdoc/parser/resume/__init__.py
模块标签
  • 入库与解析
  • 文档对象与元数据
  • 配置治理
  • 图谱与关系
  • 系统架构

章节正文

文档解析策略

文档解析策略

相关源文件

以下文件为本维基页面的生成提供了上下文:

  • common/data_source/dropbox_connector.py
  • common/data_source/rdbms_connector.py
  • deepdoc/parser/__init__.py
  • deepdoc/parser/docx_parser.py
  • deepdoc/parser/excel_parser.py
  • deepdoc/parser/html_parser.py
  • deepdoc/parser/json_parser.py
  • deepdoc/parser/markdown_parser.py
  • deepdoc/parser/pdf_parser.py
  • deepdoc/parser/resume/__init__.py
  • deepdoc/parser/resume/entities/corporations.py
  • deepdoc/parser/resume/entities/degrees.py
  • deepdoc/parser/resume/entities/industries.py
  • deepdoc/parser/resume/entities/regions.py
  • deepdoc/parser/resume/entities/schools.py
  • deepdoc/parser/resume/step_one.py
  • deepdoc/parser/resume/step_two.py
  • deepdoc/parser/txt_parser.py
  • deepdoc/vision/layout_recognizer.py
  • deepdoc/vision/ocr.py
  • deepdoc/vision/recognizer.py
  • deepdoc/vision/t_ocr.py
  • deepdoc/vision/t_recognizer.py
  • deepdoc/vision/table_structure_recognizer.py
  • rag/app/book.py
  • rag/app/laws.py
  • rag/app/manual.py
  • rag/app/naive.py
  • rag/app/one.py
  • rag/app/paper.py
  • rag/app/picture.py
  • rag/app/presentation.py
  • rag/app/qa.py
  • rag/app/table.py
  • rag/flow/chunker/__init__.py
  • rag/flow/chunker/schema.py
  • rag/flow/parser/parser.py
  • rag/flow/parser/pdf_chunk_metadata.py
  • rag/flow/parser/utils.py
  • rag/flow/tests/dsl_examples/general_pdf_all.json
  • rag/flow/tokenizer/schema.py
  • rag/flow/tokenizer/tokenizer.py
  • rag/nlp/__init__.py
  • rag/settings.py
  • test/testcases/test_sdk_api/common.py
  • test/testcases/test_sdk_api/conftest.py
  • test/testcases/test_sdk_api/test_chat_assistant_management/conftest.py
  • test/testcases/test_sdk_api/test_chunk_management_within_dataset/conftest.py
  • test/unit_test/common/test_dropbox_connector.py
  • test/unit_test/rag/test_sync_data_source.py
  • web/src/pages/agent/canvas/edge/index.tsx
  • web/src/pages/agent/canvas/node/handle.tsx
  • web/src/pages/agent/constant/pipeline.tsx
  • web/src/pages/agent/form/parser-form/common-form-fields.tsx
  • web/src/pages/agent/form/parser-form/index.tsx
  • web/src/pages/agent/form/parser-form/pdf-form-fields.tsx
  • web/src/pages/agent/form/parser-form/spreadsheet-form-fields.tsx
  • web/src/pages/agent/form/parser-form/text-html-form-fields.tsx
  • web/src/pages/agent/form/parser-form/word-form-fields.tsx
  • web/src/pages/agent/store.ts
  • web/src/pages/agent/utils.ts

本文档详细介绍了 RAGFlow 的文档解析策略子系统。它说明了如何使用工厂模式(FACTORY pattern)根据文件格式和解析配置来选择解析器。支持的格式包括 PDF、DOCX、Excel、Markdown、EPUB 和 PPT。本文还描述了解析器配置管理,以及为增强灵活性而引入的新的基于管线/流程(Pipeline/flow)的解析系统。

解析器选择架构

RAGFlow 使用两级工厂模式组织其解析逻辑,实现了模块化、可扩展的文档解析。

两级工厂模式
1. 片段切分策略工厂

该工厂根据 parser_id 设置选择高级文档片段切分策略。每种策略对应 rag/app/ 目录下的一个模块,专门针对特定领域或文档类型。

模块策略典型使用场景
naive.py通用默认的通用解析,适用于许多简单或未知格式
book.py书籍具有层级结构的长文档,例如书籍
paper.py论文学术论文,包括标题、摘要、章节
presentation.py演示文稿幻灯片,每张幻灯片作为一个片段(PPT、PDF 幻灯片)
manual.py手册具有复杂标题的结构化技术手册
qa.py问答从 Excel、PDF、Docx 中提取问答对
table.py表格电子表格数据处理(Excel、CSV)
laws.py法律具有编号条款的法律文档
one.py单块整个文档作为一个片段

这些工厂根据文件扩展名或配置,将文档路由到这些模块中实现的方法。

2. PDF 解析器工厂

PDF 文件通过选择合适的 PDF 布局分析解析器进行解析,该解析器从 rag/app/naive.py 中的 PARSERS 字典中选择。该字典将布局识别器或解析器后端映射到可调用的解析器函数。

片段切分策略选择流程图
RAGFlow · 片段切分策略选择流程图 · 图 1
RAGFlow · 片段切分策略选择流程图 · 图 1

*来源:rag/app/naive.py:254-261, rag/app/naive.py:782-1330, rag/app/table.py:40-128, rag/app/book.py:63-175, rag/app/one.py:59-168*

PDF 解析器工厂模式

PDF 解析器的选择是动态的,它使用 PARSERS 字典将布局识别器键映射到解析器函数实现。这使得系统能够支持多种 PDF 解析引擎,并根据配置或文档特征选择合适的解析器。

解析器 中注册的关键解析器:
  • by_deepdoc — RAGFlow 的主要布局和表格提取解析器。
  • by_mineru — 基于大语言模型(LLM)的 OCR 解析器集成(MinerU)。
  • by_docling — IBM Docling 解析器集成。
  • by_tcadp — TCADP 解析器集成。
  • by_paddleocr — 基于 PaddleOCR 的解析器。
  • by_plaintext — 简单的纯文本提取回退方案。
PDF 解析器工厂图
RAGFlow · PDF 解析器工厂图 · 图 2
RAGFlow · PDF 解析器工厂图 · 图 2

*来源:rag/app/naive.py:86-261, deepdoc/parser/pdf_parser.py:36-38, deepdoc/parser/docling_parser.py:35, deepdoc/parser/tcadp_parser.py:37, deepdoc/parser/mineru_parser.py:138*

支持的文件格式和解析器

格式扩展名主要解析器(类/模块)显著特性
PDF.pdf多种,通过 layout_recognizer 配置。示例:deepdoc(RAGFlowPdfParser)、minerudocling支持布局识别、OCR、表格和图形提取
Word.docx, .docrag/app/naive.py 中的 Docx段落/片段提取、图片处理
Excel.xls, .xlsx, .csvrag/app/table.py 中的 Excel多工作表、表头、合并单元格、基于视觉描述的图片
Markdown.md, .markdown, .mdxrag/app/naive.py 中的 MarkdownMarkdown 结构、内联图片、表格
PowerPoint.ppt, .pptxrag/app/presentation.py 中的 RAGFlowPptParser按幻灯片切分,回退到 Apache Tika 进行文本提取
EPUB.epubdeepdoc.parser 中的 EpubParser基于章节的解析
文本.txtdeepdoc.parser 中的 TxtParser基于行的纯文本解析

*来源:rag/app/naive.py:782-1330, rag/app/table.py:40-128, deepdoc/parser/excel_parser.py:31-153, rag/app/presentation.py:140-171*

主要解析实现的详细信息

DeepDOC PDF 解析器
  • 使用先进的布局识别,结合 OCR、表格检测和文本合并。
  • 管线阶段:
    • OCR 图像提取和识别(__images__
    • 布局识别(基于 ONNX 或 Ascend 的模型)
    • 通过 TableStructureRecognizer 进行表格检测
    • 使用特征和 XGBoost 模型进行文本块合并
  • 返回元组列表:(文本, 布局信息, 位置元数据),表格单独返回。
  • deepdoc/parser/pdf_parser.py 中作为 RAGFlowPdfParser 类实现。
MinerU OCR 解析器
  • 通过 LLMBundle 大语言模型(LLM)系统集成的基于大语言模型(LLM)的 OCR 解析器。
  • 支持依赖于租户的模型配置,用于 OCR 提取。
  • 提供回退机制到环境配置,以获取最佳 OCR 模型。
  • 封装在 by_mineru() 工厂函数中。
  • 使用 deepdoc/parser/mineru_parser.py 中的 MinerUParser 类。
Docling 解析器
  • IBM Docling 集成,用于 PDF 解析。
  • 提供增强的文档理解能力。
  • 工厂方法:by_docling()
  • 解析器类 DoclingParser 位于 deepdoc/parser/docling_parser.py

解析器配置系统

用于基于流程解析的 ParserParam

在新的流程/管线解析框架(rag/flow/parser/parser.py)中,解析器配置被封装在 ParserParam 类中。该类集中管理不同文件类型和输出格式的解析器设置。

关键特性:

  • 允许的输出格式:按媒体类型定义(例如,PDF 支持 jsonmarkdown,电子表格支持 jsonhtmlmarkdown)。
  • 默认设置:按文件类别定义默认的解析器方法和设置。
  • 参数
    • 解析方法(例如 deepdococr
    • 语言设置
    • 是否将图片扁平化为文本
    • 移除目录或页眉/页脚等

这些设置驱动下游管线组件中的动态解析器选择和解析行为。

解析器类型和默认设置示例
媒体类型默认解析器方法默认输出格式支持的后缀
PDF"deepdoc""json".pdf
电子表格"deepdoc""html".xls, .xlsx, .csv
Word 文档""(通用)"json".doc, .docx
Markdown""(通用)"json".md, .markdown, .mdx
图片"ocr""json".jpg, .jpeg, .png, .gif
音频(多种)"json" / "text".wav, .mp3, .aac, .flac
解析器配置流程图
RAGFlow · 解析器配置流程图 · 图 3
RAGFlow · 解析器配置流程图 · 图 3

*来源:rag/flow/parser/parser.py:60-230, rag/app/naive.py:740-752, [common/parser_config_utils.py]*

管线系统中支持的解析器

新的管线解析系统支持多种由 parser_config 配置的精细调整解析器。例如:

  • PDF 解析策略"deepdoc""plain_text""tcadp_parser""vlm" 等。
  • Word 和 Office 格式:使用 rag/app/naive.pyDocx)和 rag/app/table.pyExcel)中的类,输出格式为 HTML 或 JSON。
  • Markdown、文本:由 MarkdownParser 或 TxtParser 解析。
  • 图片解析:使用 OCR,可选地结合大语言模型(LLM)辅助的文本识别。
  • 音频和视频:主要支持元数据提取,此处不详细说明。

每个解析器管线都可以通过回调钩子、页面过滤和语言设置进行自定义。

集成视觉和媒体增强功能

RAGFlow 通过支持基于视觉的图形、图片和表格增强功能来扩展解析能力,为文本片段添加媒体上下文。

  • 视觉-语言模型(VLM)集成:用于生成嵌入在文档或电子表格中的图片的自然语言描述。
  • 图形和表格解析包装器:诸如 vision_figure_parser_pdf_wrappervision_figure_parser_docx_wrapper 之类的函数,为从 PDF 和 DOCX 文件中解析出的表格和图形附加描述。
  • Excel 图片提取和描述Excel 类提取工作表图片,并使用基于视觉的描述对其进行标注,以丰富片段上下文。
  • 上下文附加:可以将周围的文本上下文附加到图片或表格描述中,为下游的检索增强生成(RAG)入库形成更丰富的片段。

这种多模态解析确保了非文本信息能够被正确捕获和呈现。

总结

RAGFlow 的文档解析子系统在片段切分策略和 PDF 解析器两个层面都利用了工厂模式,以灵活处理包括 PDF、DOCX、Excel、Markdown、EPUB 和 PPT 在内的多种文档格式。解析器的选择由文件扩展名和 parser_config 设置驱动,支持多种解析引擎以满足特定需求。集中式配置类 ParserParam 通过策略特定参数促进了基于流程的解析。基于视觉的增强功能进一步用媒体上下文丰富了文本片段,确保了健壮的端到端文档入库管线。

参考资料

  • 片段切分策略代码:rag/app/naive.pyrag/app/book.pyrag/app/paper.pyrag/app/presentation.pyrag/app/manual.pyrag/app/qa.pyrag/app/table.pyrag/app/laws.pyrag/app/one.py
  • PDF 解析器和 PARSERS 字典:rag/app/naive.py:254-261
  • PDF 解析器类:deepdoc/parser/pdf_parser.pydeepdoc/parser/docling_parser.pydeepdoc/parser/mineru_parser.pydeepdoc/parser/tcadp_parser.py
  • ParserParam 配置:rag/flow/parser/parser.py
  • 视觉和图形解析:deepdoc/parser/figure_parser.pyrag/app/naive.pyrag/app/table.py
  • Excel 图片提取:deepdoc/parser/excel_parser.py

来源: rag/app/naive.py:86-261, 740-1330 rag/app/table.py:40-128 rag/app/book.py:63-175 rag/app/presentation.py:140-171 deepdoc/parser/pdf_parser.py:36-38 deepdoc/parser/docling_parser.py:35 deepdoc/parser/mineru_parser.py:138 rag/flow/parser/parser.py:60-230 common/parser_config_utils.py deepdoc/parser/figure_parser.py deepdoc/parser/excel_parser.py:31-153