open-spaced-repetition / py-fsrs

Python Package for FSRS
https://pypi.org/project/fsrs/
MIT License
147 stars 23 forks source link

希望添加获取retrievability数值 #8

Closed ishiko732 closed 1 year ago

ishiko732 commented 1 year ago

我想显示FSRS的DSR数据,通过card.stabilitycard.difficulty可以获得S、D数据。但是R需要使用公式: $$R(t,S) = 0.9^{\frac{t}{S}}$$ 进行计算,对于不熟悉FSRS公式的人来言可能不知道t,s分别代表什么,希望添加一个函数来获取召回概率。

结构希望是:

    def retrievability(self, card: Card, now: datetime) -> str | None:
        pass

又或者提供一个直接显示当前DSR的函数?

ishiko732 commented 1 year ago

我用TypeScript写了类似的方法:add retrievability function

L-M-Sherlock commented 1 year ago

好,今晚实现一下

L-M-Sherlock commented 1 year ago

咕了,今晚忙着查bug,明天再弄

ishiko732 commented 1 year ago

咕了,今晚忙着查bug,明天再弄

🤣好吧,要不帮我看看ts-fsrs实现的有没有问题:

    retrievability = (card: Card, now: dayjs.Dayjs):undefined|string => {
        if (card.state !== State.Review){
            return undefined;
        }
        const t = now.diff(dayjs(card.last_review), "days")
        return (this.current_retrievability(t,card.stability)*100).toFixed(2)+'%';
    }
    current_retrievability(t: number, s: number):number{
        return Math.exp(Math.log(0.9) * t / s)
    }

https://github.com/ishiko732/ts-fsrs/blob/547bf3c09dba2b390daf3a233a62fa89144bce55/src/fsrs/fsrs.ts#L61-L67 https://github.com/ishiko732/ts-fsrs/blob/547bf3c09dba2b390daf3a233a62fa89144bce55/src/fsrs/fsrs.ts#L203-L205

L-M-Sherlock commented 1 year ago

这个 t 是取整的还是连续的?

ishiko732 commented 1 year ago

这个 t 是取整的还是连续的?

取整的

L-M-Sherlock commented 1 year ago

那这个 diff 是算两个日期之间的天数差,还是先算相对时间,再取整? 两者的区别在于,前者会把 1 号 23 点和 2 号 0 点之间的天数差计算为 1 天,而后者会算作 0 天。

ishiko732 commented 1 year ago

那这个 diff 是算两个日期之间的天数差,还是先算相对时间,再取整? 两者的区别在于,前者会把 1 号 23 点和 2 号 0 点之间的天数差计算为 1 天,而后者会算作 0 天。

是后者

L-M-Sherlock commented 1 year ago

我不太确定 python 那边是哪一种,明天确认后给你答复。

L-M-Sherlock commented 1 year ago

Commit: https://github.com/open-spaced-repetition/py-fsrs/commit/d6ff8af9e245a5d5f37bdefaa67d444392903e04

ishiko732 commented 1 year ago

Commit: d6ff8af

comment: r109421525 个人认为当this.state != State.Review返回None这样改比较好

L-M-Sherlock commented 1 year ago

Commit: https://github.com/open-spaced-repetition/py-fsrs/commit/ea1d03aac28e425544b198f18b485765d0273e55

ishiko732 commented 1 year ago

Commit: https://github.com/open-spaced-repetition/py-fsrs/commit/ea1d03aac28e425544b198f18b485765d0273e55

嗯,感觉这样实现不错。