这是用户在 2025-7-6 14:40 为 https://chat.deepseek.com/a/chat/s/2a82cc06-25d9-4b2a-8e24-54f5b3cdf028 保存的双语快照页面,由 沉浸式翻译 提供双语支持。了解如何保存?
开启新对话
今天
Excel非结构化数据提取方案设计
LLM实现Excel信息提取与写入方案
获取gemini-codrawing链接
大模型提取Excel信息方法解析
我现在需要你成为一个高级的ai人工智能开发总监。我的需求如下:
7 天内
用户询问模型版本信息
Replit与Cursor编程AI对比及选择建议
Replit Excel工具开发优化建议
客诉邮件记录与处理指南
2025-02
用户询问智能助手语音功能
你知道中国地区的苹果售后服务热线吗
下载 App
个人信息
Excel非结构化数据提取方案设计
我现在想利用chat gpt来帮我完成Excel表格中的“非结构化数据提取”功能 我的需求是如下 1、从我发的Excel表格中提取我指定需要的信息(这些信息的位置可能会跟随着Excel表格格式不同而改变,需要用到什么方法来解决这件事情。) 2、有可能我指定需要提取的信息,是需要从Excel表格原本数据中函数运算得到的 3、需要将这些信息写入我指定的Excel表格中且不能改变这个Excel的格式 4、在设计时需要考虑多份Excel表格同时提取(但是文件大小不会超过大模型限制的大小)
已深度思考(用时 93 秒)
我们面临的任务是从非结构化或半结构化的Excel表格中提取信息,并将提取的结果写入到指定格式的Excel中,同时保持目标格式不变。由于Excel表格的格式可能变化,我们需要一种灵活的方式来定位数据。以下是一个可行的方案:
步骤1:分析源Excel结构(非固定格式)
由于表格格式可能变化,我们不能依赖固定的行列索引。可能的解决方案包括:
a. 使用自然语言描述所需数据的位置(例如:“在‘员工信息’标题下的表格中,第二列是姓名”),但这需要模型理解表格结构。
b. 使用基于内容匹配的方法:例如,查找包含特定关键词(如“姓名”、“日期”)的单元格,然后根据相对位置(同一行、同一列等)提取数据。
步骤2:处理计算字段
如果所需信息需要通过函数运算得到,我们可以:
a. 在读取Excel后,利用pandas等库进行数据运算(如果运算逻辑已知且可以用代码实现)。
b. 如果运算逻辑复杂且多变,我们可以将公式描述给大模型,让大模型解析公式并计算(但注意,大模型可能不擅长精确计算,尤其是涉及大量数据时)。
或者,我们可以选择在Excel文件中预先计算好(如果允许的话),然后直接读取计算结果。
步骤3:写入目标Excel
目标Excel有固定格式,我们不能破坏。因此,我们需要:
a. 只修改指定的单元格,其他保持不变。
b. 使用openpyxl或xlwings等库可以精确控制写入的位置(根据工作表名、单元格地址等)。
步骤4:批量处理多份Excel
我们可以遍历多个文件,对每个文件执行相同的提取操作,并将结果写入到指定的目标位置(可能是同一个目标文件的不同位置,或不同的目标文件)。
具体设计:
1. 输入:
- 用户上传多个Excel文件(源文件)
- 用户提供提取规则(例如:提取每个文件中的“员工姓名”、“工资总额”等,以及它们的位置描述或识别方式)
- 用户提供目标Excel文件(模板文件)以及每个提取结果应该写入的位置(例如:Sheet1的A2单元格)
2. 处理过程:
a. 读取源Excel文件,将其转换为结构化的数据(如pandas DataFrame)或者保留原始单元格信息(值、公式、格式等)。
b. 对于每个需要提取的字段,根据规则定位数据。定位规则可以包括:
- 通过表头名称定位(例如:找到表头为“姓名”的列,然后读取该列的所有数据)
- 通过关键词搜索定位(例如:搜索包含“总金额”的单元格,然后取它右边或下面的单元格)
- 通过固定位置(如第2行第3列),但这种方法在格式变化时不可靠,所以尽量少用
c. 对于需要计算的数据,如果规则中说明了计算公式,则根据公式计算(可能需要解析公式并转换为pandas可计算的表达式)。注意:如果公式依赖于Excel内置函数,可能需要使用eval在pandas中实现,或者使用openpyxl的公式计算功能(但计算可能受限)。
d. 将提取的数据按照用户指定的位置写入目标Excel。注意:目标位置可能是固定的单元格,也可能是根据源文件不同而变化的(例如每个源文件的结果写入目标文件的不同行)。
3. 输出:
- 更新后的目标Excel文件(保持原有格式,仅更新指定单元格的值)
技术实现:
我们将使用以下库:
- pandas:用于读取和操作Excel数据(适用于数据量较大且结构清晰的情况)
- openpyxl:用于精确控制Excel文件,特别是当需要保留格式时,或者当需要处理公式、样式等时。
注意:由于非结构化数据提取的复杂性,我们可能需要结合使用这两种库。例如,用pandas读取数据,但用openpyxl来写入目标文件(因为pandas会破坏原有格式)。
步骤细化:
1. 用户上传:
- 多个源Excel文件(假设为file1.xlsx, file2.xlsx, ...)
- 一个目标Excel文件(template.xlsx)
2. 用户提供提取规则(可以是一个JSON配置文件,或者通过界面设置):
规则示例:
[
{
"field": "employee_name",
"description": "在包含'员工姓名'的单元格右侧的单元格",
"source_sheet": "Sheet1", # 可选,如果不指定则搜索所有工作表
"search_key": "员工姓名",
"direction": "right", # 表示取右侧单元格
"offset": [0, 1] # 或者用相对位置,[行偏移, 列偏移],这里[0,1]表示同一行下一列
},
{
"field": "total_salary",
"description": "在包含'工资总额'的单元格下方的单元格",
"source_sheet": "Sheet1",
"search_key": "工资总额",
"direction": "below", # 下方
"offset": [1, 0] # 下一行同一列
},
{
"field": "calculated_bonus",
"formula": "total_salary * 0.1", # 这里假设我们已经提取了total_salary,然后进行运算
"depends_on": ["total_salary"] # 依赖的字段
}
]
3. 用户提供写入规则(目标位置):
例如:
{
"employee_name": {"sheet": "Summary", "cell": "B2"},
"total_salary": {"sheet": "Summary", "cell": "B3"},
"calculated_bonus": {"sheet": "Summary", "cell": "B4"}
}
4. 处理每个源文件:
对于每个源文件:
a. 使用openpyxl加载工作簿(因为pandas读取会丢失格式信息,但这里我们只需要值,所以也可以用pandas读取,但定位单元格位置时,openpyxl更方便)
b. 根据规则在每个工作表中搜索关键词,找到匹配的单元格,然后根据偏移量提取值。
c. 对于计算字段,根据依赖字段和公式计算。
d. 将提取和计算得到的数据存储在一个字典中(每个文件一个字典)。
5. 写入目标文件:
a. 使用openpyxl加载目标工作簿(保留原有格式)。
b. 根据写入规则,将每个源文件提取的数据写入到指定的工作表和单元格。
c. 注意:如果多个源文件的数据需要写入同一个目标文件的不同位置,用户需要提供每个源文件对应的目标位置(比如按行追加)。因此写入规则可能需要扩展,例如每个字段的位置规则可能是一个列表,对应多个源文件的位置。或者用户指定一个起始单元格,然后按行向下写入。
考虑到多文件写入,可能需要修改写入规则,例如:
写入规则:
{
"employee_name": {"sheet": "Summary", "start_cell": "B2", "direction": "down"},
...
}
表示第一个文件写入B2,第二个文件写入B3,以此类推。
6. 保存目标文件。
挑战:
- 非结构化定位的准确性:关键词可能重复,或者表格结构复杂。可能需要更复杂的规则(如多个关键词定位)。
- 公式计算:复杂的Excel公式可能难以在程序中重现。如果可能,尽量避免在程序中计算,而是提取原始数据,然后在目标Excel中设置公式(但目标格式不允许改变,所以写入的可能是值)。
因此,我们可能需要用户提供详细的定位规则,并允许一定的灵活性(比如使用正则表达式匹配关键词,或者指定搜索区域等)。
由于这个任务非常复杂,我们可以分阶段实现:
第一阶段:实现固定位置的提取(行列索引)和固定写入位置。
第二阶段:实现基于关键词的定位(单一关键词,固定偏移)。
第三阶段:实现简单的计算字段(基于已提取字段的简单运算)。
下面是一个简化的代码框架,只处理一个源文件,并写入目标文件的固定位置。
注意:我们假设用户提供的规则足以定位数据,且每个关键词只出现一次。
代码示例(使用openpyxl):

针对您的需求,我将设计一个结合大模型(如ChatGPT)和Python脚本的解决方案,解决非结构化Excel数据提取的难题。以下是完整的实现方案:

一、整体架构设计

下载

二、关键技术方案

  1. 动态数据定位问题

    • 解决方案:关键词锚点 + 相对位置搜索

    • 实现代码

    python
    复制
    下载
    def find_data_by_anchor(worksheet, anchor_text, offset_row, offset_col):
        for row in worksheet.iter_rows():
            for cell in row:
                if anchor_text in str(cell.value):
                    return worksheet.cell(
                        row=cell.row + offset_row, 
                        column=cell.column + offset_col
                    ).value
        return None
  2. 计算字段处理

    • 解决方案:公式描述 + Python计算引擎

    • 示例配置

    json
    复制
    下载
    {
      "field_name": "bonus",
      "formula": "salary * 0.2 + performance_score * 100",
      "dependencies": ["salary", "performance_score"]
    }
  3. 多文件批量处理

    python
    复制
    下载
    def process_files(file_paths, config):
        results = {}
        for file_path in file_paths:
            wb = load_workbook(file_path)
            file_results = {}
            for item in config['extraction_rules']:
                # 执行提取逻辑
            results[file_path] = file_results
        return results
  4. 目标文件无损写入

    python
    复制
    下载
    def write_to_target(target_path, data, positions):
        wb = load_workbook(target_path)
        ws = wb.active
        for field, value in data.items():
            cell_ref = positions[field]
            ws[cell_ref] = value  # 只修改指定单元格
        wb.save(target_path)

三、完整工作流程

  1. 准备阶段

    • 创建配置文件 config.json

    json
    复制
    下载
    {
      "extraction_rules": [
        {
          "name": "employee_name",
          "anchor": "员工姓名",
          "offset": [0, 1],
          "data_type": "string"
        },
        {
          "name": "total_salary",
          "formula": "base_salary + bonus - tax",
          "dependencies": ["base_salary", "bonus", "tax"]
        }
      ],
      "target_positions": {
        "employee_name": "Sheet1!B3",
        "total_salary": "Sheet1!C5"
      }
    }
  2. 主处理程序

    python
    复制
    下载
    import openpyxl
    import json
    import os
    from openai import OpenAI
    
    # 初始化大模型客户端
    client = OpenAI(api_key="your_api_key")
    
    def extract_complex_data(question, context):
        response = client.chat.completions.create(
            model="gpt-4",
            messages=[{
                "role": "user",
                "content": f"基于以下表格数据:\n{context}\n\n回答:{question}"
            }]
        )
        return response.choices[0].message.content
    
    def process_excel(file_path, config):
        # 实现提取逻辑
        # ...
        return extracted_data
    
    if __name__ == "__main__":
        with open("config.json") as f:
            config = json.load(f)
        
        files = ["file1.xlsx", "file2.xlsx"]
        output_path = "report.xlsx"
        
        # 备份原始文件
        os.copy("template.xlsx", output_path)
        
        for file in files:
            data = process_excel(file, config)
            write_to_target(output_path, data, config["target_positions"])

四、处理不同格式的进阶方案

  1. 智能表格检测

    python
    复制
    下载
    def detect_table_region(worksheet):
        # 使用大模型分析表格结构
        table_data = []
        for row in worksheet.iter_rows(max_row=10):
            table_data.append([cell.value for cell in row])
        
        response = client.chat.completions.create(
            model="gpt-4",
            messages=[{
                "role": "user",
                "content": f"识别表格的有效区域:\n{table_data}\n返回[开始行,结束行,开始列,结束列]"
            }]
        )
        return eval(response.choices[0].message.content)
  2. 动态规则生成

    python
    复制
    下载
    def generate_extraction_rules(sample_file):
        # 上传示例文件给大模型分析
        # 返回自动生成的提取规则

五、注意事项

  1. 大模型使用建议

    • 每次发送不超过100行×10列的数据

    • 结构化提示词模板:

    text
    复制
    下载
    请从以下表格数据中提取信息:
    | 姓名   | 部门   | 工资 |
    |--------|--------|------|
    | 张三   | 技术部 | 8000|
    | ...    | ...    | ... |
    
    问题:技术部的最高工资是多少?
  2. 性能优化

    • 本地缓存已解析的表格结构

    • 批量发送多个查询请求

    • 设置合理的超时时间(建议10-15秒)

  3. 错误处理

    python
    复制
    下载
    try:
        # 数据处理逻辑
    except Exception as e:
        log_error(f"处理失败:{str(e)}")
        # 尝试降级方案
        fallback_extraction()

六、部署方案

  1. 环境要求

    text
    复制
    下载
    Python 3.9+
    依赖库:openpyxl, openai, pandas
  2. 执行命令

    bash
    复制
    下载
    python excel_extractor.py \
      --input "data/*.xlsx" \
      --config extraction_config.json \
      --output final_report.xlsx

此方案通过结合大模型的语义理解能力和Python的精确控制,解决了非结构化Excel数据提取的核心痛点。对于特别复杂的表格,建议先进行人工标注1-2个示例文件,训练专用的小模型提高准确率。

开启新对话
深度思考 (R1)
联网搜索
内容由 AI 生成,请仔细甄别