利用关键词匹配算法将杂乱无章的支付备注转化为结构化的财务报表彻底告别手动打钩分类的痛苦。以下是完整的项目交付文档项目名称SmartLedger-NLP (智能流水分类脚本)一、 实际应用场景描述场景 月底了你的微信和支付宝账单加起来有200多笔。现状 你看着满屏的“商户单号”、“二维码收款”、“扫一扫付款”完全想不起来上周三下午那笔28.5元到底买了什么。操作流程1. 从微信/支付宝导出CSV账单通常备注栏是混乱的。2. 运行本脚本指定文件路径。3. 程序自动扫描“交易备注”和“交易对方”字段。4. 输出一份新的classified_ledger.csv其中新增了“消费类别”列餐饮/交通/购物/娱乐...。5. 直接导入Excel进行透视分析。二、 引入痛点 (Pain Points)传统记账方式存在以下痛点1. 语义模糊 “肯德基宅急送” ≠ “餐饮”机器看不懂。2. 重复性劳动 每个月都要手动把相似的商家拖到同一个分类里。3. 规则滞后 遇到新出现的APP如“朴朴超市”旧规则无法识别。4. 非技术门槛 普通人不会写Excel宏只能肉眼分类。本方案的解决思路利用 “关键词正则匹配 优先级权重” 算法。建立一个“财务词典”让Python像老会计一样看到“美团”、“饿了么”就知道是“餐饮”看到“滴滴”、“地铁”就知道是“交通”。三、 核心逻辑讲解 (Algorithm Logic)我们采用 “字典树 (Trie) 简化版 —— 哈希表匹配” 算法1. 规则库构建 (Rule Base)- 创建一个字典键是分类Category值是关键词列表。- 例{餐饮: [麦当劳, 肯德基, 美团, 饿了么, 星巴克]}。2. 逐行扫描 (Row Scanning)- 读取CSV的每一行提取description 字段。3. 优先级匹配 (Priority Matching)- 为了避免歧义比如“苹果”可能是水果也可能是手机我们设定最长匹配优先或优先级从高到低。- 如果备注中包含“医院”直接归类为“医疗”不再往下判断。4. 兜底策略 (Default Category)- 如果所有关键词都不匹配归类为“其他”方便人工二次审核。四、 代码模块化实现 (Core Code)以下是核心程序smart_ledger.py。技术栈 Python 3.x pandas (数据处理) re (正则表达式)。smart_ledger.py功能微信/支付宝CSV流水智能分类脚本日期2026-04-13import pandas as pdimport refrom collections import defaultdict# # 模块一会计科目规则库 (可配置)# ACCOUNTING_RULES {餐饮: [肯德基, 麦当劳, 星巴克, 瑞幸, 美团, 饿了么,必胜客, 汉堡王, 喜茶, 奈雪, 海底捞],交通: [滴滴, 高德, 地铁, 公交, 一卡通, 加油,停车, 高铁, 飞机, 打车],购物: [淘宝, 京东, 拼多多, 唯品会, 盒马, 山姆,便利店, 超市, 屈臣氏],娱乐: [电影, 影院, KTV, 游戏, Steam, Netflix],医疗: [医院, 药房, 药店, 挂号],转账: [转账, 红包, 还款]}# # 模块二NLP分类引擎# class TransactionClassifier:交易流水分类器def __init__(self, rules):self.rules rules# 预编译正则表达式以提高性能self.compiled_rules self._compile_rules()def _compile_rules(self):将关键词列表编译为正则表达式compiled defaultdict(list)for category, keywords in self.rules.items():for kw in keywords:# 使用 re.escape 防止特殊字符干扰compiled[category].append(re.compile(re.escape(kw)))return compileddef classify(self, description: str) - str:对单条交易描述进行分类参数description: 交易备注或商户名称字符串返回分类名称 (str)if not isinstance(description, str):return 其他# 按优先级遍历规则库for category, patterns in self.compiled_rules.items():for pattern in patterns:if pattern.search(description):return category# 如果没有匹配到任何规则return 其他# # 模块三数据处理管道# class LedgerProcessor:账本处理器def __init__(self, classifier: TransactionClassifier):self.classifier classifierdef process_csv(self, input_file: str, output_file: str):读取CSV添加分类列并输出新CSVtry:# 微信/支付宝导出的CSV编码通常是GBK或UTF-8df pd.read_csv(input_file, encodinggbk)except UnicodeDecodeError:df pd.read_csv(input_file, encodingutf-8)# 智能识别列名 (微信和支付宝的列名略有不同)desc_column Noneamount_column Nonefor col in df.columns:if 备注 in col or 商品 in col or 描述 in col:desc_column colif 金额 in col or 收/支 in col: # 支付宝可能是收/支amount_column colif not desc_column:raise ValueError(未找到交易描述列请检查CSV格式)# 应用分类算法print(f开始处理 {len(df)} 条记录...)df[智能分类] df[desc_column].apply(self.classifier.classify)# 保存结果df.to_csv(output_file, indexFalse, encodingutf-8-sig)print(f✅ 处理完成已保存至: {output_file})# 打印统计摘要self._print_summary(df)def _print_summary(self, df):打印分类统计摘要print(\n 消费类别统计:)summary df.groupby(智能分类)[智能分类].count().sort_values(ascendingFalse)print(summary)# # 模块四主程序入口# def main():# 1. 初始化分类器classifier TransactionClassifier(ACCOUNTING_RULES)# 2. 初始化处理器processor LedgerProcessor(classifier)# 3. 定义文件路径input_csv wechat_alipay_export.csv # 用户需将此文件放入同目录output_csv classified_ledger.csv# 4. 执行处理try:processor.process_csv(input_csv, output_csv)except FileNotFoundError:print(f❌ 错误: 找不到输入文件 {input_csv})print(请先将微信/支付宝导出的账单重命名为此文件名。)except Exception as e:print(f❌ 发生未知错误: {e})if __name__ __main__:main()五、 README.md 文件# SmartLedger-NLP 告别手动记账微信/支付宝流水智能分类脚本## 项目简介这是一个基于Python的命令行工具利用关键词匹配算法自动识别微信/支付宝导出的CSV账单将其归类为餐饮、交通、购物等科目一键生成结构化报表。## ️ 环境依赖- Python 3.8- pandas (pip install pandas)## 快速开始1. 从微信/支付宝导出账单保存为 wechat_alipay_export.csv。2. 将文件放在脚本同目录下。3. 运行程序bashpython smart_ledger.py4. 查看生成的 classified_ledger.csv。## ⚙️ 自定义规则打开 smart_ledger.py修改 ACCOUNTING_RULES 字典pythonACCOUNTING_RULES {我的专属分类: [特定商家A, 特定APP_B],# ... 添加更多规则}六、 使用说明 (User Guide)Step 1: 导出账单- 微信 我 → 服务 → 钱包 → 账单 → 常见问题 → 下载账单 → 用于个人对账。- 支付宝 我的 → 账单 → 右上角齿轮 → 开具交易流水证明 → 申请。Step 2: 准备环境- 确保电脑安装了Python 3.8。- 安装pandaspip install pandas。Step 3: 运行与检查- 将导出的CSV文件重命名为wechat_alipay_export.csv。- 运行脚本。- 打开输出的classified_ledger.csv检查“智能分类”列。如果有错漏按“使用说明”修改规则库。七、 核心知识点卡片 (Flash Cards)卡片主题 编程/算法概念 会计/财务关联规则引擎 字典 (Dict) 数据结构 会计科目表的数字化映射正则表达式re.compile(),search() 模糊匹配商户名称如“XX路麦当劳”Pandas DataFrame 表格数据处理 电子账本的自动化处理异常处理try...except 应对脏数据、编码错误的鲁棒性CSV编码 GBK vs UTF-8 解决Windows环境下中文乱码的关键八、 总结作为一名全栈工程师我深知“数据如果不经过清洗就是垃圾经过算法处理才是资产”。这个记账脚本虽然只有几百行代码但它体现了财务智能化的雏形1. 规则即逻辑 把老会计的经验看到什么字归哪类变成了代码里的字典。2. 解放双手 将重复性劳动交给CPU人类只负责制定规则和审核结果。3. 数据可视化前置 只有分类清晰的数据才能画出漂亮的消费趋势图。让每一分钱都在代码的注视下各归其位。利用AI解决实际问题如果你觉得这个工具好用欢迎关注长安牧笛