diff --git a/.gitignore b/.gitignore index fe502f5..88d671a 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,8 @@ output/ # Echte Reden (Urheberrecht): nur lokal; die Tests nutzen tests/daten/ testdaten/ + +# Glossare echter Beiträge (Namen, Hörfehler): nur lokal; ins Repository gehört +# nur das Glossar der erfundenen Beispielrede +*.glossar.txt +!tests/daten/beispiel.glossar.txt diff --git a/BEDIENUNGSANLEITUNG.md b/BEDIENUNGSANLEITUNG.md index 4b68574..283c5a4 100644 --- a/BEDIENUNGSANLEITUNG.md +++ b/BEDIENUNGSANLEITUNG.md @@ -303,11 +303,13 @@ Namen und Hörfehler) plus eines **je Beitrag**: ``` Das gemeinsame Glossar zuerst angeben, damit seine Ersetzungen zuerst greifen. -Im Programmordner liegen Beispiele: `krone-schmalz.glossar.txt` (gemeinsam), -`ramstein.glossar.txt`, `magdeburg.glossar.txt`, `lahnstein.glossar.txt` -(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`. + +Glossare enthalten Namen realer Personen und Hörfehler realer Beiträge. Sie werden +deshalb nicht ins Git-Repository übernommen: Jede Datei `*.glossar.txt` ist über +`.gitignore` ausgeschlossen und bleibt nur auf dem eigenen Rechner. Das ist +gewollt; Glossare lieber gesondert sichern. Einzige Ausnahme ist das kleine, +leicht nachvollziehbare Glossar zur erfundenen Beispielrede in +`tests/daten/beispiel.glossar.txt`, das sich gut als Vorlage eignet. ### 6.3 Entwurf vom Modell: `glossar_vorschlag.py` diff --git a/README.md b/README.md index 2809359..d04fa9d 100644 --- a/README.md +++ b/README.md @@ -369,11 +369,14 @@ einzelnen Beitrag deutet das auf einen Tippfehler hin, bei einem gemeinsamen Glo es normal. Mehrere Glossare lassen sich kombinieren: ein gemeinsames für wiederkehrende Namen -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: -`iamfabian.glossar.txt` für Videos über KI-Coding-Tools (Claude Code, Codex, OpenCode …). +und Hörfehler eines Redners oder Kanals und eines je Beitrag, z. B. +`krone-schmalz.glossar.txt` (gemeinsam) plus `ramstein.glossar.txt`. Das gemeinsame +Glossar zuerst angeben, damit seine Ersetzungen vor den speziellen greifen. + +Glossare gehören zu realen Beiträgen und Personen und werden deshalb nicht +versioniert: `*.glossar.txt` steht in `.gitignore`, eigene Glossare liegen nur lokal. +Im Repository ist als Beispiel nur `tests/daten/beispiel.glossar.txt` zur erfundenen +Beispielrede. ### Glossar-Entwurf: `glossar_vorschlag.py` @@ -429,9 +432,10 @@ passendes Glossar (`beispiel.glossar.txt`) für die eingebauten Hörfehler wie ``` **Nur lokal:** Echte Reden gehören wegen des Urheberrechts nicht ins Repository; -`testdaten/` ist deshalb in `.gitignore`. Liegen dort die drei Reden, mit denen das -Programm entwickelt wurde, laufen zusätzlich die Tests, die ihre Glossare prüfen; -sonst werden diese übersprungen. Die Glossare dazu sind im Repository: +`testdaten/` ist deshalb in `.gitignore`, ebenso die Glossare (`*.glossar.txt`). +Liegen die drei Reden, mit denen das Programm entwickelt wurde, in `testdaten/` und +ihre Glossare im Programmordner, laufen zusätzlich die Tests, die diese Glossare +prüfen; sonst werden sie übersprungen: - `ramstein.de.*`: Rede über die US Air Base Ramstein (Glossar `ramstein.glossar.txt`) - `magdeburg.de-orig.*`: Rede in Magdeburg (Glossar `magdeburg.glossar.txt`) diff --git a/tests/test_abschrift_korrigieren.py b/tests/test_abschrift_korrigieren.py index 5b9dfc8..dc074e1 100644 --- a/tests/test_abschrift_korrigieren.py +++ b/tests/test_abschrift_korrigieren.py @@ -132,10 +132,13 @@ SAMPLE_GLOSSARIES = [ ] -# The real speeches are not in the repository (copyright); without them these skip +# Real speeches and their glossaries are not in the repository; without them these skip needs_speeches = pytest.mark.skipif( - not all((SPEECHES / sample).is_file() for _, sample in SAMPLE_GLOSSARIES), - reason="echte Reden nur lokal in testdaten/", + not all( + (SPEECHES / sample).is_file() and (REPO / glossary).is_file() + for glossary, sample in SAMPLE_GLOSSARIES + ) or not SHARED_GLOSSARY.is_file(), + reason="echte Reden (testdaten/) und ihre Glossare nur lokal", ) @@ -622,9 +625,16 @@ def from_url(fake_yt_dlp, yt_dlp_installed, monkeypatch): monkeypatch.setattr(ak, "find_paragraph_starts", every_nth_start(5)) +def kreml_glossary(folder): + """The one glossary rule the fake video needs.""" + path = folder / "kreml.glossar.txt" + path.write_text("Kremmel => Kreml\n", encoding="utf-8") + return path + + def test_main_url_default_names(from_url, tmp_path, monkeypatch): monkeypatch.chdir(tmp_path) - run_main(monkeypatch, "-u", URL, "-g", SHARED_GLOSSARY) + run_main(monkeypatch, "-u", URL, "-g", kreml_glossary(tmp_path)) raw = (tmp_path / "Kanal_Rede_2026-03-28.txt").read_text(encoding="utf-8") assert raw == "Der Kremmel ist in Moskau.\nDas ist bekannt.\n" @@ -914,7 +924,7 @@ def test_main_url_several_ranges(fake_yt_dlp, yt_dlp_installed, tmp_path, monkey monkeypatch.setattr(subprocess, "run", fake_yt_dlp(VIDEO, vtt=MULTI_VTT)) sent = chunk_recorder(monkeypatch) monkeypatch.chdir(tmp_path) - run_main(monkeypatch, "-u", URL, "-z", "0:00:00-0:00:30 0:02", "-g", SHARED_GLOSSARY) + run_main(monkeypatch, "-u", URL, "-z", "0:00:00-0:00:30 0:02", "-g", kreml_glossary(tmp_path)) name = "Kanal_Rede_2026-03-28_bis_00-00-30+ab_00-02-00" assert (tmp_path / f"{name}.txt").read_text(encoding="utf-8") == (