农行pdfToCsv

一、功能概述

本工具用于解析中国农业银行活期交易明细PDF文件,提取结构化交易数据并输出为CSV格式文件。 主要实现以下功能:

  1. 异体字标准化处理(支持84个异体字转换)
  2. PDF文本布局解析(保留原始排版结构)
  3. 交易时间自动补全(缺失时间字段时补零)
  4. 短行合并处理(解决PDF换行错误问题)
  5. 特定业务规则适配(苹果支付URL处理、信用卡交易格式修正等)

二、核心配置说明

1. 字符替换映射表(_CHAR_REPLACEMENTS

  • 作用:解决PDF解析产生的异体字问题
  • 示例
    '⾏': '行'  # 将康熙部首"⾏"转换为标准汉字"行"  
    '⽔': '水'  # 处理Unicode兼容字符  
    
  • 维护规则:新增替换项需验证字形一致性,避免误替换。

2. PDF文件列表(_PDF_FILES

要提取的文件放到这里


三、核心处理流程

1. 整体流程

graph LR  
    A[加载PDF文件] --> B[逐页提取文本]  
    B --> C[字符标准化处理]  
    C --> D[单行格式修正]  
    D --> E[短行合并]  
    E --> F[过滤无效行]  
    F --> G[输出CSV]  

2. 分步逻辑说明

(1) 字符标准化处理(replace_special_chars

  • 输入:原始文本行(可能包含异体字、非常规Unicode字符)
  • 处理逻辑
    1. 通过str.translate应用预定义的异体字替换表(_TRANS_TABLE
    2. 使用unicodedata.normalize("NFKC")进行Unicode兼容性标准化
  • 示例
    输入:"⽔⽇交易" → 输出:"水日交易"  
    

(2) 单行格式修正(process_line

将PDF解析后的原始文本行转换为符合CSV格式的标准化字段,解决以下问题:

  • 字段分隔符不一致(空白符、逗号混合)
  • 特定业务格式错误(如URL跨行、信用卡交易拆分)
  • 时间字段缺失
  • 年份相关的日志号缺失

2. 分步处理逻辑
将连续空格、制表符等空白字符替换为单个逗号:line = re.sub(r'\s+', ',', line.strip())
清理多余逗号:line = line.replace(",,", ",")
苹果支付URL合并(去掉对手的url):line.replace('https:www.apple.comcnitunescharts,https:www.apple.comcnitunescharts ', 'https:www.apple.comcnitunescharts')
信用卡交易格式修正(信用卡中心,(特约)交通银行(信用卡):line.replace('错误格式', '正确格式')
年费、利息等记录补全时间信息(默认:000000)
为2022年添加日志号信息
修正位置的交易附言(例如”TH99“)

(3) 短行合并(merge_short_lines

1. 合并规则

  • 条件1:行长度≤13字符(PDF换行错误导致内容不完整)

  • 条件2:以https:www.apple开头的行(URL跨行显示)

  • 合并方式

    merged[-1] += f"->{line}"  # 使用"->"标记合并点  
    
  • 最终处理:输出前移除->标记,还原完整内容。

(4) 结果写入(main函数)

  • 标题行:固定写入CSV列名
    交易日期,交易时间,交易摘要,交易金额,本次余额,对手信息,日志号,交易渠道,交易附言  
    
  • 过滤规则:跳过以PREFIXES_TO_MATCH中定义的关键词开头的无效行。

四、版本记录

  • v1.2 (2025-03-09)
    • 大量的修改,名称变更为pdfToCsvAboutABC.py
  • v1 (2024-xx-xx)
    • 名为p1的版本