当前位置: 首页 > news >正文

RAG 分块中表格填补简明示例:Markdown、HTML、Excel、Doc

表格填补是RAG分块中常见的需求,但不同格式的表格处理方式有所不同。本文将对 Markdown、HTML、Excel 的合并单元格进行说明,并给出 Python 示例,演示如何解析和填补。

1. Markdown 表格

Markdown 只能用空值表示合并单元格。(只有列方向的合并表格

示例

| 姓名 | 科目 | 分数 |
|------|------|------|
| 张三 | 数学 | 90   |
|      | 语文 | 85   |
| 张三 | 英语 | 88   |
| 李四 | 数学 | 92   |
|      | 语文 | 80   |

Python 解析

import pandas as pd
from io import StringIOmarkdown_table = """
姓名|科目|分数
张三|数学|90
|语文|85
张三|英语|88
李四|数学|92
|语文|80
"""df = pd.read_csv(StringIO(markdown_table), sep="|")
df['姓名'] = df['姓名'].ffill()
print(df)

输出

    姓名  科目  分数
0   张三  数学   90
1   张三  语文   85
2   张三  英语   88
3   李四  数学   92
4   李四  语文   80

2. HTML 表格

HTML 可以用 rowspancolspan进行填补

示例

<table><tr><td rowspan="2">张三</td><td>数学</td><td>90</td></tr><tr><td>语文</td><td>85</td></tr><tr><td rowspan="2">李四</td><td>数学</td><td>92</td></tr><tr><td>语文</td><td>80</td></tr>
</table>

Python 解析(BeautifulSoup + 填补 rowspan)

from bs4 import BeautifulSouphtml = """
<table><tr><td rowspan="2">张三</td><td>数学</td><td>90</td></tr><tr><td>语文</td><td>85</td></tr><tr><td rowspan="2">李四</td><td>数学</td><td>92</td></tr><tr><td>语文</td><td>80</td></tr>
</table>"""soup = BeautifulSoup(html, "html.parser")
rows = soup.find_all("tr")# 构建空表格
table = []
for r, row in enumerate(rows):cols = row.find_all("td")current_row = []for col in cols:value = col.get_text()rowspan = int(col.get("rowspan", 1))colspan = int(col.get("colspan", 1))current_row.append({"value": value, "rowspan": rowspan, "colspan": colspan})table.append(current_row)# 计算总列数
max_cols = max(sum(cell["colspan"] for cell in row) for row in table)# 初始化填补后的表格
filled_table = [[None]*max_cols for _ in range(len(table))]# 填充逻辑
for r, row in enumerate(table):c_idx = 0for cell in row:# 找到当前行可用位置while filled_table[r][c_idx] is not None:c_idx += 1# 填充 rowspan 和 colspanfor i in range(cell["rowspan"]):for j in range(cell["colspan"]):filled_table[r+i][c_idx+j] = cell["value"]c_idx += cell["colspan"]# 打印结果
for r in filled_table:print(r)

输出

['张三', '数学', '90']
['张三', '语文', '85']
['李四', '数学', '92']
['李四', '语文', '80']

3. Excel 表格

Excel 合并单元格读取后用 pandas 填补即可。

姓名科目分数
张三 (合并两行)数学90
语文85
李四 (合并两行)数学92
语文80
import pandas as pddf = pd.read_excel("example.xlsx")
df['姓名'] = df['姓名'].ffill()
print(df)

输出

     姓名  科目  分数
0   张三  数学   90
1   张三  语文   85
2   李四  数学   92
3   李四  语文   80

4. Word 表格合并单元格特点

在 Word 文档里,表格同样支持“合并单元格”,类似于 Excel,但它有自己的特点:

  • 可以 合并行(rowspan)合并列(colspan)

  • 合并单元格的内容只保留左上角的单元格,其余单元格为空

  • Python 读取 Word 表格通常用 python-docx

  • 读取后的表格数据需要手动填补合并单元格的空值,类似 Excel

示例 Word 表格

姓名科目分数
张三 (合并两行)数学90
语文85
李四 (合并两行)数学92
语文80

Python 解析 Word 表格并填补

from docx import Documentdoc = Document("example.docx")
table = doc.tables[0]# 先读取表格内容
data = []
for row in table.rows:data.append([cell.text.strip() if cell.text.strip() else None for cell in row.cells])# 填补合并单元格(垂直填充)
for col in range(len(data[0])):last_val = Nonefor row in data:if row[col]:last_val = row[col]else:row[col] = last_valfor row in data:print(row)

输出

['张三', '数学', '90']
['张三', '语文', '85']
['李四', '数学', '92']
['李四', '语文', '80']

结论:

  • Markdown:用空值表示合并单元格,再 ffill()

  • HTML:用 rowspan,需要逻辑填补

  • Excel:合并单元格读取后是 NaN,用 ffill()

  • Word 表格合并单元格读取后非首单元格为 None

  • 可以用 逐列垂直填充(类似 Excel ffill()

  • Python 最常用库是 python-docx

http://www.xdnf.cn/news/1315477.html

相关文章:

  • 机器学习--数据清洗
  • 北京JAVA基础面试30天打卡12
  • STM32CUBEMX配置stm32工程
  • 五、redis入门 之 客户端连接redis
  • Go语言并发编程 ------ 临界区
  • 批次号规则
  • Mac(四)自定义按键工具 Hammerspoon 的安装和使用
  • FX10/20 (CYUSB401X)开发笔记5 固件架构
  • 基于DSP+ARM+FPGA架构的储能协调控制器解决方案,支持全国产化
  • 【完整源码+数据集+部署教程】无人机航拍视角洪水检测与受灾房屋识别图像分割救援指导系统源码和数据集:改进yolo11-DCNV2
  • Tomcat下载、安装及配置详细教程
  • STL 容器
  • Kotlin集合概述
  • 第16节:自定义几何体 - 从顶点构建3D世界
  • 【MySQL学习|黑马笔记|Day7】触发器和锁(全局锁、表级锁、行级锁、)
  • 《Python学习之文件操作:从入门到精通》
  • Linux 服务:iSCSI 存储服务配置全流程指南
  • Java基础面试题(3)—Java(String字符串的存储方式,字面量)
  • 链表OJ题讲解---试金石含金量
  • 6个日常工作中常用的工作法:清单工作法、PDCA循环、SMART原则、6W2H 分析法等方法
  • CSS中linear-gradient 的用法
  • 《Vuejs设计与实现》第 14 章(内建组件和模块)
  • Docker+飞算JavaAI=未来:全流程容器化AI开发实战
  • Matlab课程实践——基于MATLAB设计的计算器软件(简单、科学、电工、矩阵及贷款计算)
  • python实现梅尔频率倒谱系数(MFCC) 除了傅里叶变换和离散余弦变换
  • p5.js 3D 形状 “预制工厂“——buildGeometry ()
  • Mitt 事件发射器完全指南:200字节的轻量级解决方案
  • fastadmin 后台列表自定义搜索
  • 【递归、搜索与回溯算法】记忆化搜索
  • 当 AI 开始 “理解” 情感:情感计算技术正在改写人机交互规则