Giter Club home page Giter Club logo

obsidian-review's Introduction

Obsidian Review Plugin

基于简化了的 Anki 算法,安排你的复习笔记的计划

安装与使用

启用该插件

  • npm run build

  • 复制 manifest.json, main.jsyour-vault/.obsidian/plugins/obsidian-review

  • 打开 obsidian ,启用 review 插件

  • 效果如下:

    image-20220225225956597

编写template文件

  • 安装 templater-obsidian 插件

  • 编写 template 文件,至少包含以下语句:

    ---
    tags: []
    review: [2.5, 1.0, <% tp.file.creation_date('YYYY-MM-DD') %>]
    ---
    
  • 其中 review[0] 表示初始熟悉度, review[1] 表示初始复习间隔, review[2] 表示下次复习时间

  • 应用该 template 于你想要复习的文件,否则无法正常使用 review 插件

编写review.md

该文件会展示出你待复习的笔记列表,以及复习情况的统计,注意该文件名称必须叫做review.md

安装 dataviewjs 插件,编写 dataviewjs 代码

// 基础过滤得到的笔记
let basicNotes = dv
  .pages('"" and -"assets"')
  .where(b => b.sr);

// 待复习的笔记
let toBeReviewedNotes = basicNotes
  .where(b => b.sr[2] <= dv.date('today'));

// 今日复习的笔记
let todayReviewedNotes = basicNotes
  .where(b => b.ctime - 0 != dv.date('today') || b.sr[2] - 0 != dv.date('tomorrow')) // 不是今天创建的笔记
  .where(b => b.sr[2] == dv.duration(`${Math.ceil(b.sr[1])}day`) + dv.date('today'));

// 待复习笔记的数目
let waitReviewCount = toBeReviewedNotes
  .values
  .reduce((sum, b) => sum + 1, 0);

// 今日复习的笔记的数目
let todayReviewedCount = todayReviewedNotes
  .values
  .reduce((sum, b) => sum + 1, 0);

// 今日复习的笔记的大小(KB)
let todayReviewedSize = (todayReviewedNotes
  .values
  .reduce((sum, b) => sum + b.file.size, 0) / 1024).toFixed(0);

let paragraph = dv.paragraph(`➤ **<code>NOTE</code>** ➤ **<code>${waitReviewCount} + ${todayReviewedCount} | ${todayReviewedSize}KB</code>**`);

let showSurprise = false;
paragraph.addEventListener("click", (evt) => {
    if (!showSurprise) {
        paragraph.innerHTML += " <b><code>Surprise ヽ(´▽`)/</code></b>";
        showSurprise = true;
    }
});

// 待复习笔记的列表
dv.table(["Pending Notes", "size"], toBeReviewedNotes
  .sort(b => b.sr[2])
  .limit(10)
  .map(b => [b.file.link, (b.file.size / 1024).toFixed(1)])
);

效果如下:

image-20240317211813759

算法

anki 的基础上进行简化:

  • easy(ease, interval) => [ease * 1.2, interval * newEase * 1.3]
  • good(ease, interval) => [ease, interval * newEase]
  • hard(ease, interval) => [ease * 0.85 < 1.3 ? 1.3 : ease * 0.85, interval * 0.5 < 1.0 ? 1.0 : interval * 0.5]
  • delay :推迟7天复习

obsidian-review's People

Contributors

shui-dun avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.