📝 Description
Note 此包需要一位新的维护者,因为我目前没有足够的时间继续开发 此包。将修改写回 Anki 数据库的功能目前已被禁用, 特别是由于问题 #137。 如果您有兴趣参与,请与我联系!
Anki 是最流行的间隔重复学习 系统之一, pandas 是最流行的用于 数据分析和操作的 python 包。那么还有什么比将 两者结合起来更好的呢?
使用 AnkiPandas,您可以利用 pandas 轻松分析或操作
您的 Anki 闪卡。
Features:
- Select: 使用
pandas轻松选择您的卡片、笔记或 复习记录的任意子集(众多 介绍之一, 官方 文档) - Visualize: 使用 pandas 强大的 内置 工具 或切换到功能更强大的 seaborn(统计分析)或 matplotlib 库
- Manipulate: 对表格应用快速批量操作(例如添加 标签、更改牌组、设置字段内容、暂停卡片、...)或 遍历表格并逐步执行这些操作。 ⚠️ 此功能目前已被禁用,直到 #137 得到解决! ⚠️
- Import and Export: Pandas 可以导出到(以及从)csv、 MS Excel、HTML、JSON、...(io 文档)
Pros:
- 轻松安装:通过 python 包管理器安装 (独立于你的 Anki 安装)
- 简单:只需一行代码即可开始
- 便捷:将有关 卡片、 笔记、 模型、 牌组 等更多信息 汇总在一张表中!
- 文档齐全:文档位于 readthedocs
- 测试完善:拥有 100 多个单元测试以确保一切 正常
替代方案:如果你的主要目标是添加新卡片、模型等, 你也可以查看 genanki 项目。
📦 安装
AnkiPandas 可作为 pypi
包 提供,并可通过 python 包
管理器 进行安装或
升级:
pip3 install --user --upgrade ankipandas
开发安装
对于最新的开发版本,您也可以从该仓库的克隆版本中进行操作:
git clone https://github.com/klieret/ankipandas/
cd ankipandas
pip3 install --user --upgrade --editable .
如果您想帮助进一步开发此软件包,请同时安装 pre-commit 钩子并使用 gitmoji:
pre-commit install
gitmoji -i
🔥 让我们开始吧!
启动过程如下:
from ankipandas import Collection
col = Collection()
并且 col.notes 将是一个包含所有笔记的 dataframe,并附带许多简化操作的方法。类似地,你可以使用 col.cards 或 col.revs 来访问卡片或复习记录。
如果在不提供任何参数的情况下调用 Collection(),它会尝试自行查找你的 Anki 数据库。然而,这可能需要一些时间。为了简化操作,只需提供数据库的路径(或部分路径)以及(如果你有多个用户)你的 Anki 用户名,例如在许多 Linux 安装环境中使用 Collection(".local/share/Anki2/", user="User 1")。
要获取关于每列解释的信息,请使用 print(col.notes.help_cols())。
请查看 文档 以了解有关可用方法的更多信息!
一些基本示例:
📈 分析
更多示例:分析
文档,
使用 AnkiPandas 的项目。
显示所有牌组中每张卡片的复习次数(重复次数)直方图:
col.cards.hist(column="creps", by="cdeck")
以饼图形式显示每副牌中的水蛭数量:
cards = col.cards.merge_notes()
selection = cards[cards.has_tag("leech")]
selection["cdeck"].value_counts().plot.pie()
查找模型 MnemoticModel 中 Mnemotic 字段为空的所有笔记:
notes = col.notes.fields_as_columns()
notes.query("model=='MnemoticModel' and 'Mnemotic'==''")
🛠️ 操作
警告 在 #137 解决之前, 数据库写入功能目前已被禁用。 非常感谢任何帮助!
警告 请务必小心并充分测试! Ankipandas 会在写入之前创建数据库备份,因此您始终可以恢复之前的状态。请确保一切正常运行后再继续正常使用 Anki!
为所有包含
Japanese 和 leech 标签的笔记添加 difficult-japanese 和 marked 标签:
notes = col.notes
selection = notes[notes.has_tags(["Japanese", "leech"])]
selection = selection.add_tag(["difficult-japanese", "marked"])
col.notes.update(selection)
col.write(modify=True) # Overwrites your database after creating a backup!
将模型 LanguageModel 中所有标记为 English 的笔记的 language 字段设置为 English:
notes = col.notes
selection = notes[notes.has_tag(["English"])].query("model=='LanguageModel'").copy()
selection.fields_as_columns(inplace=True)
selection["language"] = "English"
col.notes.update(selection)
col.write(modify=True)
将所有标记为 leech 的卡牌移动到牌组 Leeches Only:
cards = col.cards
selection = cards[cards.has_tag("leech")]
selection["cdeck"] = "Leeches Only"
col.cards.update(selection)
col.write(modify=True)
🐞 故障排除
请参阅文档中的故障排除部分。
💖 贡献
非常感谢您的帮助!建议、错误报告和功能请求最好以 github issues 的形式提交。您也可以 先在 gitter community 中讨论。如果您想 自己编写代码,非常欢迎您提交 pull request!
错误报告和 pull request 将通过 allcontributors bot 的帮助获得署名。
📃 许可证与免责声明
本软件依据 MIT license 授权,并且(尽管已尽力测试)不提供任何保修。 该标志灵感来源于 Anki logo (license)以及 pandas 包的标志 (license2)。 本库及其作者与 主要的 Anki 或 pandas 项目没有任何关联。
✨ 贡献者
感谢这些出色的人(emoji key):
Blocked 🐛 | CalculusAce 🐛 | Francis Tseng 🐛 💻 | Keith Hughitt 🐛 | Miroslav Šedivý ⚠️ 💻 | Nicholas Bollweg 💻 | Thomas Brownback 🐛 |
eshrh 📖 | exc4l 🐛 💻 | p4nix 🐛 |
本项目遵循 all-contributors 规范。欢迎任何形式的贡献!
