惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LINUX DO - 热门话题
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
S
Security @ Cisco Blogs
W
WeLiveSecurity
N
News and Events Feed by Topic
Security Archives - TechRepublic
Security Archives - TechRepublic
V2EX - 技术
V2EX - 技术
TaoSecurity Blog
TaoSecurity Blog
L
LINUX DO - 最新话题
Cloudbric
Cloudbric
S
Secure Thoughts
Recent Commits to openclaw:main
Recent Commits to openclaw:main
C
CXSECURITY Database RSS Feed - CXSecurity.com
Forbes - Security
Forbes - Security
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
The Blog of Author Tim Ferriss
博客园 - 【当耐特】
NISL@THU
NISL@THU
F
Full Disclosure
博客园_首页
Blog — PlanetScale
Blog — PlanetScale
腾讯CDC
B
Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
B
Blog RSS Feed
Jina AI
Jina AI
N
News | PayPal Newsroom
G
Google Developers Blog
P
Proofpoint News Feed
雷峰网
雷峰网
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Proofpoint News Feed
PCI Perspectives
PCI Perspectives
H
Heimdal Security Blog
GbyAI
GbyAI
Project Zero
Project Zero
Hacker News - Newest:
Hacker News - Newest: "LLM"
Y
Y Combinator Blog
S
Schneier on Security
Hacker News: Ask HN
Hacker News: Ask HN
S
Security Affairs
P
Privacy & Cybersecurity Law Blog
Attack and Defense Labs
Attack and Defense Labs
美团技术团队
T
Threat Research - Cisco Blogs
T
Threatpost
The Hacker News
The Hacker News
C
Cisco Blogs
Last Week in AI
Last Week in AI
Google DeepMind News
Google DeepMind News

少数派

派早报:Google 发布 Fitbit Air 等 - 少数派 「新人报到」確認需求,再開始 - 少数派 从 SOLO 独立开发者社区,我看到了越来越多开发者开始做自己的产品 - 少数派 我怎么管理那些"不常做,但总会忘"的生活事项 - 少数派 人形机器人量产元年,数据才是具身智能的“生死线” - 少数派 BuhoLaunchpad 高度还原 Mac 启动台:开发历程与思考 - 少数派 五年陪伴依然不舍,DIY 换壳后让罗技 MX Master 3 继续服役 - 少数派 新玩意 240|少数派的编辑们最近买了啥? - 少数派 一日一技|为什么你应该关闭 iOS 的键盘声音 - 少数派 我做了个插件和 Skills,一键提取任何网站的设计规范 Design.md - 少数派 住在三四线城市的你,该开始录播客了 - 少数派 甘南秘境,大白高国 - 少数派 AI的审美:谁让把我变成川内倫子 - 少数派 返工怎能不烦恼,打工人片单总有一部是你的「嘴替」 - 少数派 为了让「上厕所」更健康,我做了一个小工具 - 少数派 AI + Skill,能够让生成的文章去除 AI 味吗? - 少数派 新玩意|韶音OpenDots ONE 耳夹式耳机 - 少数派 《美满》| 在每一个春天的晚上相爱(362) - 少数派 新玩意|优篮子 PS01 MagSnap 磁吸支架 - 少数派 自我整合手记 | 我开始早睡了:用稳定规则,为自由托底 - 少数派 用龙虾(OpenClaw)两个多月,我最深的12个体会 - 少数派 听歌时间到,12 张你可能错过的 2025 华语乐坛好专辑 - 少数派 承诺能追吗 - 少数派 macOS 26启动台没了? 我做了个不一样的App启动器 - Keboard - 少数派 《四海为家的人》| INTJ对话INTJ(361) - 少数派 你发过的那些黑历史,是时候一次清干净了 - 少数派 新玩意:安安静静玩,越玩越专注:计客密码机 - 少数派 iPad 用户首次体验 Android 平板:vivo Pad6 Pro - 少数派 数据逻辑强 - 少数派 极北行+ | 一路向北,探访日本至北之地 | 001 - 少数派 万字剖析:千问App深度体验报告(2026) - 少数派 在2026年,如何真正防止别人抄袭你的作品 - 少数派 怎么用 50 块搭个 AI 语音助手?我踩了 3 天坑 - 少数派 YeeroAI:让 AI 对话真正成为知识管理的一部分 - 少数派 爬泰山 - 少数派 「旅图显影」 App 更新:这次,我们补上了一点「手感」 - 少数派 假期出门太折磨?我的 23 条经验帮你规划惬意旅行 - 少数派 工作流会变吗 - 少数派 Claude Opus 4.6 怎么用最省钱?我测了 5 种方案 - 少数派 GPT Image 2 让图文并茂不再稀罕 - 少数派 用户侧出发——什么是AI,我要不要学习? - 少数派 找片、转存、整理、播放一条龙!让你的付费网盘值回票价 - 少数派 欢迎试用!日课一问2.0插件 - 少数派 自己做的MDeditor,原本想购买 Typora 试了两次支付不成功,干脆自己做一个 - 少数派 vibe coding了一个 3MB 的小工具,让 ~/Downloads 彻底告别混乱 - 少数派 因为受不了 Mac 的风扇策略,我做了一个风扇控制工具 - 少数派 别只怪模型 - 少数派 Warp 终端的 AI 功能怎么用?我测了一周的体验 - 少数派 AI 写代码老是出 bug?这 5 个配置我后悔没早知道 - 少数派 「新玩意」苹果出相机可能就这样:Sigma BF + 45mm F2.8 DG Contemporary - 少数派 一个面向2030年的AI操作系统是什么样子的:浅谈cola这款有灵魂的Agent - 少数派 别只看写代码 - 少数派 每天解决10个问题,还是一口气攻坚解决400个? - 少数派 AI 交易机器人怎么搭?我用 Claude 跑了一周实盘 - 少数派 Maptoposter Online:把你爱的城市画成艺术海报 - 少数派 Function Calling 怎么用?我测了 3 个模型发现差距真大 - 少数派 Legend Talk:我做了个 AI 圆桌,让 160 位思想家围着你的问题转 - 少数派 如何找到自己的蓝方?在小县城寻找压力测试 - 少数派 语音输入与软件接口|2026年聊AI时,我们都聊些什么(上) - 少数派 混动已经卖爆,纯电又来补刀——钛7闪充版简直“不讲武德” - 少数派 本月玩什么|朋友收藏、识质存在、沙罗周期 - 少数派 为什么要每天坚持输出? - 少数派 Claude API 挂了好几个小时,你的项目有备用方案吗? - 少数派 Function Calling 没你想的复杂——我用它做了个有点用的工具 - 少数派 登录系统立即播放视频或者图片音乐的软件 - 少数派 我为什么创建 FlipHTML5 下载工具 - 少数派 残局没电?多品牌外设电量统一管理软件EasyBluetooth已支持RTSS游戏内显示以及AIDA64 - 少数派 前往通义路的路 - 少数派 太好看了,媲美Sun的个人导航页,NAS部署星云门户 - 少数派 乌黑嘴唇“一键检测”上线了 - 少数派 派早报:Claude AI 接入多个创意软件生态、FILCO 生产方接手品牌等 - 少数派 【更新】BearCLI、Claude 连接器与 MCP 服务器 - 少数派 记了上千条流水,还是看不懂财务?我做了一个让 AI 读懂账本的工作台 - 少数派 MINI R56 升级原厂 Sport 模式 - 少数派 新玩意 | 一棵柠檬树(仿真版) - 少数派 Momenta的“物理AI”野望,需迈过“含摩量”这道关 - 少数派 网页直接投屏控制手机!NAS一键部署PandaScrcpy,流畅丝滑可远程。 - 少数派 众测|邀你一同探索随身 AI 硬件入口 YoooClaw C·ONE - 少数派 2050大会:分享时间是真诚 参会记 - 少数派 iPad 赋能电影创作:国内首部宣纸手绘长片《燃比娃》的幕后故事 - 少数派 AI的审美:我用 8 个大模型给 100 张旅行照片打分 - 少数派 普通人如何破圈?去参加一个本地协会 - 少数派 把极空间的图标全换了,主题DIY全攻略打造你的专属NAS桌面 - 少数派 电子便签墙,帮你实现便签自由 - 少数派 我如何用三个 CLI 工具取代文档创建需求 - 少数派 原来真的有人可以玩一辈子 - 少数派 社区速递 139 | 派友热议三月买了啥、复古单反尼康 Df 体验 - 少数派 06 作品的赏析与评价 - 少数派 TDS REVIEW|索尼 WF-1000XM6 降噪真无线耳机体验 - 少数派 35.98万起售的第二代腾势D9,我看重的不是堆料,而是不凑合 - 少数派 鼠须管 Squirrel 皮肤配置指北 - 少数派 从watch ultra2换到redmi watch6 - 少数派 派早报:阿里巴巴发布视频生成模型 HappyHorse 1.0 等 - 少数派 别迷信1M - 少数派 家人们天塌了!网盘“大封杀”,多个渠道多条路,NAS部署PanHub - 少数派 AI与人勾心斗角!NAS一键部署AI狼人杀,假日休闲必备。 - 少数派 电商必备!Comfyui工作流批量生图插件,一次生成12张!支持Nano banana pro模型 - 少数派 Comfyui工作流配置Gpt-image-2模型教程,0.03/张 - 少数派 OpenClaw第三方APi怎么配置?可使用Gpt-image-2模型 - 少数派 会员社区话题精选 Ep. 103 - 少数派
Beancount-Trans - 少数派
2025-04-09 · via 少数派

🌟Beancount-Trans - 基于语义分析和规则引擎的自动化 Beancount 账单生成工具

🚀 核心价值

经过长期对 Beancount 的使用和测试,我发现在日常记账中最烦恼的有以下几点:

  1. 由于记录数量太多,若每个记录都以单独条目记录则需要耗费大量时间,若以天为条目进行记账,又会导致条目的颗粒度太大
  2. 我是以周为频率进行记账断言的,对于长期记账来说这个频率未免太频繁
  3. 支出账户没有形成系统的规划,导致记录条目时总是要纠结选用哪个支出账户,且记录后也无法通过 FAVA 的试算表了解自己的各类支出情况;
Beancount-Trans 首页


在线体验 | 本地部署 | 案例账本

⚡ 快速开始

上传账单,系统会根据定义好的商户和账户自动格式化输出为 beancount 能识别的文本。当前支持自动更新至 Beancount-Trans-Assets 项目,仅支持本地部署用户启用。

  1. 根据 账单导出及查看方法 从对应平台中获取账单
  2. 首页 上传 csv 或 pdf 文件完成解析(无登录用户默认使用 admin 的通用映射模板)
  3. 复制解析后的文本至 自己账本 或 Beancount-Trans-Assets 项目(提供基础的目录结构)对应的年月目录中
  4. 修改文本中的 Expense:Other 和 Assets:Other 的条目(没有对应的映射条目)
  5. 在 Beancount-Trans-Assets 项目中使用 fava main.bean 运行程序,通过 http://127.0.0.1:5000 访问
  6. 根据 fava 提示修改错误条目

使用说明

该项目默认读者有 beancount 的使用经验。在使用 Beancount-Trans 过程中,有以下几点需要注意

确定映射账户

graph TD
    A[开始] --> B{交易类型}
    B -->|支出| C[匹配关键字+优先级计算]
    B -->|收入/不计收支| D[直接分类]
    C --> E{存在冲突?}
    E -->|是| F[AI语义决策]
    E -->|否| G[确定分类]
    F --> G
    G --> H[结束]
    D --> H

    classDef focus fill:#f9f,stroke:#333;
    class E,F focus

解析优先级

当多个商家名称相似时(如「华为」「华为终端」「华为软件」),系统需要知道哪个分类更精准。我们通过「分类层级深度」和「商家信息」两个维度智能判断优先级。

分类示例层级深度加分项总优先级匹配结果
华为 → Shopping2 层 (2×100=200)无商家信息200🟡 基础匹配
华为软件 → Culture2 层 (2×100=200)有商家信息 +50250🟢 优先匹配
华为终端 → Shopping:Digital3 层 (3×100=300)有商家信息 +50350🟢 最高优先级匹配
  1. 层级越深越精准:每多一级分类(用冒号分隔),优先级自动 +100
  2. 商家信息加分:填写商家详细信息(如「华为旗舰店」),优先级额外 +50
  3. 当出现多个条目解析优先级相同时:payee 字段会保留原始商家

🤖 AI 辅助决策

当出现多个条目解析优先级相同时:

2024-01-01 08:00:00,保险,国泰**司,fin***@cathay-ins.com.cn,保险-买家版运费险-EGGKA木耳边一体绒打底衫女内搭秋冬2022新款半高领加绒针织上衣等,支出,7.88,中信银行信用卡(5718),交易成功,2023010522001199861407503809    ,T1100P1790123557322669684    ,,
候选关键字: ["保险", "运费", "打底衫", "上衣"]

• 保险 → Expenses:Finance:Insurance (优先级200)
• 打底衫 → Expenses:Shopping:Clothing (优先级200)
• 上衣 → Expenses:Shopping:Clothing (优先级200)

# AI决策过程:
1. spaCy计算相似度: 
   - "保险" → 0.72
   - "打底衫" → 0.64
   - "上衣" → 0.68
1. 选择最高值 → "保险"

三餐判断

服务对三餐的判断有两种形式,一种是根据 Expense 中的支出映射来决定最终的条目,例如账单中含有 " 早餐 " 的备注会被匹配到 "Expenses:Food:Breakfast"。

还有一种是后端的硬编码,系统在根据支出映射解析完成后得到的条目为 "Expenses:Food" 时,会根据账单时间对条目进行调整,例如发生在 06:00 到 10:00 之间的 "Expenses:Food" 条目,系统会自动修改为 "Expenses:Food:BreakFast"。

时段配置:

  • 🍳 早餐:06:00-10:00
  • 🍱 午餐:10:00-14:00
  • 🍲 晚餐:16:00-20:00

当支出映射与三餐时间冲突时,例如在 2023-11-26 10:49:54,扫二维码付款,瑞安市暖爸副食品店,"收款方备注:二维码收款付款方留言:饮料",支出,¥3.00,零钱通,已转账,100004990123112600060327753584678844 ,10000499012023112601373972597516 ,"/" 条目中

包含 " 饮料 " 和 " 食品 " 两个关键字,其中 " 饮料 " 的 Expense 为 "Expenses:Food:DrinkFruit"," 食品 " 的 Expense 为 "Expenses:Food"。虽然根据三餐判断时间为早餐 "Expenses:Food:Breakfast" 与 "Expenses:Food:DrinkFruit" 优先级一致,但实际情况归类于早餐并不合适。

所以关键字与三餐的判断规则为:先判断关键字优先级,再判断三餐时间。

默认忽略

默认会对余额宝账户的收益进行忽略,请在下个月 balance 时以 "Income:Investment:Interest" 利息计入。

默认会对微信支付状态为 " 已全额退款 "、 " 对方已退还 " 或以 " 已退款 " 开头的条目进行忽略。

默认会对支付宝支付状态为 " 退款成功 "、" 交易关闭 "、" 解冻成功 "、" 信用服务使用成功 "、" 已关闭 "、" 还款失败 "、" 等待付款 " 、" 芝麻免押下单成功 " 的条目进行忽略。

选中 " 生成 balance 对账信息 " 时,默认忽略同一天非最晚的记录。

手动处理

最终解析结果为 "Expenses:Other"、"Income:Other"、"Assets:Other" 时,说明无法正确解析,请手动处理或增加映射后再次解析。

当某个银行含有多张储蓄卡时,解析结果可能错误需手动处理。

由于各账单的字段是以 逗号 作为分隔,所以无法解析商家名称包含 , 的条目。

自动写入 Beancount-Trans-Assets

当选中 " 自动写入 Beancount-Trans-Assets" 后,系统会在解析完成后检查同级目录下 Beancount-Trans-Assets 是否有对应本年的年度账本,例如 2023。如果存在,系统会将数据正常写入该账本;如果不存在,系统会自动创建年度账本,并将解析后的文本写入其中。

本地用户通过 " 本地账本 " 查看。

平台用户可通过该功能将错误条目输出至 " 案例账本 ",作者会根据 " 案例账本 " 中的报错修改账单解析代码以求保证解析功能正确。

🐳 快速开始(本地容器环境部署)

为了方便用户使用,作者提供本地 docker compose 的部署方式。推荐以该方式部署,集成了 fava 展示、自动记录、OwnTracks 轨迹记录等多项自动化功能

若无 Docker 环境,可参考 本地环境部署 文档。

项目初始化

git clone https://github.com/dhr2333/Beancount-Trans.git
cd Beancount-Trans; git submodule update --init  # 初始化所有子模块
# git submodule foreach git switch main  # 所有子模块切换到main分支
# git submodule foreach git pull origin main  # 若有需要则将所有子模块拉取main分支代码

首次运行

首次运行会自动创建名为 mysql-dataredis-data 的存储卷。

所有容器端口可自行指定。

在 Benacount-Trans 主目录下运行

$ docker compose up  # 增加 -d 参数可实现后台运行

或 编译后运行

services:
  beancount-trans-frontend:
    # image: dhr2333/beancount-trans-frontend:latest
    build:
      context: ./Beancount-Trans-Frontend
      dockerfile: Dockerfile
      args:
        - "--no-cache"
$ docker compose build  # 编译
$ docker compose up

访问

通过 http://localhost:38001/trans 进行解析,同时可以通过 " 我的账本 " 直接访问完整账本信息。

Pasted image 20231210165239

📊 持久化存储

MySQL 默认使用初始化数据,并不做持久化存储。若需要持久化存储需要放开以下注释:

beancount-trans-mysql:
  volumes:
    - mysql:/var/lib/mysql  # 若需要持久存储取消该注释和volumes中的注释
volumes:
  mysql:
    external: true  # 若已创建外部存储卷,则取消该注释(多次docker compose up可能会导致存储卷重复创建导致启动失败)
    name: mysql-data
  redis:
    external: true  # 若已创建外部存储卷,则取消该注释
    name: redis-data

Beancount-Trans-Assets

Beancount-Trans-Assets 项目提供 Beancount 账本组织结构,所有记账条目以月进行统计,以年进行存档。

账本结构说明可参考 Beancount_05_项目管理

GitHub 私有项目创建成功后,可将代码上传至私有仓库

git clone https://github.com/dhr2333/Beancount-Trans-Assets.git
cd Beancount-Trans-Assets
# 修改后
git add .
git commit -m "提交记录"
git remote add origin [你的项目链接]
git branch -M main
git push -u origin main

Beancount-Trans-Backend

Beancount-Trans 项目集中的后端项目,主要实现账单格式的转换功能及提供对外接口。

安装

$ cd Beancount-Trans-Backend
$ pipenv install  #  安装虚拟环境
$ pipenv shell  # 使用虚拟环境
$ apt-get install -y mysql libmysqlclient mysql-clients  # requirements.txt中的mysqlclient包依赖于mysql,所以需手动下载
$ pip install -r requirements.txt  # 安装所需依赖

配置

修改 mydemo/setting.py 修改数据库配置,如下所示:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': os.environ.get('TRANS_MYSQL_DATABASE') or 'beancount-trans',
        'USER': os.environ.get('TRANS_MYSQL_USER') or 'root',
        'PASSWORD': os.environ.get('TRANS_MYSQL_PASSWORD') or 'root',
        'HOST': os.environ.get('TRANS_MYSQL_HOST') or '127.0.0.1',
        'PORT': os.environ.get('TRANS_MYSQL_PORT') or '3306',
        'TIME_ZONE': 'Asia/Shanghai',
    }
}

修改 manage.py 配置文件使用 本地开发环境 mydemo.settings

def main():  
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mydemo.settings')  # 本地开发环境
    try:  
        from django.core.management import execute_from_command_line  
    except ImportError as exc:  
        raise ImportError(  
            "Couldn't import Django. Are you sure it's installed and "  
            "available on your PYTHONPATH environment variable? Did you "            "forget to activate a virtual environment?"        ) from exc  
    execute_from_command_line(sys.argv)  


if __name__ == '__main__':  
    main()

创建数据库

MySQL 数据库中执行:

CREATE DATABASE `beancount-trans`

然后终端下执行:

python manage.py makemigrations
python manage.py migrate

导入提供的 SQL 模板,并根据自己的实际账户进行调整:

mysql -h127.0.0.1 -uroot -proot  beancount-trans < fixtures/20240507-Develop.sql  # 当前模板含有强烈的个人风格,建议根据自己情况修改

开始运行

执行: python manage.py runserver 0:8002

浏览器打开 http://127.0.0.1:8002/translate/trans 就可以完成简单的账单转换。

Beancount-Trans-Frontend

修改 .env 配置文件使用 本地开发环境

运行前端程序:

$ npm install 
$ npm run dev  # 启动程序

浏览器打开 http://localhost:5173/ ,需要 Beancount-Trans-Backend 及数据库服务正常运行才能实现解析功能。

贡献 & 捐赠

如果你希望对 Beancount-Trans-Backend 做出贡献,请阅读我们的 贡献指南

关于 Beancount-Trans 及子项目有任何项目及使用上的问题,建议提 issue。

捐赠收入将全部用于提高 网站 解析速度。

微信 & 支付宝

微信支持标签解析,备注可添加后缀 #TEST

支付宝支持信用卡及花呗支付