Skip to content

Java-FSRS 是一个基于 Rust 版本 FSRS (Free Spaced Repetition System,自由间隔重复系统) 开发的 Java 实现。FSRS 是一种基于科学研究的记忆算法,通过优化复习间隔来提高学习效率。该项目通过 JNI 调用 Rust 原生库,为 Java 开发者提供了高性能的间隔重复算法实现。支持自定义参数配置,提供简单易用的 API 接口,适合用于开发学习类应用。

Notifications You must be signed in to change notification settings

Allen123Hao/java-fsrs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Java-FSRS

Java-FSRS 是一个基于 Rust 版本的 FSRS (Free Spaced Repetition System) 开发的 Java 实现。该项目通过 JNI (Java Native Interface) 调用 Rust 原生库,为 Java 开发者提供了 FSRS 算法的便捷使用方式。

特性

  • 基于 Rust 版本的 FSRS 算法实现
  • 通过 JNI 提供高性能的原生调用
  • 支持 Java 17 及以上版本
  • 提供简单易用的 API 接口
  • 完整的日志支持(SLF4J + Logback)

系统要求

  • JDK 17 或更高版本
  • Maven 3.6 或更高版本
  • 支持的操作系统:Linux、macOS、Windows

安装

  1. 克隆项目:
git clone https://github.com/yourusername/java-fsrs.git
cd java-fsrs
  1. 编译项目:
mvn clean install

使用示例

基本用法

import com.hedgie.framework.fsrs.FSRS;
import com.hedgie.framework.fsrs.Card;
import com.hedgie.framework.fsrs.Parameter;
import java.time.Instant;

// 创建 FSRS 实例(使用默认参数)
FSRS fsrs = new FSRS();

// 或者使用自定义参数
double[] w = {0.4, 0.6, 2.4, 5.8, 4.93, 0.94, 0.86, 0.01, 1.49, 0.14, 0.94, 2.18, 0.05, 0.34, 1.26, 0.29, 2.61};
Parameter parameter = new Parameter(
    36500,  // maximumInterval: 最大间隔天数
    0.9,    // requestRetention: 目标记忆保留率
    w,      // w: 算法权重参数
    -0.5,   // decay: 衰减因子
    1.0,    // factor: 难度因子
    true    // enableShortTerm: 是否启用短期记忆
);
FSRS fsrs = new FSRS(parameter);

// 创建卡片
Card card = new Card();
card.setStability(1.0);      // 设置初始稳定性
card.setDifficulty(0.0);     // 设置初始难度
card.setReps(0);            // 设置复习次数
card.setLapses(0);          // 设置遗忘次数
card.setElapsedDays(0);     // 设置已过天数
card.setState(0);           // 设置卡片状态(0: 新卡片)
card.setLastReview(Instant.now().getEpochSecond()); // 设置最后复习时间

// 执行复习
RecordLog recordLog = fsrs.repeat(card, Instant.now());

参数说明

Parameter 参数

  • maximumInterval: 最大间隔天数,默认 36500(约100年)
  • requestRetention: 目标记忆保留率,范围 0-1,默认 0.9
  • w: 算法权重参数数组,影响复习间隔计算
  • decay: 衰减因子,影响记忆强度衰减速度
  • factor: 难度因子,影响难度调整
  • enableShortTerm: 是否启用短期记忆优化

Card 属性

  • stability: 记忆稳定性,表示记忆的牢固程度
  • difficulty: 记忆难度,表示内容的难易程度
  • reps: 复习次数
  • lapses: 遗忘次数
  • elapsedDays: 距离上次复习的天数
  • state: 卡片状态(0: 新卡片,1: 学习,2: 复习)
  • lastReview: 最后复习时间戳
  • due: 下次复习时间戳
  • scheduledDays: 计划复习天数

复习流程示例

// 创建新卡片
Card card = new Card();
card.setStability(1.0);
card.setDifficulty(0.0);
card.setState(0);

// 第一次复习(新卡片)
RecordLog firstReview = fsrs.repeat(card, Instant.now());
System.out.println("第一次复习结果: " + firstReview);

// 更新卡片状态
card.setStability(firstReview.getStability());
card.setDifficulty(firstReview.getDifficulty());
card.setReps(card.getReps() + 1);
card.setLastReview(Instant.now().getEpochSecond());

// 等待一段时间后再次复习
// 假设过了 card.getDue() 天后
RecordLog nextReview = fsrs.repeat(card, Instant.now());
System.out.println("下次复习结果: " + nextReview);

项目结构

java-fsrs/
├── src/
│   ├── main/
│   │   └── java/
│   │       └── com/
│   │           └── hedgie/
│   │               └── framework/
│   │                   └── fsrs/
│   │                       ├── FSRS.java
│   │                       ├── Card.java
│   │                       ├── Parameter.java
│   │                       ├── RecordLog.java
│   │                       ├── ReviewLog.java
│   │                       ├── SchedulingInfo.java
│   │                       └── NativeLibraryLoader.java
│   └── test/
└── rust-lib/
    └── src/

主要类说明

  • FSRS: 核心类,提供 FSRS 算法的主要功能
  • Card: 表示学习卡片,包含卡片状态和复习信息
  • Parameter: 算法参数配置
  • RecordLog: 记录复习结果
  • ReviewLog: 复习日志
  • SchedulingInfo: 调度信息
  • NativeLibraryLoader: 原生库加载器

依赖

  • SLF4J 2.0.4
  • Logback 1.4.5
  • Lombok 1.18.22
  • JUnit 5.10.1 (测试)

许可证

本项目采用 MIT 许可证。详见 LICENSE 文件。

贡献

欢迎提交 Issue 和 Pull Request 来帮助改进项目。

致谢

本项目基于 Rust 版本的 FSRS 实现,感谢原作者的贡献。

About

Java-FSRS 是一个基于 Rust 版本 FSRS (Free Spaced Repetition System,自由间隔重复系统) 开发的 Java 实现。FSRS 是一种基于科学研究的记忆算法,通过优化复习间隔来提高学习效率。该项目通过 JNI 调用 Rust 原生库,为 Java 开发者提供了高性能的间隔重复算法实现。支持自定义参数配置,提供简单易用的 API 接口,适合用于开发学习类应用。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published