educationai
Swift-Package für Lern-Apps: FSRS-6-Spaced-Repetition, Lernwarteschlange, Abgleich getippter Antworten und Quizze.
Lizenz: MIT
Zusammenfassung
- Lernlogik für Karteikarten-Apps: FSRS-6-Spaced-Repetition, eine Lernwarteschlange, Bewertung getippter Antworten und Quizze.
- Die Tests spielen 2.400 Wiederholungen aus py-fsrs 6.3.2 in acht Konfigurationen nach und vergleichen die Ergebnisse nach jeder Wiederholung.
- SM2Scheduler hält SM-2-Daten nutzbar und konvertiert SM-2-Karten nach FSRS, wobei das Fälligkeitsdatum jeder Karte erhalten bleibt.
- Es läuft auf dem Gerät nur mit Foundation, ist für Swift 6 Strict Concurrency geschrieben und enthält kein neuronales Netz.
- 124 Tests in 11 Suites bestanden beim Tag v2.0.0 mit Swift 6.4 auf macOS 27.0.1.
EducationAI enthält die Lernlogik einer Karteikarten- oder Lern-App. FSRSScheduler entscheidet mit FSRS-6, dem Gedächtnismodell hinter dem FSRS-Scheduler von Anki, wann jede Karte wiederkommt; seine Tests vergleichen 2.400 Wiederholungen mit der Referenzimplementierung py-fsrs 6.3.2. SM2Scheduler hält SM-2-Daten lauffähig und konvertiert sie zu FSRS. Um den Scheduler herum gibt es eine Lernwarteschlange, die Bewertung getippter Antworten mit Tippfehlertoleranz, Quizze, einen Schwierigkeitsanpasser, eine Arbeitslastprognose, Wiederholungsstatistiken und Lernserien. Es läuft auf dem Gerät, nutzt nur Foundation und ist für Swift 6 strict concurrency geschrieben. Ein neuronales Netz steckt nicht darin: FSRS ist ein statistisches Gedächtnismodell.
Funktionen
- FSRS-6 gegen die Referenz geprüft: Die Tests spielen 2.400 von py-fsrs 6.3.2 berechnete Wiederholungen in acht Konfigurationen ab und vergleichen nach jeder Wiederholung Stabilität, Schwierigkeit, Fälligkeitsdatum und Abrufwahrscheinlichkeit
- Lern- und Wiederlernschritte, gewünschte Retention, maximales Intervall, Intervall-Fuzz und eigene Gewichte (21 aus FSRS-6 oder 19 aus FSRS-5); eine Vorschau aller vier Bewertungen für die Antwort-Buttons
- SM-2 wie veröffentlicht sowie eine Konvertierung von SM-2-Karten zu FSRS, die das Fälligkeitsdatum jeder Karte beibehält
- Bewertung getippter Antworten, die Groß- und Kleinschreibung, Akzente, Zeichenbreite und Satzzeichen ignoriert, ohne von der Gerätesprache abzuhängen, Tippfehler abhängig von der Antwortlänge verzeiht und bei feindlichen Eingaben nur begrenzten Aufwand betreibt
- Multiple-Choice- und Tipp-Quizze, aus Karten erzeugt; jedes Ergebnis schlägt eine Bewertung für den Scheduler vor, und ein gespeichertes Quiz wird beim Laden erneut bewertet
- Eine Lernwarteschlange mit Tageslimits, einer Prognose pro Tag, Retentionsstatistiken, Serien nach den Kalendertagen der Lernenden und einem Schwierigkeitsanpasser, der die Trefferquote in einem Zielband hält
- Sendable-, Codable-Werttypen: Jede Funktion nimmt das Datum entgegen, mit dem sie arbeitet, Zufall stammt aus einem Generator, den Sie seeden können, und gespeicherte Werte werden vor der Verwendung geprüft, statt abzustürzen
- Keine Abhängigkeiten, nur Foundation; DocC-Referenz mit vier Anleitungen und die Beispiel-App StudyDeck für iOS und macOS
Schnellstart
1struct FlashcardsView: View {2 @State private var cards = [3 Flashcard(front: "Capital of Japan", back: "Tokyo"),4 Flashcard(front: "Capital of Kenya", back: "Nairobi"),5 Flashcard(front: "Capital of Peru", back: "Lima")6 ]7 @State private var showsAnswer = false8 private let scheduler = FSRSScheduler.default9 10 var body: some View {11 if let card = StudyQueue.cards(from: cards).first,12 let index = cards.firstIndex(where: { $0.id == card.id }) {13 VStack(spacing: 24) {14 Text(card.front).font(.title)15 if showsAnswer {16 Text(card.back).font(.title2).bold()17 HStack {18 ForEach(Rating.allCases, id: \.self) { rating in19 Button(String(describing: rating).capitalized) {20 if let outcome = try? scheduler.review(card.review, rating: rating) {21 cards[index].review = outcome.state22 }23 showsAnswer = false24 }25 .buttonStyle(.bordered)26 }27 }28 } else {29 Button("Show Answer") { showsAnswer = true }30 .buttonStyle(.borderedProminent)31 }32 }33 .padding()34 } else {35 Text("All done for now")36 }37 }38}Installation
Xcode (File › Add Package Dependencies…)
1https://github.com/muhittincamdali/educationai.gitSwift Package Manager (Package.swift)
1dependencies: [2 .package(url: "https://github.com/muhittincamdali/educationai.git", from: "2.0.0")3],4targets: [5 .target(name: "YourApp", dependencies: [6 .product(name: "EducationAI", package: "educationai")7 ])8]Screenshots




Zeitleiste
Repository eröffnet; 1.0.0 am 7. August getaggt: eine EducationAI-Klasse mit Lernmodellen, abhängig von Alamofire, RxSwift, SnapKit und SDWebImage
Ohne Abhängigkeiten neu geschrieben als SM-2-Scheduler sowie Quiz-, Fortschritts-, Empfehlungs- und Gamification-Engines
Eine Abhängigkeit auf einen lokalen Ordner (../SwiftAI) und Platzhaltertypen für „neural tutor“ und „enterprise“ wurden hinzugefügt; das Package ließ sich für niemand anderen mehr auflösen
2.0.0: neu aufgebaut um einen FSRS-6-Scheduler, der py-fsrs 6.3.2 entspricht; der Code vom Juni und jeder 1.x-Typ entfernt