fix: glossar_vorschlag.py schickt keine Zeit-Überschriften ans Modell

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Dieter Schlüter 2026-10-11 20:16:21 +02:00
commit 5e9a11d0f4
3 changed files with 35 additions and 3 deletions

View file

@ -329,7 +329,9 @@ des Modells sind oft falsch (Lahnstein: `Deckmäntelchen → Deckmäntel`), und
falsche feste Ersetzung verdirbt den Text unbemerkt. Zum Übernehmen `# ? ` entfernen.
Einträge aus den mit `-g` angegebenen Glossaren werden vorher angewendet und nicht
erneut vorgeschlagen.
erneut vorgeschlagen. Zeit-Überschriften von Ausschnitten
(`[00:04:57 - 00:06:04]`, siehe [Zeitauswahl](#zeitauswahl--s--e--z)) werden aus
Roh- und korrigiertem Text entfernt; das Modell bekommt sie nicht zu sehen.
```bash
./glossar_vorschlag.py -i testdaten/Lahnstein.de-orig.txt \

View file

@ -15,6 +15,7 @@ from rede_korrigieren import (
MODEL, apply_replacements, chat_request, check_ollama, ollama_open, read_glossary,
split_chunks,
)
from vtt2txt import split_segments
SYSTEM = """Du suchst Hörfehler in der automatischen Abschrift einer deutschen Rede.
@ -116,6 +117,11 @@ def model_suggestions(text, model, cache_dir, known):
return found
def plain_text(text):
"""Running text without time headers ("[00:04:57 - 00:06:04]") of excerpts."""
return " ".join(" ".join(body for _, body in split_segments(text)).split())
def contains(words, part):
"""Is `part` a contiguous run of `words`?"""
return any(words[i:i + len(part)] == part for i in range(len(words) - len(part) + 1))
@ -213,7 +219,7 @@ def parse_args():
def main():
args = parse_args()
text = " ".join(read_raw(args.input).split())
text = plain_text(read_raw(args.input))
if not text:
raise SystemExit("Die Eingabedatei ist leer.")
@ -234,7 +240,7 @@ def main():
changes = None
if args.korrigiert:
corrected = args.korrigiert.read_text(encoding="utf-8")
corrected = plain_text(args.korrigiert.read_text(encoding="utf-8"))
changes = correction_changes(raw, corrected, replacements, set(suggestions))
args.output.parent.mkdir(parents=True, exist_ok=True)

View file

@ -136,3 +136,27 @@ def test_cli_missing_file(monkeypatch, capsys):
with pytest.raises(SystemExit):
run_main(monkeypatch, "-i", "fehlt.txt")
assert "Datei nicht gefunden" in capsys.readouterr().err
def test_time_headers_never_reach_model_or_changes(tmp_path, monkeypatch):
raw = tmp_path / "rede.txt"
raw.write_text(
"[00:04:59 - 00:06:04]\nDer Kremmel\nist da.\n\n[00:09:58 - 00:12:02]\nHerr Grotzki auch.\n",
encoding="utf-8",
)
corrected = tmp_path / "rede.korrigiert.txt"
corrected.write_text(
"[00:04:59 - 00:06:04]\n\nDer Kreml ist da.\n\n[00:09:58 - 00:12:02]\n\n"
"Herr Grotzki auch.\n",
encoding="utf-8",
)
model = fake_model([])
monkeypatch.setattr(urllib.request, "urlopen", model)
out = tmp_path / "entwurf.txt"
run_main(monkeypatch, "-i", raw, "-k", corrected, "-o", out)
sent = model.calls[0]["messages"][1]["content"]
assert sent == "Der Kremmel ist da. Herr Grotzki auch."
draft = out.read_text(encoding="utf-8")
assert "# ? Kremmel => Kreml (1×)" in draft
assert "00:0" not in draft.replace(str(raw), "")