docs: ausführliche BEDIENUNGSANLEITUNG.md, README auf aktuellem Stand

Die Bedienungsanleitung führt von der Einrichtung über Rohtext, Glossar,
Korrektur und Prüfung des Berichts („Zu prüfen“) bis zum Nachbessern;
dazu Zeitauswahl, englische Beiträge, Dateien, Fortsetzen, Fehlermeldungen
mit Lösungen und eine Kurzreferenz aller Programme.

README: Verweis auf die Anleitung, zerrissene Optionstabelle von
abschrift_korrigieren.py repariert, Ablauf mit Vorprüfung und Blöcken,
Hinweis „05:00 = 5 Stunden“, Tests und Einstellungen ergänzt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Dieter Schlüter 2026-10-11 21:44:40 +02:00
commit 1e3c813137

View file

@ -6,6 +6,11 @@ mit einem lokalen Sprachmodell über Ollama: Rechtschreibung, Satzzeichen,
Hörfehler, Absätze – möglichst wortgetreu, ohne Zusammenfassung oder Glättung.
Das Hauptprogramm ist `abschrift_korrigieren.py`.
Eine ausführliche Anleitung für die Benutzung Schritt für Schritt, mit
Arbeitsablauf, Glossar-Pflege, Prüfung der Ergebnisse und Fehlerbehebung, steht in
der [BEDIENUNGSANLEITUNG.md](BEDIENUNGSANLEITUNG.md). Diese README ist die knappe
technische Übersicht.
Die Werkzeuge sind einzeln oder hintereinander nutzbar:
| Skript | Aufgabe |
@ -176,6 +181,9 @@ Gilt gleich für `vtt2txt.py`, `extract_text.py` und `abschrift_korrigieren.py`.
| `00:20` | Stunden:Minuten, also Minute 20 |
| `25` | Minute 25 |
Achtung: Zwei Zahlen sind Stunden:Minuten, `05:00` ist also Stunde 5, nicht
Minute 5 (dafür `00:05` oder `5`).
| Aufruf | Text |
|---|---|
| `-z 00:05:10` | ab 5:10 bis zum Ende des Videos |
@ -236,6 +244,9 @@ werden trotzdem umgewandelt; der Exit-Code ist dann 1.
| `-o`, `--output` | Ausgabedatei; Standard: `<Eingabe ohne Endung>.korrigiert.txt` neben der Eingabe, mit `-u` `<Kanal>_<Titel>_<Datum>.korrigiert.txt`; mit `-z` zusätzlich die Bereiche im Namen |
| `-z`, `--zeitraeume` | nur diese Bereiche korrigieren, siehe [Zeitauswahl](#zeitauswahl--z); nur mit `.vtt`-Eingabe oder `-u`, da reiner Text keine Zeitstempel hat |
| `--exakt` | genau an den Zeiten schneiden statt an Satzgrenzen |
| `-g`, `--glossar` | Glossar mit festen Ersetzungen und Schreibweisen; mehrfach angeben zum Kombinieren (Ersetzungen in Reihenfolge der Angabe) |
| `-m`, `--model` | Ollama-Modell; Standard: `qwen3:32b` (Konstante `MODEL`) |
| `--kein-bericht` | keinen Änderungsbericht schreiben |
Mit Zeitauswahl wird jeder Bereich als eigener Block korrigiert und gegliedert;
die Überschriften `[00:04:57 - 00:06:04]` bekommt das Modell nicht zu sehen, sie
@ -243,13 +254,13 @@ stehen unverändert als eigene Zeilen im Ergebnis. Zusätzlich weist der Prompt
Modell an, an den Rändern der Ausschnitte nichts zu ergänzen. Eine Rohabschrift
(`.txt`) mit solchen Überschriften, etwa von `vtt2txt.py -z`, wird ebenso in
Blöcken korrigiert.
| `-g`, `--glossar` | Glossar mit festen Ersetzungen und Schreibweisen; mehrfach angeben zum Kombinieren (Ersetzungen in Reihenfolge der Angabe) |
| `-m`, `--model` | Ollama-Modell; Standard: `qwen3:32b` (Konstante `MODEL`) |
| `--kein-bericht` | keinen Änderungsbericht schreiben |
## Ablauf
1. **Fließtext:** Untertitel-Zeilenumbrüche werden entfernt.
0. **Vorprüfung:** Läuft Ollama, ist das Modell installiert? Sonst Abbruch mit
Hinweis, noch vor jedem Download.
1. **Fließtext:** Untertitel-Zeilenumbrüche werden entfernt. Zeit-Überschriften
(`-z`) teilen den Text in Blöcke, die einzeln bearbeitet werden.
2. **Feste Ersetzungen** aus dem Glossar (`falsch => richtig`) werden im Rohtext
angewendet, bevor das Modell ihn sieht.
3. **Korrektur:** Der Text wird in Abschnitte von ca. 1200 Wörtern geteilt (immer
@ -263,9 +274,9 @@ Blöcken korrigiert.
geteilt, Absätze unter 3 Sätzen mit einem Nachbarn verbunden. Passt der kurze
Absatz an beide Nachbarn, entscheidet das Modell nach dem Inhalt, ob er den
vorherigen Gedanken abschließt oder den folgenden einleitet.
6. **Änderungsbericht:** Rohtext (vor dem Glossar) und Ergebnis werden Wort für Wort
verglichen, siehe unten.
verglichen; eigenmächtige Änderungen des Modells kommen in die Liste
„Zu prüfen“, siehe unten.
Zweifelhafte Stellen markiert das Modell als `Lesart [prüfen: Originalwortlaut]`,
in englischen Reden als `reading [check: original wording]`.
@ -412,10 +423,14 @@ Ein Lauf dauert mit `qwen3:32b` vollständig auf einer RTX 3090 etwa 6 Minuten.
python3 -m pytest
```
Die Tests brauchen kein Ollama: Modellaufrufe werden durch Fakes ersetzt. Geprüft
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.
Die Tests (291) 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
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
@ -427,16 +442,20 @@ Die Tests nutzen eine kleine eigene Wortliste statt der des Systems.
`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,
dazu Muster, Ausgabeverzeichnis und Fehlerfälle.
ergibt genau die zugehörige `.txt`, echte Wiederholungen bleiben erhalten, auch bei
Untertiteln ohne rollendes Fenster, dazu Zeitauswahl, Muster, Ausgabeverzeichnis und
Fehlerfälle.
## Zwischenstände
Jeder fertige Abschnitt, jede Absatzgliederung und jede Entscheidung beim
Verbinden kurzer Absätze wird in `<Ausgabe>.parts/` gespeichert. Ein erneuter
Lauf überspringt alles, was schon berechnet ist.
Ändern sich Modell (auch per `-m`), Prompt, Glossar oder Text eines Abschnitts, wird genau dieser
Teil neu berechnet. Den Ordner kann man jederzeit löschen.
Ändern sich Modell (auch per `-m`), Prompt, Glossar oder Text eines Abschnitts, wird
genau dieser Teil neu berechnet. Glossar-Begriffe stehen im Prompt; ein neuer Begriff
lässt deshalb alle Abschnitte neu korrigieren. Den Ordner kann man jederzeit löschen.
`glossar_vorschlag.py` speichert seine Modellantworten ebenso in
`<Entwurf>.parts/`.
## Einstellungen
@ -446,9 +465,27 @@ Oben in `abschrift_korrigieren.py`:
|---|---|---|
| `MODEL` | `qwen3:32b` | Ollama-Modell (Standard für `-m`) |
| `CHUNK_SIZE` | 1200 | Wörter pro Korrekturabschnitt |
| `MAX_EXTRA_WORDS` | 300 | so weit darf ein Abschnitt bis zum nächsten Satzende wachsen |
| `MAX_WORD_DEVIATION` | 0.05 | Warnschwelle Wortzahl |
| `PARAGRAPH_WINDOW` | 150 | Sätze pro Anfrage bei der Absatzgliederung |
| `MAX_PARAGRAPH_SENTENCES` | 10 | längster erlaubter Absatz |
| `MIN_PARAGRAPH_SENTENCES` | 3 | kürzester gewünschter Absatz |
| `NO_SENTENCE_END` | Muster | Abkürzungen, die kein Satzende sind |
In `aenderungen.py`:
| Konstante | Standard | Bedeutung |
|---|---|---|
| `WORDLISTS` | `/usr/share/dict/ngerman`, `…/american-english` | Wortlisten je Sprache |
| `MIN_SIMILARITY` | 0.6 | darunter gilt eine Ersetzung als „stark verändert“ |
| `FILLERS` | äh, ähm, … | Füllwörter, deren Streichung nicht gemeldet wird |
In `vtt2txt.py`:
| Konstante | Standard | Bedeutung |
|---|---|---|
| `MAX_SNAP_SECONDS` | 30 | so weit darf ein Zeitbereich bis zur nächsten Satzgrenze wachsen |
| `ROLLING_SHARE` | 0.5 | ab diesem Anteil sich überlappender Blöcke gilt eine Datei als rollend |
## Bekannte Grenzen