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:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user