如何用 Python + LLM 构建一个智能栗子表格提取工具?
在日常办公和数据处理场景中,“Word 表格 → Excel 汇总” 是一项高频却重复的任务,尤其当面对几十上百份结构不一致的 Word 文件时,传统的手动复制粘贴方式既耗时又易错。
今天,我们将以“栗子表格”为例,结合 Python 和大语言模型(LLM, Large Language Model),一步步拆解并构建一个智能表格提取工具,实现 Word 表单字段的自动识别、标准化、对齐与 Excel 生成。
本文适合具备一定 Python 基础、对 AI+办公自动化感兴趣的开发者或数据处理工程师阅读。
🧩 背景问题:为什么这不是简单的“提取表格”?
传统的表格提取工具往往假设所有 Word 文件格式一致、字段标准。但真实世界的数据,往往存在:
-
表格字段名称不统一(“电话” vs “手机号”)
-
表格结构不同(横向 vs 纵向,字段顺序混乱)
-
多语言、缩写、错别字混杂
-
不同用户可能删除或新增字段
我们需要的不只是“读取表格”,而是理解表格语义、识别字段含义、统一结构输出。这正是 LLM 的强项。
🛠️ 技术栈概览
模块 | 技术实现 |
---|---|
文档解析 | python-docx / docx2txt |
数据标准化 | 自定义规则 + LLM(OpenAI / Claude) |
表格结构化 | pandas + 字段映射逻辑 |
Excel 导出 | openpyxl / xlsxwriter |
批处理系统 | Python 脚本 + CLI / Web UI |
第一步:提取 Word 表格中的字段和值
使用 python-docx
读取 .docx
文件中的表格内容,并将其解析为键值对结构。
from docx import Documentdef extract_table_fields(doc_path):doc = Document(doc_path)data = {}for table in doc.tables:for row in table.rows:if len(row.cells) >= 2:key = row.cells[0].text.strip()value = row.cells[1].text.strip()data[key] = valuereturn data
📌 注意事项:
-
有些表格可能为“横向”填写,需自定义判断方式
-
多个表格时需合并字段(非覆盖)
第二步:使用 LLM 做字段归一化(字段别名识别)
面对多种字段命名(“联系电话”、“手机”、“联系方式”),我们可以构建一个 LLM Prompt,让模型来做智能匹配。
import openaidef normalize_fields(data_dict):prompt = f"""
你是一个表单标准化工具,以下是原始字段和值:{data_dict}请将字段名标准化为以下之一:
["name", "gender", "phone", "email", "age"]返回格式:{{标准字段名: 原始值}} 的 JSON。
"""response = openai.ChatCompletion.create(model="gpt-4",messages=[{"role": "user", "content": prompt}],temperature=0.2)return eval(response['choices'][0]['message']['content'])
🧠 优势:
-
能够处理拼写差异、语义近似的字段
-
可以自定义标准字段集合,适配不同表单类型
第三步:批量处理文件夹中的 Word 文件
结合前两步,我们构建一个完整的提取逻辑,处理多个 Word 文档并合并为 Excel。
import os
import pandas as pddef batch_process(folder_path):records = []for filename in os.listdir(folder_path):if filename.endswith(".docx"):path = os.path.join(folder_path, filename)raw_data = extract_table_fields(path)normalized_data = normalize_fields(raw_data)normalized_data["file_name"] = filenamerecords.append(normalized_data)df = pd.DataFrame(records)df.to_excel("output.xlsx", index=False)
📂 示例输入结构:
data/
├── 表单1.docx
├── 表单2.docx
├── 表单3.docx
📄 输出文件:output.xlsx
(每行代表一份 Word 表)
第四步:构建一个 Web 前端(可选)
如果你想让非程序员也能使用这个工具,可以考虑用 Streamlit 快速构建一个交互式界面:
pip install streamlit
import streamlit as stst.title("栗子表格:智能 Word 表单提取工具")
uploaded_files = st.file_uploader("上传 Word 表格", accept_multiple_files=True, type="docx")if st.button("一键提取"):results = []for file in uploaded_files:raw = extract_table_fields(file)clean = normalize_fields(raw)results.append(clean)df = pd.DataFrame(results)st.dataframe(df)df.to_excel("out.xlsx", index=False)st.success("提取完成,可下载!")
🎉 最终,你将拥有一个带界面、支持批量上传的智能表单提取系统!
🔍 延伸优化方向
-
📊 字段聚合模型微调(支持行业自定义词汇)
-
📌 错误字段校验(加入验证规则,如手机号长度)
-
🔄 增量更新模式(避免重复导出)
-
🧠 本地化 LLM(如使用 Claude、LLaMA、通义千问等国产模型)
通过 Python + LLM,我们可以快速构建一个强大、可扩展的 Word 表单提取工具。它不仅提升了效率,更解决了传统脚本难以处理的“语义理解”和“字段对齐”问题。
📌 项目关键点:
-
利用 LLM 实现字段归一化
-
保持字段顺序一致性和数据完整性
-
支持批量导出 Excel,适配真实办公场景
项目地址 & 推荐平台
想体验无代码版本?可以试试已有产品 👉
栗子表格:https://liziform.top