You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用映射字典从TXT文件中提取指定结构化数据?

解决方案:基于映射字典提取多格式TXT数据

核心思路

先统一文本格式消除大小写、空格差异,再通过映射字典的字段变体去匹配提取对应值,最后输出规整的结构化结果。

具体实现步骤(Python)

  1. 预处理文本
    把读取的TXT内容统一转小写、合并多余空格,减少匹配时的格式干扰:
def preprocess_text(text):
    # 转小写+替换多空格为单空格+去除换行符
    return ' '.join(text.lower().split())
  1. 优化映射字典
    将所有字段变体统一转小写,避免大小写不匹配的问题:
# 补充完整你的映射字典,这里加入发票字段的变体示例
values_dict = {
    'Customer Number': ['customer nr.', 'customer number', 'cus. nr.', 'cust no.'],
    'Invoice Number': ['invoice nr.', 'inv. number', 'invoice no.', 'inv nr'],
    'Order Number': ['order number', 'order nr', 'ord. no.', 'order no.']
}
# 生成小写版的变体映射,方便后续匹配
lowercase_mapping = {key: [var.lower() for var in vars] for key, vars in values_dict.items()}
  1. 编写提取逻辑
    遍历每个目标字段,用正则匹配变体字段与对应值(兼容字段: 值或字段 值的常见格式):
import re

def extract_data(txt_content):
    processed_text = preprocess_text(txt_content)
    extracted = {}
    
    # 提取公司信息(假设公司名位于文本开头,且在第一个业务字段前,可根据实际调整正则)
    company_match = re.search(r'^([a-zA-Z0-9\s&.,]+)(?=\scustomer nr\.|\sinv\. number|\sorder number)', processed_text)
    if company_match:
        extracted['Company Name'] = company_match.group(1).strip().title()
    
    # 遍历提取各业务字段
    for target_field, variants in lowercase_mapping.items():
        for variant in variants:
            # 匹配字段后紧跟冒号/空格,捕获字母、数字、连字符组成的值
            pattern = re.compile(rf'{re.escape(variant)}\s*:?\s*([a-zA-Z0-9-]+)')
            match = pattern.search(processed_text)
            if match:
                extracted[target_field] = match.group(1)
                break  # 找到匹配变体后停止当前字段的遍历
    
    return extracted
  1. 读取文件并输出结果
# 读取目标TXT文件
with open('invoice_sample.txt', 'r', encoding='utf-8') as f:
    txt_content = f.read()

# 提取并打印规整结果
result = extract_data(txt_content)
print("规整提取结果:")
for key, value in result.items():
    print(f"{key}: {value}")

示例输出

假设输入TXT内容为:

ABC Trading Co.
Customer Nr.: 12345
Inv. Number: INV-7890
Order nr: ORD-678

运行后输出:

规整提取结果:
Company Name: Abc Trading Co.
Customer Number: 12345
Invoice Number: INV-7890
Order Number: ORD-678

注意事项

  • 若字段值包含空格,可调整正则捕获组为([\w\s-]+)
  • 针对表格类TXT,可先按行分割文本,逐行匹配变体字段
  • 需根据实际业务场景扩展values_dict中的字段变体,确保覆盖所有可能的表述

内容的提问来源于stack exchange,提问作者Selchuk Hadzhaahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 03:13:31