update
This commit is contained in:
@@ -16,13 +16,11 @@ FAKE_TEXT = f"{SATZ_DFA}\n\n{SATZ_POTENZ}\n\n{SATZ_PUMPING}\n"
|
||||
|
||||
ATOME = [
|
||||
{"titel": "Deterministischer endlicher Automat", "typ": "begriff",
|
||||
"definition": SATZ_DFA, "zitat": SATZ_DFA, "level": "E", "braucht": []},
|
||||
"definition": SATZ_DFA, "zitat": SATZ_DFA, "level": "E"},
|
||||
{"titel": "Potenzmengenkonstruktion", "typ": "verfahren",
|
||||
"definition": SATZ_POTENZ, "zitat": SATZ_POTENZ, "level": "M",
|
||||
"braucht": ["Deterministischer endlicher Automat"]},
|
||||
"definition": SATZ_POTENZ, "zitat": SATZ_POTENZ, "level": "M"},
|
||||
{"titel": "Pumping-Lemma", "typ": "aussage",
|
||||
"definition": SATZ_PUMPING, "zitat": SATZ_PUMPING, "level": "S",
|
||||
"braucht": ["Deterministischer endlicher Automat"]},
|
||||
"definition": SATZ_PUMPING, "zitat": SATZ_PUMPING, "level": "S"},
|
||||
]
|
||||
PUNKTE = [("Endliche Automaten", (SATZ_DFA, SATZ_POTENZ)),
|
||||
("Nachweis von Nicht-Regularität", (SATZ_PUMPING,))]
|
||||
@@ -218,31 +216,10 @@ def _kapitel_schnitt(prompt: str):
|
||||
for n, g in enumerate(dict.fromkeys(grenzen))]
|
||||
|
||||
|
||||
def _zyklus(prompt: str):
|
||||
m = re.search(r"^(\d+)→(\d+):", _text_nach(prompt, "ZYKLUS:"), re.MULTILINE)
|
||||
return {"von": int(m.group(1)), "zu": int(m.group(2))} if m else {}
|
||||
|
||||
|
||||
def _braucht_aufloesung(prompt: str):
|
||||
# je ANGABE den Kandidaten mit den meisten geteilten Tokens (Substring, ≥4 Zeichen)
|
||||
# wählen, sonst null — spiegelt den Substring-Prefilter der Auflösung.
|
||||
def toks(s):
|
||||
return {t for t in re.findall(r"\w+", s.lower()) if len(t) >= 4}
|
||||
out = []
|
||||
bloecke = re.split(r"ANGABE (\d+):", prompt)[1:]
|
||||
for i in range(0, len(bloecke), 2):
|
||||
n, body = int(bloecke[i]), bloecke[i + 1]
|
||||
mp = re.search(r"Voraussetzung „([^“]+)", body)
|
||||
ph = mp.group(1) if mp else ""
|
||||
pl, pt = ph.lower(), toks(ph)
|
||||
ranked = []
|
||||
for kid, ktitel in re.findall(r"- atom (\d+): (.+?) —", body):
|
||||
geteilt = {t for t in toks(ktitel) if t in pl} | {t for t in pt if t in ktitel.lower()}
|
||||
if geteilt:
|
||||
ranked.append((-len(geteilt), len(ktitel), int(kid)))
|
||||
ranked.sort()
|
||||
out.append({"phrase": n, "atom": ranked[0][2] if ranked else None})
|
||||
return out
|
||||
def _baustein_ordnung(prompt: str):
|
||||
nummern = [int(i) for i in re.findall(r"^(\d+): ", _text_nach(prompt, "BAUSTEINE"),
|
||||
re.MULTILINE)]
|
||||
return nummern # Identität: Prior-Ordnung ist im Fake die Lehr-Reihenfolge
|
||||
|
||||
|
||||
def _writer(prompt: str):
|
||||
@@ -303,7 +280,7 @@ _HANDLER = {
|
||||
"Aussagen-Generate": _aussagen_generate, "Aussagen-Verify": _aussagen_verify,
|
||||
"Lernziele": _lernziele, "Kapitel-Intro": _kapitel_intro,
|
||||
"Kapitel-Schnitt": _kapitel_schnitt, "Level-Kalibrierung": _level_kalibrierung,
|
||||
"Kanten-Zyklus": _zyklus, "Braucht-Aufloesung": _braucht_aufloesung,
|
||||
"Baustein-Ordnung": _baustein_ordnung,
|
||||
"Guide-Writer": _writer, "Guide-Pruefer": _pruefer,
|
||||
"Guide-Pruefer-Urteil": _pruefer_urteil, "Guide-Fix": _fix,
|
||||
"QA-Guide-Falsch": _qa_falsch, "QA-Guide-Falsch-Check": _qa_falsch_check,
|
||||
|
||||
Reference in New Issue
Block a user