支持私有化部署
AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


打造自己的RAG解析大模型:简单高效的跨页表格合并方案

发布日期:2024-12-15 11:17:31 浏览次数: 1913 作者:真聊技术



在构建 RAG 知识库时,PDF文档中的表格跨页现象是一个常见挑战。传统方法依赖复杂的逻辑来判断和合并表格,而更简单、高效的方案可以通过 chunk 的存储和上下文管理来解决。

两种表格合并算法

两种算法都基于版面识别判断法

前提:正确识别版面并去除每页的页眉、页脚。

1. 合并后存储为一个chunk

判断当前页最后一个元素和下一页第一个元素的类型:

  • 如果两者均为 表格 类型,则认为是跨页表格的延续。
  • 将两页的表格合并成一个完整表格,存储为一个 chunk。

示例代码:

    def merge_cross_page_tables(tables_per_page):    merged_tables = []    temp_table = None
        for 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 = None            else:                temp_table = table        if temp_table:  # 表格延续至下一页            continue    return merged_tables


    2. 基于分块与描述同步法(推荐)

    将跨页表格的两部分分别提取,并生成独立的 chunk,一般第一个表格的描述信息就是第二页表格的描述信息,需要特殊处理就可以实现跨页。

    • 前一页:表格 X(第1部分)
    • 下一页:表格 X(延续部分),前页描述:表格 X(第1部分)

    这种方法无需实时合并表格,通过 LLM 在检索时合并上下文中的表格 chunk,完美解决跨页问题。

    示例代码:

      import pdfplumber
      def extract_tables_as_chunks(pdf_path):    chunks = []    prev_table_desc = ""    table_counter = 1
          with 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 = desc
                      chunk = {"description": desc, "data": table, "page": page_num + 1}                chunks.append(chunk)            table_counter += 1
          return chunks

      两种方案的对比

      方法
      实现复杂度
      存储结构
      检索合并方式
      版面元素判断法,合并
      中等
      单个 chunk 存完整表格
      不需要额外合并
      版面元素判断法,分块与描述同步法(推荐)
      简单
      多个 chunk
      描述增强关联性 LLM 上下文自动合并输出


      RAG 系统中的应用

      存储:将跨页表格分为多个 chunk 存储,确保数据完整。

      检索:用户查询时,RAG 系统会同时检索到表格的多个 chunk。

      生成:LLM 根据表格的描述和数据自动合并,输出完整表格内容。

      优势总结

      • 无需复杂合并逻辑:分块与描述法实现简单,逻辑清晰。
      • 上下文管理优异:LLM 自然合并表格内容,生成高质量输出。
      • 高效处理跨页表格:解决了表格拆分与合并难题,极大提升知识库构建效率。

        53AI,企业落地大模型首选服务商

        产品:场景落地咨询+大模型应用平台+行业解决方案

        承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业

        联系我们

        售前咨询
        186 6662 7370
        预约演示
        185 8882 0121

        微信扫码

        添加专属顾问

        回到顶部

        加载中...

        扫码咨询