docs: README und Bedienungsanleitung auf den Stand nach der Testdaten-Umstellung

- Beispiele schreiben nicht mehr nach testdaten/ (jetzt nur für lokale
  echte Reden), das glossar_vorschlag-Beispiel läuft auch im frischen Klon.
- Bedienungsanleitung: Ausprobieren mit der Beispielrede (gemessen: 2:32
  Minuten mit qwen3:32b), Beispielglossar, Namensregel des Prompts.
- README: Namensregel im Ablauf, Testbeschreibung mit Beispielrede,
  übersprungenen Rede-Tests, Handarbeitsschutz, Wortformen, Bereichshinweis.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Dieter Schlüter 2026-10-11 22:41:26 +02:00
commit 3be1ff8058
2 changed files with 51 additions and 26 deletions

View file

@ -149,6 +149,16 @@ Mit eigenem Dateinamen:
# → lahnstein.korrigiert.txt, lahnstein.txt (Rohtext), lahnstein.aenderungen.html
```
**Ausprobieren ohne YouTube:** Im Ordner `tests/daten/` liegt eine frei erfundene
Beispielrede (Festrede zum Jubiläum der Gemeinde „Auental“) mit typischen Hörfehlern
und einem passenden Glossar. Ein Lauf dauert etwa zwei bis drei Minuten und zeigt alle
Ergebnisse, auch den Änderungsbericht:
```bash
./abschrift_korrigieren.py -i tests/daten/beispiel.de.txt -g tests/daten/beispiel.glossar.txt -o beispiel.korrigiert.txt
# → beispiel.korrigiert.txt, beispiel.aenderungen.html
```
---
## 4. Der Arbeitsablauf im Überblick
@ -213,10 +223,10 @@ versteht `abschrift_korrigieren.py`.
Soll die Original-Untertiteldatei (`.vtt`, mit Zeitstempeln) erhalten bleiben:
```bash
./yt_untertitel.py -u 'https://www.youtube.com/watch?v=rm6lADgf6GQ' -n Lahnstein -d testdaten
# → testdaten/Lahnstein.de-orig.vtt
./vtt2txt.py -i testdaten/Lahnstein.de-orig.vtt
# → testdaten/Lahnstein.de-orig.txt
./yt_untertitel.py -u 'https://www.youtube.com/watch?v=rm6lADgf6GQ' -n Lahnstein -d untertitel
# → untertitel/Lahnstein.de-orig.vtt
./vtt2txt.py -i untertitel/Lahnstein.de-orig.vtt
# → untertitel/Lahnstein.de-orig.txt
```
Achtung: `yt_untertitel.py` nimmt ohne `-l` Deutsch (`de`), nicht die
@ -295,7 +305,9 @@ Namen und Hörfehler) plus eines **je Beitrag**:
Das gemeinsame Glossar zuerst angeben, damit seine Ersetzungen zuerst greifen.
Im Programmordner liegen Beispiele: `krone-schmalz.glossar.txt` (gemeinsam),
`ramstein.glossar.txt`, `magdeburg.glossar.txt`, `lahnstein.glossar.txt`
(je eine Rede) und `iamfabian.glossar.txt` (Kanal über KI-Coding-Tools).
(je eine Rede) und `iamfabian.glossar.txt` (Kanal über KI-Coding-Tools). Ein kleines,
leicht nachvollziehbares Glossar zur Beispielrede steht in
`tests/daten/beispiel.glossar.txt`.
### 6.3 Entwurf vom Modell: `glossar_vorschlag.py`
@ -365,7 +377,9 @@ Statt `-i rede.txt` geht auch `-i rede.de.vtt` (Untertiteldatei) oder
4. **Korrektur:** Der Text wird in Abschnitte von etwa 1200 Wörtern geteilt, immer
am Satzende, und Abschnitt für Abschnitt korrigiert. Abkürzungen wie „z. B.“,
„Dr.“, „bzw.“ und Ordnungszahlen wie „2. Weltkrieg“ gelten dabei nicht als
Satzende.
Satzende. Das Modell ist angewiesen, nichts zu ergänzen, auch keine Vornamen oder
Titel aus dem Glossar: Steht dort „Alexander Dobrindt“, bleibt ein gesagtes
„Dobrindt“ trotzdem „Dobrindt“.
5. **Wortzahl-Prüfung:** Weicht die Wortzahl eines Abschnitts um mehr als 5 % ab,
warnt das Programm (das Modell könnte etwas ausgelassen oder ergänzt haben).
6. **Absätze:** Das Modell nennt die Sätze, mit denen ein neuer Absatz beginnt; der

View file

@ -58,9 +58,9 @@ Oder in zwei Schritten, um den Rohtext vorher anzusehen:
Dasselbe in Einzelschritten, wenn die VTT-Datei erhalten bleiben soll:
```bash
./yt_untertitel.py -u 'https://www.youtube.com/watch?v=rm6lADgf6GQ' -n Lahnstein -d testdaten
./vtt2txt.py -i testdaten/Lahnstein.de-orig.vtt
./abschrift_korrigieren.py -i testdaten/Lahnstein.de-orig.txt
./yt_untertitel.py -u 'https://www.youtube.com/watch?v=rm6lADgf6GQ' -n Lahnstein -d untertitel
./vtt2txt.py -i untertitel/Lahnstein.de-orig.vtt
./abschrift_korrigieren.py -i untertitel/Lahnstein.de-orig.txt
```
Der Schritt über `vtt2txt.py` ist optional: `abschrift_korrigieren.py` nimmt auch die
@ -76,7 +76,7 @@ Zwischenschritt im temporären Verzeichnis. Die Spurwahl ist dieselbe wie bei
```bash
./extract_text.py -u 'https://www.youtube.com/watch?v=0LmCveTM788'
# → John_Mearsheimer_Offensive_Realism_Episode_1_Origins_of_the_War_In_Ukraine_2026-07-30.txt
./extract_text.py -u URL -l de -o testdaten/rede.txt # Sprache und Ziel
./extract_text.py -u URL -l de -o texte/rede.txt # Sprache und Ziel
./extract_text.py -u URL -f -o rede.txt # lesbarer Fließtext
./extract_text.py -u URL -z 0:03:17-0:05:25 # nur ein Ausschnitt
./extract_text.py -u URL -z 00:05-00:06 00:10-00:12 00:25 # mehrere Bereiche
@ -131,7 +131,7 @@ Region gefunden: `-l en` findet manuelle Untertitel `en-US`.
```bash
./yt_untertitel.py -u URL # → <Kanal>_<Titel>_<Datum>.de-orig.vtt
./yt_untertitel.py -u URL -n Lahnstein -d testdaten # → testdaten/Lahnstein.de-orig.vtt
./yt_untertitel.py -u URL -n Lahnstein -d untertitel # → untertitel/Lahnstein.de-orig.vtt
```
| Option | Bedeutung |
@ -274,7 +274,9 @@ Blöcken korrigiert.
3. **Korrektur:** Der Text wird in Abschnitte von ca. 1200 Wörtern geteilt (immer
am Satzende; Abkürzungen wie „z. B.“, „Dr.“, „bzw.“ und Ordnungszahlen wie
„2. Weltkrieg“ zählen nicht als Satzende) und abschnittsweise vom Modell
korrigiert. Fortschritt wird live angezeigt.
korrigiert. Fortschritt wird live angezeigt. Der Prompt verbietet Ergänzungen,
ausdrücklich auch Vornamen, Titel oder Namensteile aus dem Glossar, die nicht
gesagt wurden (sonst wurde aus „Dobrindt“ gern „Alexander Dobrindt“).
4. **Wortzahl-Prüfung:** Weicht die Wortzahl eines Abschnitts um mehr als 5 % ab,
gibt es eine Warnung (mögliche Auslassungen oder Ergänzungen).
5. **Absätze:** Das Modell nennt nur Satznummern, an denen ein Absatz beginnt; der
@ -396,9 +398,9 @@ erneut vorgeschlagen. Zeit-Überschriften von Ausschnitten
Roh- und korrigiertem Text entfernt; das Modell bekommt sie nicht zu sehen.
```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
./glossar_vorschlag.py -i rede.txt -k rede.korrigiert.txt -g krone-schmalz.glossar.txt
# → rede.glossar.entwurf.txt
./glossar_vorschlag.py -i tests/daten/beispiel.de.txt # an der Beispielrede ausprobieren
```
| Option | Bedeutung |
@ -446,27 +448,36 @@ Rede dauert mit `qwen3:32b` vollständig auf einer RTX 3090 etwa 6–8 Minuten.
python3 -m pytest
```
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
trifft mindestens eine“), Streaming-Auswertung, Absatzgliederung (Text bleibt
unverändert, 3–10 Sätze), Verbinden kurzer Absätze (Modell wird nur gefragt, wenn
beide Nachbarn passen), Zwischenspeicher/Fortsetzen, Zeitauswahl, Sprachen und die
Die Tests brauchen weder Ollama noch Netz: Modellaufrufe und `yt-dlp` werden durch
Fakes ersetzt. Als Text dient die erfundene Beispielrede in `tests/daten/` (siehe
[Testdaten](#testdaten)). In einem frischen Klon laufen 318 Tests, 7 werden
übersprungen; sie prüfen die Glossare der echten Reden und laufen nur, wenn diese
lokal in `testdaten/` liegen (dann 325).
`tests/test_abschrift_korrigieren.py` prüft Abschnittsbildung, Satzgrenzen
(Abkürzungen und Ordnungszahlen sind kein Satzende), Glossar (jede Ersetzung des
Beispielglossars trifft die Beispielrede; lokal zusätzlich: jede Ersetzung im
Glossar einer Rede trifft diese Rede, jede im gemeinsamen Glossar mindestens eine),
Prompts (keine Namensteile ergänzen), Streaming-Auswertung, Absatzgliederung (Text
bleibt unverändert, 3–10 Sätze), Verbinden kurzer Absätze (Modell wird nur gefragt,
wenn beide Nachbarn passen), Zwischenspeicher/Fortsetzen, Schutz von Handarbeit
(`.neu.korrigiert.txt`, `--ueberschreiben`), Zeitauswahl, Sprachen 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), die Liste „Zu prüfen“ (Gründe, Ausnahmen, Glossar,
fehlende Wortliste) und den HTML-Bericht (vollständiger Text, Absätze, Escaping).
und „z. B.“ zählen nicht), die Liste „Zu prüfen“ (Gründe, Wortformen, Füllwörter je
Sprache, Glossar-Schreibweisen, fehlende Wortliste) und den HTML-Bericht
(vollständiger Text, Absätze, Escaping, Reihenfolge).
Die Tests nutzen eine kleine eigene Wortliste statt der des Systems.
`tests/test_extract_text.py` prüft den Gesamtablauf URL → Text, Sprachwahl
(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: 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
jede Rede in `testdaten/`) ergibt genau die zugehörige `.txt`, echte Wiederholungen
bleiben erhalten, auch bei Untertiteln ohne rollendes Fenster, dazu Zeitauswahl
(mit Hinweis bei Bereichen über das Ende hinaus), Muster, Ausgabeverzeichnis und
Fehlerfälle.
## Zwischenstände