refactor: rede_korrigieren.py → abschrift_korrigieren.py, Texte neutral
Das Programm verarbeitet beliebige gesprochene Beiträge (Reden, Vorträge, Interviews, Videos). Prompts und Texte sprechen von „Beitrag“ statt „Rede“; README-Titel passend zum Projektverzeichnis youtube_abschrift_korrigieren. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
955bdc2659
commit
5a59baef88
1 changed files with 183 additions and 177 deletions
68
README.md
68
README.md
|
|
@ -1,8 +1,10 @@
|
|||
# youtube_rede_korrigieren
|
||||
# youtube_abschrift_korrigieren
|
||||
|
||||
Korrigiert automatische Abschriften deutscher (und englischer) Reden (z. B.
|
||||
YouTube-Untertitel als Text) mit einem lokalen Sprachmodell über Ollama: Rechtschreibung, Satzzeichen,
|
||||
Korrigiert automatische Abschriften gesprochener Beiträge – Reden, Vorträge,
|
||||
Interviews, Videos, auf Deutsch oder Englisch (z. B. YouTube-Untertitel als Text) –
|
||||
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`.
|
||||
|
||||
Die Werkzeuge sind einzeln oder hintereinander nutzbar:
|
||||
|
||||
|
|
@ -11,7 +13,7 @@ Die Werkzeuge sind einzeln oder hintereinander nutzbar:
|
|||
| `extract_text.py` | YouTube-URL → Textdatei in einem Schritt (die beiden folgenden zusammen) |
|
||||
| `yt_untertitel.py` | Untertitel eines YouTube-Videos als VTT herunterladen |
|
||||
| `vtt2txt.py` | VTT in eine Rohabschrift (Text) umwandeln |
|
||||
| `rede_korrigieren.py` | Rohabschrift (oder VTT direkt) mit dem Sprachmodell korrigieren |
|
||||
| `abschrift_korrigieren.py` | Rohabschrift (oder VTT direkt) mit dem Sprachmodell korrigieren |
|
||||
| `aenderungen.py` | Änderungsbericht: was hat das Modell gegenüber dem Rohtext geändert? |
|
||||
| `glossar_vorschlag.py` | Glossar-Entwurf: vermutete Hörfehler bei Namen und Begriffen |
|
||||
|
||||
|
|
@ -21,7 +23,7 @@ Die Werkzeuge sind einzeln oder hintereinander nutzbar:
|
|||
- für den Download: [yt-dlp](https://github.com/yt-dlp/yt-dlp) (`pip install yt-dlp`)
|
||||
- Ollama auf `127.0.0.1:11434` mit dem Modell `qwen3:32b`
|
||||
(`ollama pull qwen3:32b`)
|
||||
`rede_korrigieren.py` und `glossar_vorschlag.py` prüfen beides vor dem Start und
|
||||
`abschrift_korrigieren.py` und `glossar_vorschlag.py` prüfen beides vor dem Start und
|
||||
brechen sonst mit einem Hinweis ab (`sudo systemctl start ollama` bzw. `ollama pull …`)
|
||||
|
||||
Für gute Geschwindigkeit muss das Modell komplett in den Grafikspeicher passen.
|
||||
|
|
@ -34,7 +36,7 @@ der Lauf wird etwa 12-mal langsamer.
|
|||
Von der YouTube-URL zum korrigierten Text in einem Befehl:
|
||||
|
||||
```bash
|
||||
./rede_korrigieren.py -u 'https://www.youtube.com/watch?v=rm6lADgf6GQ' -o lahnstein.korrigiert.txt
|
||||
./abschrift_korrigieren.py -u 'https://www.youtube.com/watch?v=rm6lADgf6GQ' -o lahnstein.korrigiert.txt
|
||||
# → lahnstein.korrigiert.txt, lahnstein.txt (Rohtext), lahnstein.aenderungen.html
|
||||
```
|
||||
|
||||
|
|
@ -42,7 +44,7 @@ Oder in zwei Schritten, um den Rohtext vorher anzusehen:
|
|||
|
||||
```bash
|
||||
./extract_text.py -u 'https://www.youtube.com/watch?v=rm6lADgf6GQ' -o lahnstein.txt
|
||||
./rede_korrigieren.py -i lahnstein.txt # → lahnstein.korrigiert.txt
|
||||
./abschrift_korrigieren.py -i lahnstein.txt # → lahnstein.korrigiert.txt
|
||||
```
|
||||
|
||||
Dasselbe in Einzelschritten, wenn die VTT-Datei erhalten bleiben soll:
|
||||
|
|
@ -50,10 +52,10 @@ 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
|
||||
./rede_korrigieren.py -i testdaten/Lahnstein.de-orig.txt
|
||||
./abschrift_korrigieren.py -i testdaten/Lahnstein.de-orig.txt
|
||||
```
|
||||
|
||||
Der Schritt über `vtt2txt.py` ist optional: `rede_korrigieren.py` nimmt auch die
|
||||
Der Schritt über `vtt2txt.py` ist optional: `abschrift_korrigieren.py` nimmt auch die
|
||||
`.vtt` direkt. Die `.txt` lohnt sich, um den Rohtext anzusehen oder ein Glossar
|
||||
daraus zu erstellen.
|
||||
|
||||
|
|
@ -70,7 +72,7 @@ Zwischenschritt im temporären Verzeichnis. Die Spurwahl ist dieselbe wie bei
|
|||
./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
|
||||
./rede_korrigieren.py -i rede.txt # → rede.korrigiert.txt
|
||||
./abschrift_korrigieren.py -i rede.txt # → rede.korrigiert.txt
|
||||
```
|
||||
|
||||
| Option | Bedeutung |
|
||||
|
|
@ -80,12 +82,12 @@ Zwischenschritt im temporären Verzeichnis. Die Spurwahl ist dieselbe wie bei
|
|||
| `-o`, `--output` | Ausgabedatei (Verzeichnisse werden angelegt, vorhandene Datei überschrieben); Standard: `<Kanal>_<Titel>_<Datum>.txt`, siehe unten |
|
||||
| `-z`, `--zeitraeume` | nur Untertitel in diesen Bereichen, siehe [Zeitauswahl](#zeitauswahl--z) |
|
||||
| `--exakt` | genau an den Zeiten schneiden statt an Satzgrenzen |
|
||||
| `-f`, `--fliesstext` | Fließtext, auf 80 Zeichen umbrochen (Wörter werden nie getrennt), statt der kurzen Untertitelzeilen; beides versteht `rede_korrigieren.py` |
|
||||
| `-f`, `--fliesstext` | Fließtext, auf 80 Zeichen umbrochen (Wörter werden nie getrennt), statt der kurzen Untertitelzeilen; beides versteht `abschrift_korrigieren.py` |
|
||||
|
||||
### Standard-Dateinamen für YouTube-Videos
|
||||
|
||||
Ohne `-o` bzw. `-n` bilden `extract_text.py`, `yt_untertitel.py` und
|
||||
`rede_korrigieren.py -u` den Namen aus Kanal, Titel und Hochladedatum:
|
||||
`abschrift_korrigieren.py -u` den Namen aus Kanal, Titel und Hochladedatum:
|
||||
|
||||
| Video | Name |
|
||||
|---|---|
|
||||
|
|
@ -136,7 +138,7 @@ Eine vorhandene Datei gleichen Namens wird überschrieben.
|
|||
### Untertitel umwandeln: `vtt2txt.py`
|
||||
|
||||
Macht aus VTT-Untertiteln (z. B. von `yt-dlp --write-auto-subs`) die Rohabschrift
|
||||
für `rede_korrigieren.py`: Zeitstempel und Tags werden entfernt. YouTube-Auto-Untertitel
|
||||
für `abschrift_korrigieren.py`: Zeitstempel und Tags werden entfernt. YouTube-Auto-Untertitel
|
||||
zeigen ein rollendes Fenster, jeder Block wiederholt das Ende des vorigen. Übernommen
|
||||
wird nur, was nach dieser Überlappung neu ist; sagt der Redner eine Zeile wirklich
|
||||
zweimal, bleibt sie zweimal erhalten.
|
||||
|
|
@ -160,7 +162,7 @@ zweimal, bleibt sie zweimal erhalten.
|
|||
|
||||
#### Zeitauswahl (`-z`)
|
||||
|
||||
Gilt gleich für `vtt2txt.py`, `extract_text.py` und `rede_korrigieren.py`.
|
||||
Gilt gleich für `vtt2txt.py`, `extract_text.py` und `abschrift_korrigieren.py`.
|
||||
|
||||
| Zeit | Bedeutung |
|
||||
|---|---|
|
||||
|
|
@ -206,25 +208,25 @@ Der Dateiname enthält immer die angegebenen Zeiten.
|
|||
Eine fehlerhafte Datei (keine Untertitel, nicht UTF-8) wird gemeldet, die übrigen
|
||||
werden trotzdem umgewandelt; der Exit-Code ist dann 1.
|
||||
|
||||
### Abschrift korrigieren: `rede_korrigieren.py`
|
||||
### Abschrift korrigieren: `abschrift_korrigieren.py`
|
||||
|
||||
```bash
|
||||
./rede_korrigieren.py -i rede.txt # → rede.korrigiert.txt
|
||||
./rede_korrigieren.py -i rede.txt -o out/rede.txt # eigene Ausgabedatei
|
||||
./rede_korrigieren.py -i rede.txt -g rede.glossar.txt # mit Glossar
|
||||
./rede_korrigieren.py -i rede.txt -g allgemein.glossar.txt -g rede.glossar.txt # kombiniert
|
||||
./rede_korrigieren.py -i rede.de.vtt # VTT direkt → rede.de.korrigiert.txt
|
||||
./rede_korrigieren.py -u URL # YouTube → <Kanal>_<Titel>_<Datum>.korrigiert.txt
|
||||
./rede_korrigieren.py -i speech.txt -l en # englische Rede
|
||||
./rede_korrigieren.py -u URL -z 0:03:17-0:05:25 # nur ein Ausschnitt des Videos
|
||||
./rede_korrigieren.py -u URL -z 00:05-00:06 00:25 # mehrere Bereiche, eine Datei
|
||||
./abschrift_korrigieren.py -i rede.txt # → rede.korrigiert.txt
|
||||
./abschrift_korrigieren.py -i rede.txt -o out/rede.txt # eigene Ausgabedatei
|
||||
./abschrift_korrigieren.py -i rede.txt -g rede.glossar.txt # mit Glossar
|
||||
./abschrift_korrigieren.py -i rede.txt -g allgemein.glossar.txt -g rede.glossar.txt # kombiniert
|
||||
./abschrift_korrigieren.py -i rede.de.vtt # VTT direkt → rede.de.korrigiert.txt
|
||||
./abschrift_korrigieren.py -u URL # YouTube → <Kanal>_<Titel>_<Datum>.korrigiert.txt
|
||||
./abschrift_korrigieren.py -i talk.txt -l en # englischer Beitrag
|
||||
./abschrift_korrigieren.py -u URL -z 0:03:17-0:05:25 # nur ein Ausschnitt des Videos
|
||||
./abschrift_korrigieren.py -u URL -z 00:05-00:06 00:25 # mehrere Bereiche, eine Datei
|
||||
```
|
||||
|
||||
| Option | Bedeutung |
|
||||
|---|---|
|
||||
| `-i`, `--input` | Eingabedatei: Rohabschrift (`.txt`) oder Untertitel (`.vtt`, wird wie mit `vtt2txt.py` umgewandelt) |
|
||||
| `-u`, `--url` | statt `-i`: YouTube-URL; Untertitel wie bei `extract_text.py`. Der Rohtext wird neben der Ausgabe gespeichert (`rede.korrigiert.txt` → `rede.txt`, sonst `<Name>.roh.txt`), eine vorhandene, abweichende Datei aber nie überschrieben |
|
||||
| `-l`, `--lang` | Sprache der Rede: `de` oder `en` (auch mit Region, z. B. `en-US`); wählt Prompts und Prüfmarke. Mit `-u` zugleich die Sprache der Untertitel. Standard: `de`, mit `-u` die Sprache des Original-Audios |
|
||||
| `-l`, `--lang` | Sprache des Beitrags: `de` oder `en` (auch mit Region, z. B. `en-US`); wählt Prompts und Prüfmarke. Mit `-u` zugleich die Sprache der Untertitel. Standard: `de`, mit `-u` die Sprache des Original-Audios |
|
||||
| `-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 |
|
||||
|
|
@ -260,13 +262,13 @@ Zweifelhafte Stellen markiert das Modell als `Lesart [prüfen: Originalwortlaut]
|
|||
in englischen Reden als `reading [check: original wording]`.
|
||||
|
||||
Englische Reden bekommen eigene, englische Prompts für Korrektur und Absätze
|
||||
(`SYSTEM_EN` usw. in `rede_korrigieren.py`); dort entfernt das Modell auch die
|
||||
(`SYSTEM_EN` usw. in `abschrift_korrigieren.py`); dort entfernt das Modell auch die
|
||||
Sprecherwechsel-Marken `>>` der YouTube-Auto-Untertitel. Weitere Sprachen lassen sich
|
||||
über das Wörterbuch `PROMPTS` ergänzen.
|
||||
|
||||
## Änderungsbericht
|
||||
|
||||
Jeder Lauf von `rede_korrigieren.py` schreibt neben die Ausgabe
|
||||
Jeder Lauf von `abschrift_korrigieren.py` schreibt neben die Ausgabe
|
||||
`<Name>.aenderungen.html` (aus `rede.korrigiert.txt` wird `rede.aenderungen.html`)
|
||||
und zeigt die häufigsten Änderungen in der Konsole. Der Bericht enthält:
|
||||
|
||||
|
|
@ -299,12 +301,12 @@ Multi-Domain Task Force
|
|||
Michael Gorbatschow (Vorname so belassen)
|
||||
```
|
||||
|
||||
Ersetzungen ohne Treffer werden gesammelt gemeldet. Bei einem Glossar für eine
|
||||
einzelne Rede deutet das auf einen Tippfehler hin, bei einem gemeinsamen Glossar ist
|
||||
Ersetzungen ohne Treffer werden gesammelt gemeldet. Bei einem Glossar für einen
|
||||
einzelnen Beitrag deutet das auf einen Tippfehler hin, bei einem gemeinsamen Glossar ist
|
||||
es normal.
|
||||
|
||||
Mehrere Glossare lassen sich kombinieren: ein gemeinsames für wiederkehrende Namen
|
||||
und Hörfehler eines Redners und eines je Rede. Beispiel zu den Testdaten:
|
||||
und Hörfehler eines Redners oder Kanals und eines je Beitrag. Beispiel zu den Testdaten:
|
||||
`krone-schmalz.glossar.txt` (gemeinsam) plus `ramstein.glossar.txt`,
|
||||
`magdeburg.glossar.txt` bzw. `lahnstein.glossar.txt`. Das gemeinsame Glossar zuerst angeben, damit seine
|
||||
Ersetzungen vor den speziellen greifen. Ein weiteres Kanal-Glossar:
|
||||
|
|
@ -347,7 +349,7 @@ Roh- und korrigiertem Text entfernt; das Modell bekommt sie nicht zu sehen.
|
|||
| `-m`, `--model` | Ollama-Modell; Standard: `qwen3:32b` |
|
||||
|
||||
Der Entwurf ist ein Ausgangspunkt, kein fertiges Glossar: jeden Eintrag prüfen,
|
||||
Brauchbares ins Glossar der Rede (oder ins gemeinsame) übernehmen. Die Modellantworten
|
||||
Brauchbares ins Glossar des Beitrags (oder ins gemeinsame) übernehmen. Die Modellantworten
|
||||
werden in `<Entwurf>.parts/` zwischengespeichert.
|
||||
|
||||
## Testdaten
|
||||
|
|
@ -365,7 +367,7 @@ Alle drei mit dem gemeinsamen `krone-schmalz.glossar.txt` davor.
|
|||
|
||||
```bash
|
||||
./vtt2txt.py -i "testdaten/*.vtt" # erzeugt alle .txt neu
|
||||
./rede_korrigieren.py -i testdaten/ramstein.de.txt -g krone-schmalz.glossar.txt -g ramstein.glossar.txt
|
||||
./abschrift_korrigieren.py -i testdaten/ramstein.de.txt -g krone-schmalz.glossar.txt -g ramstein.glossar.txt
|
||||
# → testdaten/ramstein.de.korrigiert.txt (nicht versioniert)
|
||||
```
|
||||
|
||||
|
|
@ -402,7 +404,7 @@ Teil neu berechnet. Den Ordner kann man jederzeit löschen.
|
|||
|
||||
## Einstellungen
|
||||
|
||||
Oben in `rede_korrigieren.py`:
|
||||
Oben in `abschrift_korrigieren.py`:
|
||||
|
||||
| Konstante | Standard | Bedeutung |
|
||||
|---|---|---|
|
||||
|
|
|
|||
Loading…
Reference in a new issue