chore: Glossare liegen lokal im Verzeichnis glossare/
Die Glossare echter Beiträge stehen nicht mehr lose im Programmordner, sondern in glossare/ (in .gitignore). Tests und Beispiele in README und Bedienungsanleitung verwenden die neuen Pfade. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
33869e5f3e
commit
acf9e33382
4 changed files with 42 additions and 34 deletions
5
.gitignore
vendored
5
.gitignore
vendored
|
|
@ -16,7 +16,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
|
||||
# Glossare echter Beiträge (Namen, Hörfehler): nur lokal in glossare/; ins
|
||||
# Repository gehört nur das Glossar der erfundenen Beispielrede
|
||||
glossare/
|
||||
*.glossar.txt
|
||||
!tests/daten/beispiel.glossar.txt
|
||||
|
|
|
|||
|
|
@ -172,7 +172,7 @@ YouTube-URL
|
|||
▼
|
||||
Rohtext ansehen
|
||||
│ Schritt 2: glossar_vorschlag.py → rede.glossar.entwurf.txt
|
||||
│ prüfen, übernehmen → rede.glossar.txt
|
||||
│ prüfen, übernehmen → glossare/rede.glossar.txt
|
||||
▼
|
||||
│ Schritt 3: abschrift_korrigieren.py → rede.korrigiert.txt
|
||||
│ rede.aenderungen.html
|
||||
|
|
@ -299,15 +299,17 @@ Bewährt hat sich ein **gemeinsames Glossar** pro Redner oder Kanal (wiederkehre
|
|||
Namen und Hörfehler) plus eines **je Beitrag**:
|
||||
|
||||
```bash
|
||||
./abschrift_korrigieren.py -i rede.txt -g krone-schmalz.glossar.txt -g rede.glossar.txt
|
||||
./abschrift_korrigieren.py -i rede.txt -g glossare/krone-schmalz.glossar.txt -g glossare/rede.glossar.txt
|
||||
```
|
||||
|
||||
Das gemeinsame Glossar zuerst angeben, damit seine Ersetzungen zuerst greifen.
|
||||
|
||||
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,
|
||||
**Ablage:** Glossare gehören ins Verzeichnis `glossare/` im Programmordner, z. B.
|
||||
`glossare/krone-schmalz.glossar.txt` und `glossare/ramstein.glossar.txt`. Sie
|
||||
enthalten Namen realer Personen und Hörfehler realer Beiträge und werden deshalb
|
||||
nicht ins Git-Repository übernommen: `glossare/` und jede Datei `*.glossar.txt` sind
|
||||
über `.gitignore` ausgeschlossen und bleiben nur auf dem eigenen Rechner. Das ist
|
||||
gewollt; Glossare deshalb 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.
|
||||
|
||||
|
|
@ -316,7 +318,7 @@ leicht nachvollziehbare Glossar zur erfundenen Beispielrede in
|
|||
Statt den ganzen Rohtext zu lesen, kann das Modell einen ersten Entwurf liefern:
|
||||
|
||||
```bash
|
||||
./glossar_vorschlag.py -i rede.txt -g krone-schmalz.glossar.txt
|
||||
./glossar_vorschlag.py -i rede.txt -g glossare/krone-schmalz.glossar.txt
|
||||
# → rede.glossar.entwurf.txt
|
||||
```
|
||||
|
||||
|
|
@ -353,7 +355,7 @@ Modell geändert hat. Das zeigt Hörfehler, die man als feste Ersetzung absicher
|
|||
möchte, und Fehlgriffe des Modells:
|
||||
|
||||
```bash
|
||||
./glossar_vorschlag.py -i rede.txt -k rede.korrigiert.txt -g krone-schmalz.glossar.txt -g rede.glossar.txt
|
||||
./glossar_vorschlag.py -i rede.txt -k rede.korrigiert.txt -g glossare/krone-schmalz.glossar.txt -g glossare/rede.glossar.txt
|
||||
```
|
||||
|
||||
Diese Einträge stehen in einem eigenen Abschnitt mit ihrer Anzahl, z. B.
|
||||
|
|
@ -365,7 +367,7 @@ entfernen.
|
|||
## 7. Schritt 3: Korrigieren
|
||||
|
||||
```bash
|
||||
./abschrift_korrigieren.py -i rede.txt -g krone-schmalz.glossar.txt -g rede.glossar.txt
|
||||
./abschrift_korrigieren.py -i rede.txt -g glossare/krone-schmalz.glossar.txt -g glossare/rede.glossar.txt
|
||||
```
|
||||
|
||||
Statt `-i rede.txt` geht auch `-i rede.de.vtt` (Untertiteldatei) oder
|
||||
|
|
@ -398,8 +400,8 @@ Ein gekürztes Beispiel mit Erläuterungen:
|
|||
```text
|
||||
Modell: qwen3:32b
|
||||
Sprache des Beitrags: de
|
||||
Glossar krone-schmalz.glossar.txt: 7 Begriffe, 36 feste Ersetzungen
|
||||
Glossar ramstein.glossar.txt: 2 Begriffe, 15 feste Ersetzungen
|
||||
Glossar glossare/krone-schmalz.glossar.txt: 7 Begriffe, 36 feste Ersetzungen
|
||||
Glossar glossare/ramstein.glossar.txt: 2 Begriffe, 15 feste Ersetzungen
|
||||
Ersetzt 2× „Willly Brand“ → „Willy Brandt“ ← feste Ersetzungen mit Treffern
|
||||
Ersetzt 6× „Rammstein“ → „Ramstein“
|
||||
13 Ersetzung(en) ohne Treffer: „Hostelchik“, … ← bei gemeinsamen Glossaren normal
|
||||
|
|
@ -522,7 +524,7 @@ erstellt, lässt sich der Bericht jederzeit neu erzeugen. Mit denselben Glossare
|
|||
wie bei der Korrektur, damit deren Ersetzungen nicht als verdächtig gelten:
|
||||
|
||||
```bash
|
||||
./aenderungen.py -a rede.txt -b rede.korrigiert.txt -g krone-schmalz.glossar.txt -g rede.glossar.txt
|
||||
./aenderungen.py -a rede.txt -b rede.korrigiert.txt -g glossare/krone-schmalz.glossar.txt -g glossare/rede.glossar.txt
|
||||
# → rede.aenderungen.html
|
||||
./aenderungen.py -a talk.txt -b talk.korrigiert.txt -l en # englischer Beitrag
|
||||
```
|
||||
|
|
@ -771,7 +773,7 @@ Ja, z. B. in einer Schleife:
|
|||
|
||||
```bash
|
||||
for url in 'https://www.youtube.com/watch?v=AAA' 'https://www.youtube.com/watch?v=BBB'; do
|
||||
./abschrift_korrigieren.py -u "$url" -g krone-schmalz.glossar.txt
|
||||
./abschrift_korrigieren.py -u "$url" -g glossare/krone-schmalz.glossar.txt
|
||||
done
|
||||
```
|
||||
|
||||
|
|
|
|||
35
README.md
35
README.md
|
|
@ -229,8 +229,8 @@ werden trotzdem umgewandelt; der Exit-Code ist dann 1.
|
|||
```bash
|
||||
./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.txt -g glossare/rede.glossar.txt # mit Glossar
|
||||
./abschrift_korrigieren.py -i rede.txt -g glossare/allgemein.glossar.txt -g glossare/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
|
||||
|
|
@ -346,7 +346,7 @@ der Korrektur gelten deren Ersetzungen und Begriffe nicht als verdächtig:
|
|||
```bash
|
||||
./aenderungen.py -a rede.txt -b rede.korrigiert.txt # → rede.aenderungen.html
|
||||
./aenderungen.py -a rede.de.vtt -b rede.korrigiert.txt -o bericht.html
|
||||
./aenderungen.py -a rede.txt -b rede.korrigiert.txt -g krone-schmalz.glossar.txt -g rede.glossar.txt
|
||||
./aenderungen.py -a rede.txt -b rede.korrigiert.txt -g glossare/krone-schmalz.glossar.txt -g glossare/rede.glossar.txt
|
||||
./aenderungen.py -a talk.txt -b talk.korrigiert.txt -l en # englische Wortliste
|
||||
```
|
||||
|
||||
|
|
@ -370,13 +370,15 @@ es normal.
|
|||
|
||||
Mehrere Glossare lassen sich kombinieren: ein gemeinsames für wiederkehrende Namen
|
||||
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/krone-schmalz.glossar.txt` (gemeinsam) plus `glossare/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.
|
||||
Glossare liegen im Verzeichnis `glossare/`. Sie gehören zu realen Beiträgen und
|
||||
Personen und werden deshalb nicht versioniert: `glossare/` und `*.glossar.txt` stehen
|
||||
in `.gitignore`, die Glossare bleiben nur lokal und sollten gesondert gesichert
|
||||
werden. Im Repository ist als Beispiel nur `tests/daten/beispiel.glossar.txt` zur
|
||||
erfundenen Beispielrede.
|
||||
|
||||
### Glossar-Entwurf: `glossar_vorschlag.py`
|
||||
|
||||
|
|
@ -401,7 +403,7 @@ erneut vorgeschlagen. Zeit-Überschriften von Ausschnitten
|
|||
Roh- und korrigiertem Text entfernt; das Modell bekommt sie nicht zu sehen.
|
||||
|
||||
```bash
|
||||
./glossar_vorschlag.py -i rede.txt -k rede.korrigiert.txt -g krone-schmalz.glossar.txt
|
||||
./glossar_vorschlag.py -i rede.txt -k rede.korrigiert.txt -g glossare/krone-schmalz.glossar.txt
|
||||
# → rede.glossar.entwurf.txt
|
||||
./glossar_vorschlag.py -i tests/daten/beispiel.de.txt # an der Beispielrede ausprobieren
|
||||
```
|
||||
|
|
@ -432,18 +434,19 @@ 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`, ebenso die Glossare (`*.glossar.txt`).
|
||||
`testdaten/` ist deshalb in `.gitignore`, ebenso die Glossare (`glossare/`).
|
||||
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
|
||||
ihre Glossare in `glossare/`, 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`)
|
||||
- `ramstein.de.*`: Rede über die US Air Base Ramstein (Glossar `glossare/ramstein.glossar.txt`)
|
||||
- `magdeburg.de-orig.*`: Rede in Magdeburg (Glossar `glossare/magdeburg.glossar.txt`)
|
||||
- `Lahnstein.de-orig.*`: Rede „Respekt geht anders“ in Lahnstein (Glossar
|
||||
`lahnstein.glossar.txt`, erstellt mit Hilfe von `glossar_vorschlag.py`), zu laden mit
|
||||
`glossare/lahnstein.glossar.txt`, erstellt mit Hilfe von `glossar_vorschlag.py`),
|
||||
zu laden mit
|
||||
`./yt_untertitel.py -u 'https://www.youtube.com/watch?v=rm6lADgf6GQ' -n Lahnstein -d testdaten`
|
||||
|
||||
Alle drei mit dem gemeinsamen `krone-schmalz.glossar.txt` davor. Ein Lauf über eine
|
||||
Alle drei mit dem gemeinsamen `glossare/krone-schmalz.glossar.txt` davor. Ein Lauf über eine
|
||||
Rede dauert mit `qwen3:32b` vollständig auf einer RTX 3090 etwa 6–8 Minuten.
|
||||
|
||||
## Tests
|
||||
|
|
|
|||
|
|
@ -14,7 +14,9 @@ REPO = Path(__file__).resolve().parent.parent
|
|||
# Own, made-up sample speech; real speeches are only kept locally in testdaten/
|
||||
SAMPLE = REPO / "tests" / "daten" / "beispiel.de.txt"
|
||||
GLOSSARY = REPO / "tests" / "daten" / "beispiel.glossar.txt"
|
||||
SHARED_GLOSSARY = REPO / "krone-schmalz.glossar.txt"
|
||||
# Real glossaries and speeches are only kept locally (see .gitignore)
|
||||
GLOSSARIES = REPO / "glossare"
|
||||
SHARED_GLOSSARY = GLOSSARIES / "krone-schmalz.glossar.txt"
|
||||
SPEECHES = REPO / "testdaten"
|
||||
# The autouse fixture below replaces it; tests of the real function use this
|
||||
REAL_FIND_MERGE_SIDE = ak.find_merge_side
|
||||
|
|
@ -135,7 +137,7 @@ SAMPLE_GLOSSARIES = [
|
|||
# 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() and (REPO / glossary).is_file()
|
||||
(SPEECHES / sample).is_file() and (GLOSSARIES / glossary).is_file()
|
||||
for glossary, sample in SAMPLE_GLOSSARIES
|
||||
) or not SHARED_GLOSSARY.is_file(),
|
||||
reason="echte Reden (testdaten/) und ihre Glossare nur lokal",
|
||||
|
|
@ -155,7 +157,7 @@ def test_sample_glossary_replacements_all_match(capsys, glossary, sample):
|
|||
text = flat((SPEECHES / sample).read_text(encoding="utf-8"))
|
||||
text = ak.apply_replacements(text, ak.read_glossary(SHARED_GLOSSARY)[1])
|
||||
capsys.readouterr()
|
||||
ak.apply_replacements(text, ak.read_glossary(REPO / glossary)[1])
|
||||
ak.apply_replacements(text, ak.read_glossary(GLOSSARIES / glossary)[1])
|
||||
assert "ohne Treffer" not in capsys.readouterr().out
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue