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.
|
falsche feste Ersetzung verdirbt den Text unbemerkt. Zum Übernehmen `# ? ` entfernen.
|
||||||
|
|
||||||
Einträge aus den mit `-g` angegebenen Glossaren werden vorher angewendet und nicht
|
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
|
```bash
|
||||||
./glossar_vorschlag.py -i testdaten/Lahnstein.de-orig.txt \
|
./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,
|
MODEL, apply_replacements, chat_request, check_ollama, ollama_open, read_glossary,
|
||||||
split_chunks,
|
split_chunks,
|
||||||
)
|
)
|
||||||
|
from vtt2txt import split_segments
|
||||||
|
|
||||||
SYSTEM = """Du suchst Hörfehler in der automatischen Abschrift einer deutschen Rede.
|
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
|
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):
|
def contains(words, part):
|
||||||
"""Is `part` a contiguous run of `words`?"""
|
"""Is `part` a contiguous run of `words`?"""
|
||||||
return any(words[i:i + len(part)] == part for i in range(len(words) - len(part) + 1))
|
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():
|
def main():
|
||||||
args = parse_args()
|
args = parse_args()
|
||||||
|
|
||||||
text = " ".join(read_raw(args.input).split())
|
text = plain_text(read_raw(args.input))
|
||||||
if not text:
|
if not text:
|
||||||
raise SystemExit("Die Eingabedatei ist leer.")
|
raise SystemExit("Die Eingabedatei ist leer.")
|
||||||
|
|
||||||
|
|
@ -234,7 +240,7 @@ def main():
|
||||||
|
|
||||||
changes = None
|
changes = None
|
||||||
if args.korrigiert:
|
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))
|
changes = correction_changes(raw, corrected, replacements, set(suggestions))
|
||||||
|
|
||||||
args.output.parent.mkdir(parents=True, exist_ok=True)
|
args.output.parent.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
|
||||||
|
|
@ -136,3 +136,27 @@ def test_cli_missing_file(monkeypatch, capsys):
|
||||||
with pytest.raises(SystemExit):
|
with pytest.raises(SystemExit):
|
||||||
run_main(monkeypatch, "-i", "fehlt.txt")
|
run_main(monkeypatch, "-i", "fehlt.txt")
|
||||||
assert "Datei nicht gefunden" in capsys.readouterr().err
|
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