test: eigene Beispielrede statt echter Reden, testdaten/ nur noch lokal

Die Abschriften echter Reden sind urheberrechtlich geschützt und gehören
nicht in ein öffentliches Repository. Die Tests nutzen jetzt eine frei
erfundene Festrede (tests/daten/beispiel.de.vtt/.txt, YouTube-Format mit
rollendem Fenster) mit eigenem Glossar. testdaten/ steht in .gitignore;
liegen die Reden dort lokal, laufen die Tests ihrer Glossare zusätzlich,
sonst werden sie übersprungen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Dieter Schlüter 2026-10-11 22:14:49 +02:00
commit 93fb99eda2

View file

@ -415,24 +415,30 @@ werden in `<Entwurf>.parts/` zwischengespeichert.
## Testdaten
`testdaten/` enthält drei Reden, jeweils als automatische YouTube-Untertitel
(`.vtt`, Original) und daraus mit `vtt2txt.py` gewonnener Rohtext (`.txt`, Eingabe
für das Programm):
**Im Repository:** `tests/daten/` enthält eine frei erfundene Beispielrede
(Festrede zum Jubiläum der Gemeinde „Auental“; Ort und Personen gibt es nicht), als
Untertitel im Format der YouTube-Auto-Untertitel (`beispiel.de.vtt`, rollendes
Fenster, Wort-Zeitstempel), daraus gewonnener Rohtext (`beispiel.de.txt`) und ein
passendes Glossar (`beispiel.glossar.txt`) für die eingebauten Hörfehler wie
„Auen Tal“ oder „Haber Kamp“. Die Tests nutzen nur diese Daten.
```bash
./abschrift_korrigieren.py -i tests/daten/beispiel.de.txt -g tests/daten/beispiel.glossar.txt -o /tmp/beispiel.korrigiert.txt
```
**Nur lokal:** Echte Reden gehören wegen des Urheberrechts nicht ins Repository;
`testdaten/` ist deshalb in `.gitignore`. Liegen dort die drei Reden, mit denen das
Programm entwickelt wurde, laufen zusätzlich die Tests, die ihre Glossare prüfen;
sonst werden diese übersprungen. Die Glossare dazu sind im Repository:
- `ramstein.de.*`: Rede über die US Air Base Ramstein (Glossar `ramstein.glossar.txt`)
- `magdeburg.de-orig.*`: Rede in Magdeburg (Glossar `magdeburg.glossar.txt`)
- `Lahnstein.de-orig.*`: Rede „Respekt geht anders“ in Lahnstein (Glossar
`lahnstein.glossar.txt`, erstellt mit Hilfe von `glossar_vorschlag.py`)
`lahnstein.glossar.txt`, erstellt mit Hilfe von `glossar_vorschlag.py`), zu laden mit
`./yt_untertitel.py -u 'https://www.youtube.com/watch?v=rm6lADgf6GQ' -n Lahnstein -d testdaten`
Alle drei mit dem gemeinsamen `krone-schmalz.glossar.txt` davor.
```bash
./vtt2txt.py -i "testdaten/*.vtt" # erzeugt alle .txt neu
./abschrift_korrigieren.py -i testdaten/ramstein.de.txt -g krone-schmalz.glossar.txt -g ramstein.glossar.txt
# → testdaten/ramstein.de.korrigiert.txt (nicht versioniert)
```
Ein Lauf dauert mit `qwen3:32b` vollständig auf einer RTX 3090 etwa 6 Minuten.
Alle drei mit dem gemeinsamen `krone-schmalz.glossar.txt` davor. Ein Lauf über eine
Rede dauert mit `qwen3:32b` vollständig auf einer RTX 3090 etwa 6–8 Minuten.
## Tests
@ -440,7 +446,7 @@ Ein Lauf dauert mit `qwen3:32b` vollständig auf einer RTX 3090 etwa 6 Minuten.
python3 -m pytest
```
Die Tests (323) brauchen weder Ollama noch Netz: Modellaufrufe und `yt-dlp` werden
Die Tests (325, ohne die lokalen Reden 318) brauchen weder Ollama noch Netz: Modellaufrufe und `yt-dlp` werden
durch Fakes ersetzt. `tests/test_abschrift_korrigieren.py` prüft Abschnittsbildung,
Satzgrenzen (Abkürzungen und Ordnungszahlen sind kein Satzende), Glossar (inkl.
„jede Ersetzung im Glossar einer Rede trifft diese Rede, jede im gemeinsamen Glossar
@ -458,8 +464,8 @@ Die Tests nutzen eine kleine eigene Wortliste statt der des Systems.
(Original-Audio, manuell vor automatisch) und Fehlerfälle.
`tests/test_yt_untertitel.py` prüft Spurauswahl, Aufruf von `yt-dlp` und
Fehlerfälle (ohne Netz, `yt-dlp` wird durch Fakes ersetzt).
`tests/test_vtt2txt.py` prüft die VTT-Umwandlung: jede `.vtt` in `testdaten/`
ergibt genau die zugehörige `.txt`, echte Wiederholungen bleiben erhalten, auch bei
`tests/test_vtt2txt.py` prüft die VTT-Umwandlung: die Beispiel-`.vtt` (und lokal
jede Rede in `testdaten/`) ergibt genau die zugehörige `.txt`, echte Wiederholungen bleiben erhalten, auch bei
Untertiteln ohne rollendes Fenster, dazu Zeitauswahl, Muster, Ausgabeverzeichnis und
Fehlerfälle.