一、背景

仓库地址:https://github.com/chitian-victor/memory-assistant

记忆的本质,无非就是重复再重复。为了适配我日常工作与生活中的英语需求,一款辅助提升词汇量的工具应运而生。它不止于背单词,而是万物皆可记,万物皆可背
市面上很多单词软件都只能背单词,而且是固定词库里面的,不足够开放,这也是我开发该工具的主要原因,要不然就不会重复造轮子了。

二、工具描述

使用方式

  1. 安装依赖:
    • python >= 3.11
    • pip install tkmacosx
  2. 执行 make 指令生成软件包「软件包位置:./dist/app.app」
  3. 数据默认存储在了~/my_github/memory-assistant-private/v2/data/items.txt,可以通过修改代码修改存储位置

基本功能

  1. 支持手动添加词条
  2. 支持生成指定数量的复习词条列表
  3. 支持词条打标:认识/不认识,并且支持删除

核心算法

这里的算法指的是如何为每个词条生成需要复习的权重,这里参考了艾宾浩斯公式,同时加入了自己的一些自定义指标

参考指标

  • 词条首次添加时间:距离该时间超过 1 天才会生效,越往后对复习权重影响越小
  • 词条上次复习时间:距离该时间越长对复习权重影响越大
  • 词条的不认识次数:次数越高影响越大

公式

简单概括就是优先考虑新添加超过一天的词条,其次考虑词条的艾宾浩斯遗忘概率

三、实现

由于是在 mac 电脑上面进行的开发,windows 系统的兼容性还未验证
此外,如果本地加载的 ui 异常,可以考虑升级 python 版本解决,mac 系统和 tkinter 容易出现不兼容问题

功能实现

  1. 数据存储
    首先是数据的存储方式,由于是个人使用,不会有太大的数据量,所有直接用了 text 文本存储。其次是数据的格式,包括不同词条之间的隔离、每条词条内的内容和属性的隔离、属性之间的隔离,最终的隔离方案如下:
  • 词条之间的分隔符:·\n=*==*==*==*==*==*==*==*==*==*=\n
  • 词条与属性之间的分隔符:\n--------------------\n
  • 属性之间的分隔符:,

存储示例

1
2
3
4
5
6
7
8
9
10
11
 测试数据 1  
--------------------
2026-02-26 17:51:43, 2026-02-26 17:52:03, 4, 5.82
=*==*==*==*==*==*==*==*==*==*=
测试数据:
1. a
2. b
--------------------
2026-02-26 17:52:00, 2026-02-26 17:52:03, 4, 5.82
=*==*==*==*==*==*==*==*==*==*=

  1. 交互逻辑

算法实现

直接看代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
def cal_ebbinghaus_with_newness(days_first,days_last, forget_count):  
"""
基于艾宾浩斯公式 (0~100)
:param days_last: 距离上次背诵的间隔天数
:param forget_count: 不认识的次数
:param days_first: 距离首次添加的总天数
"""
# 1. 计算传统的艾宾浩斯遗忘概率 (0~100) base_strength = 7.0
strength = base_strength / (1 + 0.8 * forget_count)
# 避免days_last为0时出现100%保留率无法产生权重,最低给0.1
retention = math.exp(-max(days_last, 0.1) / strength)
ebb_score = (1 - retention) * 100

# 2. 计算新词强力加权系数 (指数衰减,这里设半衰期约1.4天)
# 刚添加时(1天内)为0分,1-2天为100分,2-3天为60分,4-5天为 36分,完全衰减后依靠遗忘概率
newness_score = 100 * math.exp(-0.5 * days_first)
if days_first<1:
newness_score=0

# 3. 平滑融合算法:底分为新词分,剩下的空间由遗忘分数填补
final_score = newness_score + (1 - newness_score / 100.0) * ebb_score
return round(final_score, 2)

四、拓展

功能拓展

  1. 支持账号绑定
  2. 支持内容分类
  3. 可以支持非常多的功能,可以参考市面上的单词背诵软件
  4. ….

技术拓展

  1. 将 txt 文件存储替换为数据库存储
  2. 支持云存储
  3. …..