[Bug]: Markdown parser rejects valid GFM table separator rows with fewer than 3 dashes

用户在使用 RAGFlow 解析 Markdown 文档时触发。具体是在 deepdoc/parser/markdown_parser.py 中的 _is_table_separator_row 方法校验表格分隔行时,将诸如 :-- 、 --: 等有效的 GFM 分隔符判定为无效,导致表格内容被逐行

[Bug]: Markdown parser rejects valid GFM table separator rows with fewer than 3 dashes

[Bug]: Markdown parser rejects valid GFM table separator rows with fewer than 3 dashes

快速结论:此报错发生在 RAGFlow 解析 Markdown 表格时,其分隔行正则表达式要求单元格内必须包含至少 3 个短横线(`-{3,}`),但 GFM 规范允许 1 个或更多。优先排查 deepdoc/parser/markdown_parser.py 第 196 行的正则表达式是否需要放宽限制。

问题场景

用户在使用 RAGFlow 解析 Markdown 文档时触发。具体是在 deepdoc/parser/markdown_parser.py 中的 _is_table_separator_row 方法校验表格分隔行时,将诸如 :----: 等有效的 GFM 分隔符判定为无效,导致表格内容被逐行错误地拆分成碎片。

报错原文

is_table_separator_row regex ^:?-{3,}:?$ rejects valid GFM separators like :--, --:, and :---:. Valid tables get fragmented row-by-row.

原因分析

可能原因:代码中的正则表达式 ^:?-{3,}:?$ 被设计为应用于单个单元格(在管道符分割并去除空格后),要求每个单元格至少有 3 个短横线。然而,GFM 规范(GitHub Flavored Markdown)的表格扩展仅要求分隔符单元格包含 一个或多个 短横线。-{3,} 的限制比 GFM 规范更严格,因此像 :--(2 个短横线)这样的有效分隔符会被拒绝。

环境排查

  • 检查使用的项目版本,确认是否包含 deepdoc/parser/markdown_parser.py
  • 注意 Markdown 源文档中表格分隔行的格式(如 :--, --:, :- 等)。

解决步骤

  1. 定位文件:打开项目中的 deepdoc/parser/markdown_parser.py 文件,找到第 194-196 行附近的 _is_table_separator_row 方法。
  2. 修改正则表达式:将方法内部用于校验单个单元格的正则表达式从 -{3,} 更改为 -+(或 -{1,}),使其匹配一个及以上短横线。修改后的正则应为:
    re.match(r"^:?-+:?$", cell.replace(" ", ""))

验证方法

在修改后,重新运行 RAGFlow 并解析包含多种格式表格分隔行(例如 |:--|--:|:---:|)的 Markdown 文档。确认表格能够被正确解析,不再出现“逐行碎片化”的错误。

参考来源

infiniflow/ragflow #16314

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 9952

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注