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 # → 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 ## 4. Der Arbeitsablauf im Überblick
@ -213,10 +223,10 @@ versteht `abschrift_korrigieren.py`.
Soll die Original-Untertiteldatei (`.vtt`, mit Zeitstempeln) erhalten bleiben: Soll die Original-Untertiteldatei (`.vtt`, mit Zeitstempeln) erhalten bleiben:
```bash ```bash
./yt_untertitel.py -u 'https://www.youtube.com/watch?v=rm6lADgf6GQ' -n Lahnstein -d testdaten ./yt_untertitel.py -u 'https://www.youtube.com/watch?v=rm6lADgf6GQ' -n Lahnstein -d untertitel
# → testdaten/Lahnstein.de-orig.vtt # → untertitel/Lahnstein.de-orig.vtt
./vtt2txt.py -i testdaten/Lahnstein.de-orig.vtt ./vtt2txt.py -i untertitel/Lahnstein.de-orig.vtt
# → testdaten/Lahnstein.de-orig.txt # → untertitel/Lahnstein.de-orig.txt
``` ```
Achtung: `yt_untertitel.py` nimmt ohne `-l` Deutsch (`de`), nicht die 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. Das gemeinsame Glossar zuerst angeben, damit seine Ersetzungen zuerst greifen.
Im Programmordner liegen Beispiele: `krone-schmalz.glossar.txt` (gemeinsam), Im Programmordner liegen Beispiele: `krone-schmalz.glossar.txt` (gemeinsam),
`ramstein.glossar.txt`, `magdeburg.glossar.txt`, `lahnstein.glossar.txt` `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` ### 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 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.“, am Satzende, und Abschnitt für Abschnitt korrigiert. Abkürzungen wie „z. B.“,
„Dr.“, „bzw.“ und Ordnungszahlen wie „2. Weltkrieg“ gelten dabei nicht als „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, 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). 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 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: Dasselbe in Einzelschritten, wenn die VTT-Datei erhalten bleiben soll:
```bash ```bash
./yt_untertitel.py -u 'https://www.youtube.com/watch?v=rm6lADgf6GQ' -n Lahnstein -d testdaten ./yt_untertitel.py -u 'https://www.youtube.com/watch?v=rm6lADgf6GQ' -n Lahnstein -d untertitel
./vtt2txt.py -i testdaten/Lahnstein.de-orig.vtt ./vtt2txt.py -i untertitel/Lahnstein.de-orig.vtt
./abschrift_korrigieren.py -i testdaten/Lahnstein.de-orig.txt ./abschrift_korrigieren.py -i untertitel/Lahnstein.de-orig.txt
``` ```
Der Schritt über `vtt2txt.py` ist optional: `abschrift_korrigieren.py` nimmt auch die 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 ```bash
./extract_text.py -u 'https://www.youtube.com/watch?v=0LmCveTM788' ./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 # → 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 -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 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 ./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 ```bash
./yt_untertitel.py -u URL # → <Kanal>_<Titel>_<Datum>.de-orig.vtt ./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 | | Option | Bedeutung |
@ -274,7 +274,9 @@ Blöcken korrigiert.
3. **Korrektur:** Der Text wird in Abschnitte von ca. 1200 Wörtern geteilt (immer 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 am Satzende; Abkürzungen wie „z. B.“, „Dr.“, „bzw.“ und Ordnungszahlen wie
„2. Weltkrieg“ zählen nicht als Satzende) und abschnittsweise vom Modell „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, 4. **Wortzahl-Prüfung:** Weicht die Wortzahl eines Abschnitts um mehr als 5 % ab,
gibt es eine Warnung (mögliche Auslassungen oder Ergänzungen). gibt es eine Warnung (mögliche Auslassungen oder Ergänzungen).
5. **Absätze:** Das Modell nennt nur Satznummern, an denen ein Absatz beginnt; der 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. 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 rede.txt -k rede.korrigiert.txt -g krone-schmalz.glossar.txt
-k testdaten/Lahnstein.de-orig.korrigiert.txt -g krone-schmalz.glossar.txt # → rede.glossar.entwurf.txt
# → testdaten/Lahnstein.de-orig.glossar.entwurf.txt ./glossar_vorschlag.py -i tests/daten/beispiel.de.txt # an der Beispielrede ausprobieren
``` ```
| Option | Bedeutung | | Option | Bedeutung |
@ -446,27 +448,36 @@ Rede dauert mit `qwen3:32b` vollständig auf einer RTX 3090 etwa 6–8 Minuten.
python3 -m pytest python3 -m pytest
``` ```
Die Tests (325, ohne die lokalen Reden 318) brauchen weder Ollama noch Netz: Modellaufrufe und `yt-dlp` werden Die Tests brauchen weder Ollama noch Netz: Modellaufrufe und `yt-dlp` werden durch
durch Fakes ersetzt. `tests/test_abschrift_korrigieren.py` prüft Abschnittsbildung, Fakes ersetzt. Als Text dient die erfundene Beispielrede in `tests/daten/` (siehe
Satzgrenzen (Abkürzungen und Ordnungszahlen sind kein Satzende), Glossar (inkl. [Testdaten](#testdaten)). In einem frischen Klon laufen 318 Tests, 7 werden
„jede Ersetzung im Glossar einer Rede trifft diese Rede, jede im gemeinsamen Glossar übersprungen; sie prüfen die Glossare der echten Reden und laufen nur, wenn diese
trifft mindestens eine“), Streaming-Auswertung, Absatzgliederung (Text bleibt lokal in `testdaten/` liegen (dann 325).
unverändert, 3–10 Sätze), Verbinden kurzer Absätze (Modell wird nur gefragt, wenn
beide Nachbarn passen), Zwischenspeicher/Fortsetzen, Zeitauswahl, Sprachen und die `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. Kommandozeile.
`tests/test_glossar_vorschlag.py` prüft Filter (nur Funde im Text, keine bekannten), `tests/test_glossar_vorschlag.py` prüft Filter (nur Funde im Text, keine bekannten),
Ausgabeformat (gültiges Glossar, Unsicheres auskommentiert) und Zwischenspeicher. Ausgabeformat (gültiges Glossar, Unsicheres auskommentiert) und Zwischenspeicher.
`tests/test_aenderungen.py` prüft den Wortvergleich (Satzzeichen, Groß-/Kleinschreibung `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, und „z. B.“ zählen nicht), die Liste „Zu prüfen“ (Gründe, Wortformen, Füllwörter je
fehlende Wortliste) und den HTML-Bericht (vollständiger Text, Absätze, Escaping). 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. Die Tests nutzen eine kleine eigene Wortliste statt der des Systems.
`tests/test_extract_text.py` prüft den Gesamtablauf URL → Text, Sprachwahl `tests/test_extract_text.py` prüft den Gesamtablauf URL → Text, Sprachwahl
(Original-Audio, manuell vor automatisch) und Fehlerfälle. (Original-Audio, manuell vor automatisch) und Fehlerfälle.
`tests/test_yt_untertitel.py` prüft Spurauswahl, Aufruf von `yt-dlp` und `tests/test_yt_untertitel.py` prüft Spurauswahl, Aufruf von `yt-dlp` und
Fehlerfälle (ohne Netz, `yt-dlp` wird durch Fakes ersetzt). Fehlerfälle (ohne Netz, `yt-dlp` wird durch Fakes ersetzt).
`tests/test_vtt2txt.py` prüft die VTT-Umwandlung: die Beispiel-`.vtt` (und lokal `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 jede Rede in `testdaten/`) ergibt genau die zugehörige `.txt`, echte Wiederholungen
Untertiteln ohne rollendes Fenster, dazu Zeitauswahl, Muster, Ausgabeverzeichnis und bleiben erhalten, auch bei Untertiteln ohne rollendes Fenster, dazu Zeitauswahl
(mit Hinweis bei Bereichen über das Ende hinaus), Muster, Ausgabeverzeichnis und
Fehlerfälle. Fehlerfälle.
## Zwischenstände ## Zwischenstände