Commit graph

24 commits

Author SHA1 Message Date
3d9a5037c2 feat: Standard-Dateiname aus Kanal, Titel und Datum des Videos
- yt_untertitel.default_name(): <Kanal>_<Titel>_<Datum>, z. B.
  John_Mearsheimer_Offensive_Realism_Episode_1_Origins_of_the_War_In_Ukraine_2026-07-30
- Bindestriche/Punkte im Wort bleiben, Kanal max. 40, Titel max. 60 Zeichen
  an Wortgrenze; ohne Kanal und Titel die Video-ID
- Gilt ohne -o/-n in extract_text.py (statt output.txt), yt_untertitel.py
  und rede_korrigieren.py -u (statt Video-ID)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 21:03:14 +02:00
fb9201b721 feat: englische Reden korrigieren (-l en)
- Prompts je Sprache (PROMPTS): Korrektur, Absatzgliederung, Teilen,
  Glossar-Hinweis; Englisch mit Prüfmarke [check: …] und Entfernen der
  Sprecherwechsel-Marken „>>“
- -l gilt jetzt auch mit -i (Sprache der Rede, Standard de); mit -u wird die
  Sprache des Original-Audios erkannt; nicht unterstützte Sprachen werden
  abgelehnt
- Live geprüft mit 0LmCveTM788 (Mearsheimer): 12 Änderungen, u. a. richtig
  „Vermont“ → „Wehrmacht“, aber falsch „February 25th“ → „24th“ – der
  Änderungsbericht zeigt es

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 20:40:40 +02:00
95bdc660ca fix: Änderungsbericht erkennt Apostrophe im Wort; output/ ignorieren
- „Bahrs“ → „Bahr’s“ ist jetzt eine Änderung; ’ ' ` gelten als gleich,
  Anführungszeichen am Wortrand zählen weiterhin nicht
- Prüfmarken auch englisch: [check: …]
- output/ (eigene Ergebnisse und Testläufe) in .gitignore

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 20:33:04 +02:00
547dcb358d fix: Originalsprache bei Videos mit KI-synchronisierten Tonspuren
Gefunden mit einem englischen Video (0LmCveTM788): ohne -l wurde Arabisch
gewählt, denn jede der 20 Synchron-Tonspuren hat eine eigene „-orig“-Spur.
- original_language(): aus „language“, sonst Tonspur mit „original“, sonst
  die einzige „-orig“-Spur
- Automatische Untertitel nur in der Originalsprache (keine Synchronisation)
- Sprachen auch mit Region: „en“ findet manuelle Untertitel „en-US“

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 20:28:05 +02:00
7e6ffa5899 fix: yt-dlp im temporären Verzeichnis ausführen (Streudatei „3“)
yt-dlp ruft zur Prüfung „ffmpeg -bsfs“ auf; das System-ffmpeg 6.1.1
(Ubuntu) legt dabei eine leere Datei „3“ im Arbeitsverzeichnis an.
yt-dlp läuft jetzt in einem temporären Verzeichnis mit absolutem
Zielpfad, die Datei verschwindet mit dem Verzeichnis.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 20:12:08 +02:00
60c7c10abb feat: Glossar für die Lahnstein-Rede
- lahnstein.glossar.txt: 62 feste Ersetzungen und 11 Hinweise, erstellt aus
  dem Rohtext und dem Entwurf von glossar_vorschlag.py
- krone-schmalz.glossar.txt: weitere Teltschik-Varianten, „von vorne herein“
- Glossar-Tests decken Lahnstein mit ab

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 20:07:13 +02:00
ec5f806a88 fix: Glossar-Entwurf – alles auskommentiert, Korrekturlauf gegen Rohtext
Erkenntnisse aus dem ersten echten Lauf (Lahnstein):
- Auch „sichere“ Funde des Modells sind oft falsch (Deckmäntelchen →
  Deckmäntel, Lemmaß → Lebens); daher alle Einträge auskommentiert,
  sichere zuerst
- -k verglich den Text nach dem Glossar mit einer Korrektur ohne Glossar und
  zeigte verdrehte Paare (Brandt → Brand). Jetzt Vergleich mit dem Rohtext;
  was ein Glossar-Eintrag ganz oder teilweise erledigt, entfällt
- Satzzeichen am Rand werden entfernt, keine Doppelungen mehr

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 20:06:17 +02:00
5a072deca3 feat: rede_korrigieren.py -u URL – von YouTube direkt zum korrigierten Text
- extract_text.fetch_text() aus main() herausgelöst und wiederverwendet
- -u/--url statt -i, -l/--lang für die Sprache (Standard: Original-Audio)
- Ohne -o: <Video-ID>.korrigiert.txt; der Rohtext wird daneben gespeichert,
  eine vorhandene, abweichende Rohtext-Datei aber nie überschrieben

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 20:02:53 +02:00
bc09ddf3bf feat: Glossar-Entwurf aus Rohtext und Korrekturlauf (glossar_vorschlag.py)
- Das Modell sucht abschnittsweise vermutete Hörfehler (Namen, Orte,
  Fremdwörter, Komposita); nur Funde, die wörtlich im Rohtext stehen
- Sichere Funde als Einträge, unsichere auskommentiert („# ?“)
- -k: Änderungen eines Korrekturlaufs, immer auskommentiert, da oft
  zusammenhangsabhängig
- -g: vorhandene Glossare werden vorher angewendet und nicht erneut vorgeschlagen
- Modellantworten im Zwischenspeicher <Entwurf>.parts/

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 20:02:39 +02:00
c1d270bc0e feat: Änderungsbericht Rohtext → Korrektur (aenderungen.py)
- Wortvergleich ohne Groß-/Kleinschreibung, Satzzeichen und „z. B.“-Varianten,
  damit nur echte Wortänderungen auffallen
- HTML-Bericht: Änderungen nach Häufigkeit, korrigierter Text mit markierten
  Ersetzungen (Original dahinter), Einfügungen, Streichungen, Prüfmarken
- rede_korrigieren.py schreibt den Bericht bei jedem Lauf (--kein-bericht)
  und zeigt die häufigsten Änderungen; Vergleich mit dem Rohtext vor Glossar
- aenderungen.py als eigenes Skript für vorhandene Dateien

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 19:59:37 +02:00
6610679d80 feat: mehrere Glossare kombinieren, gemeinsames Krone-Schmalz-Glossar
- rede_korrigieren.py: -g mehrfach, Ersetzungen in Reihenfolge der Angabe
- Ersetzungen ohne Treffer werden gesammelt in einer Zeile gemeldet
- krone-schmalz.glossar.txt: wiederkehrende Namen und Hörfehler; die
  Rede-Glossare enthalten nur noch Spezielles
- Magdeburg ergibt exakt denselben Text wie vorher, Ramstein profitiert von
  den gemeinsamen Einträgen (Russland-Versteher, Status quo, vornherein …)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 19:56:18 +02:00
7bc5e93613 feat: rede_korrigieren.py -m/--model zur Modellwahl
Das Modell steckt in den Cache-Schlüsseln; ein anderes Modell rechnet neu.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 19:54:32 +02:00
19b6bbf5a2 feat: extract_text.py --fliesstext für lesbaren Fließtext
Umbruch auf 80 Zeichen ohne Worttrennung, auch nicht am Bindestrich.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 19:53:42 +02:00
0413455ea5 refactor: Spur-Fehlermeldung und yt-dlp-Fake gemeinsam nutzen
- yt_untertitel.no_track_message() für yt_untertitel.py und extract_text.py
- tests/conftest.py: Fixtures fake_yt_dlp und yt_dlp_installed

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 19:52:20 +02:00
ba61434798 feat: extract_text.py – YouTube-URL → Textdatei in einem Schritt
- Kombiniert yt_untertitel.py und vtt2txt.py; die VTT bleibt temporär
- Standardsprache ist die des Original-Audios (original_language())
- -o Ausgabedatei, Standard output.txt
- Tests ohne Netz, README

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 19:51:32 +02:00
b0b79515ca docs: README um Werkzeugübersicht, Kurzweg und bekannte Grenzen ergänzen
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 19:23:28 +02:00
b2aa88085e chore: persönliche Claude-Code-Einstellungen ignorieren
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 19:18:26 +02:00
903aa92b09 feat: YouTube-Untertitel herunterladen (yt_untertitel.py)
- yt_untertitel.py lädt über yt-dlp die Untertitel eines Videos als VTT:
  manuelle Untertitel in der Sprache, sonst automatische in Originalsprache
  (<lang>-orig); Maschinenübersetzungen werden nie genommen
- Tests ohne Netz (yt-dlp durch Fakes ersetzt)
- Testdaten: Lahnstein-Rede (VTT und daraus erzeugter Rohtext)
- README: Ablauf URL → VTT → TXT → Korrektur

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 18:19:14 +02:00
8fe7c394f1 feat: Glossar für die Magdeburg-Rede
- magdeburg.glossar.txt: 64 feste Ersetzungen (Namen, Orte, Hörfehler)
  und 10 Hinweis-Begriffe; jede Ersetzung trifft den Rohtext
- Test prüft jetzt beide Beispiel-Glossare gegen ihre Testdaten
- README: Glossare zu beiden Testdaten erwähnt

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 18:11:58 +02:00
8e1945e406 test: Testdaten (Magdeburg-Rede) ins Repo aufnehmen
- testdaten/magdeburg.de-orig.vtt (YouTube-Auto-Untertitel) und der daraus
  mit vtt2txt.py erzeugte Rohtext magdeburg.de-orig.txt
- Test: jede Beispiel-VTT ergibt genau ihre .txt

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 17:52:56 +02:00
99238870f7 feat: VTT-Untertitel in Rohabschrift umwandeln (vtt2txt.py)
- vtt2txt.py als Kommandozeilenprogramm: -i nimmt mehrere Dateien und
  Muster (auch ohne Shell-Expansion), -o eine Datei oder ein Verzeichnis
- Rollende YouTube-Untertitel über die Überlappung aufeinanderfolgender
  Blöcke entdoppeln; echte Wiederholungen des Redners bleiben erhalten
- Fix: Blöcke nur an wirklich leeren Zeilen trennen; Text nach einer
  Leerzeichen-Zeile ging verloren (u. a. das letzte [applaus])
- Schutz gegen Überschreiben der Eingabe und doppelte Ausgabedateien,
  klare Meldung bei Nicht-UTF-8, Stapel läuft bei Fehlern weiter
- rede_korrigieren.py nimmt .vtt direkt an
- testdaten/ramstein.de.txt neu erzeugt (+ abschließendes [applaus])
- pytest: global installiertes asyncio-Plugin abschalten (Warnung)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 17:50:51 +02:00
6e5117a33b test: pytest-Suite ohne Ollama-Abhängigkeit
33 Tests mit Fakes für die Modellaufrufe: Abschnittsbildung, Glossar
(jede Ersetzung trifft die Testdaten), Streaming-Auswertung und
Fehlerfälle, Satztrennung, Absatzgliederung inkl. Teilen/Verbinden,
Zwischenspeicher und Kommandozeile.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 16:57:37 +02:00
1414f0c229 test: Testdaten (Ramstein-Rede) ins Repo aufnehmen
Automatische YouTube-Untertitel (.vtt) und Rohtext (.txt) als Eingabe
für ramstein.glossar.txt; README um Abschnitt Testdaten ergänzt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 16:54:00 +02:00
9c5553aa86 feat: Redeabschriften mit lokalem Ollama-Modell korrigieren
CLI (-i/-o/-g) korrigiert automatische Abschriften abschnittsweise mit
qwen3:32b: Satzende-Trennung, feste Glossar-Ersetzungen vor dem Modell,
Wortzahl-Prüfung, Zwischenspeicher mit Fortsetzen, Streaming-Fortschritt
und Absatzgliederung über Satznummern (3–10 Sätze pro Absatz).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 16:50:54 +02:00