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:
parent
3da372a941
commit
1e3c813137
1 changed files with 862 additions and 14 deletions
65
README.md
65
README.md
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue