间隔重复插件obsidian-spaced-repetition-recall 分享

相对原版的obsidian-spaced-repetition,做了一部分魔改:

  1. 复习时间信息可以保存在单独文件内,不修改原笔记文件内容;
  2. 在复习笔记时可以显示悬浮栏(跟复习卡片时类似),方便选择记忆效果,且可显隐到下次重复的时间间隔;
  3. 可以只转换复习笔记到卡片组,而不是全部库的笔记都转换;
  4. 算法可以切换:默认的Anki优化算法、Anki算法、Fsrs算法;
  5. 其他待发现的小改动;

注意
没有使用过obsidian-spaced-repetition插件的可以直接用,正在使用obsidian-spaced-repetition插件的话,建议试用前先备份 :yum:

欢迎大家试用讨论

适用场景

  1. 间隔重复复习;
  2. 渐进式总结;
  3. 增量写作;

下载

推荐BRAT直接添加github链接更方便些

由于仓库转移了,请换用新地址 github: GitHub - open-spaced-repetition/obsidian-spaced-repetition-recall: Fight the forgetting curve by reviewing flashcards & entire notes on Obsidian.md

8 个赞

原笔记修改内容后, 复习时间信息还能锁定该条笔记吗?

更新了点功能:

  • 算法可以切换:默认的 Anki 优化算法、Anki 算法、Fsrs 算法。切换时下次的复习时间信息不变,然后就按新切换的算法计算重复间隔;
  • 卡片/笔记复习,在复习效果旁可显隐到下次重复的时间间隔

笔记可以。
卡片目前还有些不准确,如果不修改卡片信息所在行或改内容不改行,基本也没问题;同时修改内容和行号就找不准确这个卡片的时间信息了 :sweat_smile:

插入内容改变行号还是挺频繁的, 我现在对笔记的洁癖也没要求了,要不还是让用户自己选怎么保存复习记录吧

嗯,是可选的,可以像原来那样处理,不过我改动时是以独立保存为基础的,如果要卡片时间信息保存到原笔记中,推荐还用原来的插件就好。

我卡片复习用的不多,主要想重复整个笔记的,不想复习个笔记,原笔记内容就修改了。

哇!好棒
不过如果能用FSRS4ANKI的optimizer就好了

有一个bug,当我使用FSRS算法的时候,如果我去修改request_retention,修改过之后重新打开obsidian,request_retention会重新变成默认的0.9.
不过只是在obsidian中显示的是0.9,如果打开data.json的话,会发现request_retention已经变成我修改过的数值了,即便是重新打开也不会变化。

多谢反馈,我后续改下

这块当时大概看了下,代码量太大,没看懂,就先不管了,你可以试着fork一份加进去 :grin:

我也不懂:sob:,我除了MATLAB之外啥编程语言都不会。不过其实可以问问叶大,看看optimizer有没有办法直接输入复习数据:wink:

我在知乎问叶大关于optimizer对第三方软件的支持,叶大说remnote端的optimizer支持导入CSV文件,我看看remnote的FSRS插件是什么样的以及导出的CSV格式是怎样的–不过我肯定是没有能力让这个插件支持optimizer​:sob:

FSRS4remnote导出的CSV结构大概是这样的,我觉得cid是卡片的ID,id是某一次复习的ID,前者一个卡片复习多少次都是同一个ID,后者每次复习ID都不一样。两个ID似乎都是unix时间戳,前一个是创建时间的时间戳,后一个是复习时间的时间戳
image
按理说,只要照着导出的CSV按照相同的格式导出就行,id用复习的时间转换成UNIX时间戳,cid的话,我猜想可以用卡片在插件里的ID的哈希替代。

但用remnote的optimizer又要再转手一次,后边我请教下他,看能不直接输出一个日志文件,在他的fsrs4anki_optimizer上跑

用remnote的optimizer倒也不算是又转手一次,毕竟都是叶大写的,代码大部分也都一样,不过remnote的optimizer确实更新的比FSRS4ANKI的optimizer慢不少,估计FSRS4.0算法的支持也会晚一些。

这个问题已经改发布了

Optimizer 用的都是同一个包,同步更新的。另外 Anki 导出的数据库,Optimizer 在预处理的时候也是要转成 csv 的。

1 个赞

感谢叶学委的回复,但看你的optimizer中,说是生成的./revlog_history.tsv,点开这个链接后并没有看到示例文件(我没有使用Anki,无法自己导出数据跑一个 :sweat_smile:)。

另外,请教下,表格文件的各列含义(df.columns = ['id', 'cid', 'usn', 'r', 'ivl', 'last_ivl', 'factor', 'time', 'type']
比如,id 是每次的复习的时间(单位s),cid是首次复习时间?

希望能抽空完整说明下,最好带有示例表格文件 :pray:

老哥你得点回复,不然楼上是收不到邮箱的消息提醒的。

是点的回复叶学委,但似乎论坛没按点的方式回复。。。。呵呵了