feat: Glossar-Entwurf aus Rohtext und Korrekturlauf (glossar_vorschlag.py)

- Das Modell sucht abschnittsweise vermutete Hörfehler (Namen, Orte,
  Fremdwörter, Komposita); nur Funde, die wörtlich im Rohtext stehen
- Sichere Funde als Einträge, unsichere auskommentiert („# ?“)
- -k: Änderungen eines Korrekturlaufs, immer auskommentiert, da oft
  zusammenhangsabhängig
- -g: vorhandene Glossare werden vorher angewendet und nicht erneut vorgeschlagen
- Modellantworten im Zwischenspeicher <Entwurf>.parts/

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Dieter Schlüter 2026-10-10 20:02:39 +02:00
commit bc09ddf3bf

View file

@ -13,6 +13,7 @@ Die Werkzeuge sind einzeln oder hintereinander nutzbar:
| `vtt2txt.py` | VTT in eine Rohabschrift (Text) umwandeln |
| `rede_korrigieren.py` | Rohabschrift (oder VTT direkt) mit dem Sprachmodell korrigieren |
| `aenderungen.py` | Änderungsbericht: was hat das Modell gegenüber dem Rohtext geändert? |
| `glossar_vorschlag.py` | Glossar-Entwurf: vermutete Hörfehler bei Namen und Begriffen |
## Voraussetzungen
@ -199,6 +200,40 @@ und Hörfehler eines Redners und eines je Rede. Beispiel zu den Testdaten:
`magdeburg.glossar.txt`. Das gemeinsame Glossar zuerst angeben, damit seine
Ersetzungen vor den speziellen greifen.
### Glossar-Entwurf: `glossar_vorschlag.py`
Ein Glossar von Hand zu erstellen heißt, den ganzen Rohtext zu lesen. Den ersten
Entwurf liefert das Skript:
1. Das Modell sucht abschnittsweise vermutete Hörfehler: Namen, Orte, Fremdwörter,
Fachbegriffe und falsch zusammen- oder getrennt geschriebene Wörter. Behalten werden
nur Funde, die wörtlich im Rohtext stehen. Sichere Funde sind aktive Einträge,
unsichere stehen auskommentiert als `# ? falsch => richtig`.
2. Mit `-k` kommen die Wörter dazu, die ein Korrekturlauf geändert hat. Diese sind
alle auskommentiert, denn vieles davon hängt vom Zusammenhang ab (`das → dass`)
und wäre als feste Ersetzung falsch.
Einträge aus den mit `-g` angegebenen Glossaren werden vorher angewendet und nicht
erneut vorgeschlagen.
```bash
./glossar_vorschlag.py -i testdaten/Lahnstein.de-orig.txt \
-k testdaten/Lahnstein.de-orig.korrigiert.txt -g krone-schmalz.glossar.txt
# → testdaten/Lahnstein.de-orig.glossar.entwurf.txt
```
| Option | Bedeutung |
|---|---|
| `-i`, `--input` | Rohabschrift (`.txt` oder `.vtt`), Pflicht |
| `-k`, `--korrigiert` | korrigierter Text eines Laufs (optional) |
| `-g`, `--glossar` | vorhandene Glossare, mehrfach möglich |
| `-o`, `--output` | Entwurf; Standard: `<Eingabe ohne Endung>.glossar.entwurf.txt` |
| `-m`, `--model` | Ollama-Modell; Standard: `qwen3:32b` |
Der Entwurf ist ein Ausgangspunkt, kein fertiges Glossar: jeden Eintrag prüfen,
Brauchbares ins Glossar der Rede (oder ins gemeinsame) übernehmen. Die Modellantworten
werden in `<Entwurf>.parts/` zwischengespeichert.
## Testdaten
`testdaten/` enthält drei Reden, jeweils als automatische YouTube-Untertitel
@ -228,6 +263,8 @@ Die Tests brauchen kein Ollama: Modellaufrufe werden durch Fakes ersetzt. Geprü
werden Abschnittsbildung, Glossar (inkl. „jede Ersetzung im Glossar einer Rede trifft
diese Rede, jede im gemeinsamen Glossar trifft mindestens eine“), Streaming-Auswertung, Absatzgliederung (Text bleibt
unverändert, 3–10 Sätze), Zwischenspeicher/Fortsetzen und die Kommandozeile.
`tests/test_glossar_vorschlag.py` prüft Filter (nur Funde im Text, keine bekannten),
Ausgabeformat (gültiges Glossar, Unsicheres auskommentiert) und Zwischenspeicher.
`tests/test_aenderungen.py` prüft den Wortvergleich (Satzzeichen, Groß-/Kleinschreibung
und „z. B.“ zählen nicht) und den HTML-Bericht (vollständiger Text, Absätze, Escaping).
`tests/test_extract_text.py` prüft den Gesamtablauf URL → Text, Sprachwahl