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:
parent
0bf42dee74
commit
5e9a11d0f4
3 changed files with 35 additions and 3 deletions
|
|
@ -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 \
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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), "")
|
||||
|
|
|
|||
Loading…
Reference in a new issue