1. 提取资产负债表中的总资产

提取资产负债表中的总资产 学习卡片

任务说明

从资产负债表文本中提取“总资产”项目对应的数值,并完成单位归一化处理(如“亿元”转“元”)。输入为一段包含总资产信息的财报文本,输出为标准化后的总资产数值(单位:元)。

实现方案

使用正则表达式匹配“总资产”关键词后的数值与单位,再按单位换算系数统一转为“元”。代码支持“元”“万元”“亿元”三种常见单位,并兼容数字中的逗号分隔符。

核心代码

import re

def extract_total_assets(text):
    """
    从财报文本中提取总资产数值并转换为元。
    返回 (数值, 单位) 或 None(未找到时)。
    """
    # 匹配模式:总资产后可能出现冒号、空格等,再捕获数字(含逗号)与单位
    pattern = r'总资产[::为是]?\s*([\d,]+(?:\.\d+)?)\s*(万元|亿元|元)?'
    match = re.search(pattern, text)
    if not match:
        return None

    num_str = match.group(1).replace(',', '')  # 去除千分位逗号
    unit = match.group(2) or '元'  # 默认单位为元

    # 单位换算系数(转元)
    unit_factors = {
        '元': 1,
        '万元': 10_000,
        '亿元': 100_000_000,
    }

    if unit not in unit_factors:
        raise ValueError(f"不支持的金额单位: {unit}")

    value = float(num_str) * unit_factors[unit]
    return value, unit

# 最小调用示例
if __name__ == "__main__":
    sample_text = "报告期内,公司总资产为 1,234.56亿元,较上年同期增长5%。"
    result = extract_total_assets(sample_text)
    if result:
        value, unit = result
        print(f"提取结果:{value:.2f} 元(原始单位:{unit})")
    else:
        print("未找到总资产信息")

运行与验证

运行方式:将上述代码保存为 extract_assets.py,在命令行执行 python extract_assets.py。

预期输出:

提取结果:123456000000.00 元(原始单位:亿元)

验证用例:可替换 sample_text 中的数值与单位进行测试:

  • 输入 "总资产为 500万元" → 预期输出 5000000.00 元
  • 输入 "总资产:3,200元" → 预期输出 3200.00 元
  • 输入 "负债合计8亿元"(不含“总资产”)→ 预期返回 None

通过条件:上述三个用例输出与预期一致,且未匹配文本时正确返回 None,即判定实现通过。

常见问题

  • 文本中“总资产”后紧跟换行:正则中 \s* 已覆盖换行符,无需额外处理。
  • 金额为整数无小数:正则中 (?:\.\d+)? 使小数部分可选,可正常匹配。
  • 单位缺失:默认按“元”处理,若实际文本中单位缺失且数值明显偏大,需人工确认口径。