微信扫码
添加专属顾问
我要投稿
在构建 RAG 知识库时,PDF文档中的表格跨页现象是一个常见挑战。传统方法依赖复杂的逻辑来判断和合并表格,而更简单、高效的方案可以通过 chunk 的存储和上下文管理来解决。
两种表格合并算法
两种算法都基于版面识别判断法。
前提:正确识别版面并去除每页的页眉、页脚。
1. 合并后存储为一个chunk
判断当前页最后一个元素和下一页第一个元素的类型:
示例代码:
def merge_cross_page_tables(tables_per_page):merged_tables = []temp_table = Nonefor page_num, tables in enumerate(tables_per_page):for table in tables:if temp_table: # 上一页存在未合并的表格temp_table += table # 合并表格内容merged_tables.append({"page": page_num, "table": temp_table})temp_table = Noneelse:temp_table = tableif temp_table: # 表格延续至下一页continuereturn merged_tables
2. 基于分块与描述同步法(推荐)
将跨页表格的两部分分别提取,并生成独立的 chunk,一般第一个表格的描述信息就是第二页表格的描述信息,需要特殊处理就可以实现跨页。
这种方法无需实时合并表格,通过 LLM 在检索时合并上下文中的表格 chunk,完美解决跨页问题。
示例代码:
import pdfplumberdef extract_tables_as_chunks(pdf_path):chunks = []prev_table_desc = ""table_counter = 1with pdfplumber.open(pdf_path) as pdf:for page_num, page in enumerate(pdf.pages):tables = page.extract_tables()for table in tables:if prev_table_desc:desc = f"表格 {table_counter}(延续部分),前页描述:{prev_table_desc}"prev_table_desc = "" # 重置描述else:desc = f"表格 {table_counter}(第1部分)"prev_table_desc = descchunk = {"description": desc, "data": table, "page": page_num + 1}chunks.append(chunk)table_counter += 1return chunks
两种方案的对比
RAG 系统中的应用
存储:将跨页表格分为多个 chunk 存储,确保数据完整。
检索:用户查询时,RAG 系统会同时检索到表格的多个 chunk。
生成:LLM 根据表格的描述和数据自动合并,输出完整表格内容。
优势总结
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业
2026-02-06
RAG 落地全干货深度分享:从“效果不理想”到生产级 RAG 系统的进化之路
2026-02-06
效率神器 Claude-Mem:终结 AI “金鱼记忆”!自动保存上下文、可视化记忆流,开发体验提升 10 倍!
2026-02-06
告别“伪智能”代码:用 Spec + RAG 打造真正懂你的AI程序员
2026-02-05
向量,向量化,向量数据库和向量计算
2026-02-05
从 RAG 到 Agentic Search,一次关于信任 AI 判断的认知升级
2026-02-04
Claude Cowork 真能替换 RAG ?
2026-02-03
使用 Agent Skills 做知识库检索,能比传统 RAG 效果更好吗?
2026-02-03
告别向量数据库!PageIndex:让AI像人类专家一样阅读长文档
2025-12-04
2025-12-03
2025-11-13
2025-12-02
2025-11-13
2026-01-15
2025-12-07
2026-01-02
2025-12-23
2025-12-18
2026-02-04
2026-02-03
2026-01-19
2026-01-12
2026-01-08
2026-01-02
2025-12-23
2025-12-21