Backend: regeln.py (Lernregeln zentral), Stats O(n), GET /guides/locks, _norm_titel gehärtet

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
team3
2026-06-12 08:08:26 +02:00
parent 5702108d28
commit f4c16eed84
4 changed files with 127 additions and 78 deletions

View File

@@ -4,14 +4,22 @@ Kein Zustand, keine IO — überall gefahrlos importierbar.
"""
import re
import unicodedata
_CATEGORIES = ("KERN", "WICHTIG", "REST") # nur noch für den Altformat-Reader
def _norm_titel(s: str) -> str:
"""Normalisiert einen Titel für den Schlüssel-Vergleich."""
s = re.sub(r"[`'\"<>]", "", s)
return re.sub(r"\s+", " ", s).strip().lower()
"""Normalisiert einen Titel für den Schlüssel-Vergleich.
NFKC + casefold fangen Unicode-Varianten; Anführungszeichen, Markdown-
Emphasis und Dash-Varianten kommen aus KI-Output in allen Spielarten.
"""
s = unicodedata.normalize("NFKC", s)
s = re.sub(r"[`'\"<>„“”‚’«»*_]", "", s)
s = re.sub(r"[–—‐]", "-", s)
s = re.sub(r"\s+", " ", s).strip().strip(".:;").strip()
return s.casefold()
def _titel(entry: str) -> str: