Aussprache-Wörterbuch: eigenes Modul, Wortgrenzen, gepflegte Liste, Kandidaten-Suche
Englische Fachbegriffe und fremde Eigennamen wurden auf Deutsch falsch vorgelesen
("Repository", "Donald Trump"). Chatterbox hat keinen Lautschrift-Eingang, also bleibt
nur die Umschrift in deutscher Rechtschreibung — die gab es zwar schon, aber nur als
kleines Dict im CLI-Skript, das keine andere Anwendung sinnvoll erweitern konnte.
Empirisch geprüft, warum es keinen besseren Weg gibt:
- Der multilinguale Tokenizer heißt "grapheme_mtl_merged_expanded_v1" und enthält zwar
IPA-Zeichen und ein [ipa]-Sprachtoken. generate() lehnt language_id="ipa" ab; umgeht
man nur die Whitelist, kommt Unsinn heraus: "ɹɪˈpɑzɪˌtɔɹi" klingt wie "Ripacitari",
"dɪˈplɔɪmənt" wie "Deep Romant" (per Whisper zurücktranskribiert). IPA ist tot.
- Der vorhandene Sprachwechsel im Satz ([en]...[/en]) synthetisiert die Teile korrekt,
klebt sie aber ohne Überblendung zusammen: gemessen 4 Nahtpausen von 0,5-0,8 s, der
Satz wächst von 3,9 s auf 7,1 s. Für Fließtext unbrauchbar.
Neu:
- pronunciation.py — eigenständiges Modul, reine Standardbibliothek (kein torch), damit
CLI, HTTP-Service, MCP-Adapter und fremde Projekte (Open Notebook) dasselbe Wörterbuch
nutzen können, ohne das Modell zu laden. Namen werden aus chatterbox_cli_v4
re-exportiert, bestehende Importe bleiben gültig.
- Ladereihenfolge mit Vorrang: eingebaut -> pronunciation/<lang>.json (mitgeliefert) ->
~/.config/chatterbox/pronunciation/<lang>.json -> $CHATTERBOX_PRONUNCIATION_DICT ->
explizit übergebenes Dict. Kaputte JSON-Dateien werden gemeldet, nicht fatal.
- pronunciation/de.json — kuratierte Einträge (Tech, KI, Firmen, Personen, Medien).
- pronunciation_candidates.py — findet in einem Text alles, was hunspell (de) nicht kennt
und noch nicht im Wörterbuch steht. An einem echten Podcast-Transkript getestet: 61
Kandidaten, darunter Voicebox, Scrapling, Scraping.
Fehlerbehebung: Ersetzt wird jetzt an Wortgrenzen und in einem einzigen Durchgang. Das
alte str.replace() machte aus "UNESCO" ein "Uh EnnESCO" und aus "UNIX" ein "Uh EnnIX",
weil der Eintrag "UN" auch mitten im Wort traf.
Verifiziert: 199 Einträge laden in 44 ms ohne torch; UNESCO/UNIX/Xiaomi bleiben intakt;
Open Notebooks TTS-Server spricht die Umschrift ohne eine einzige Codeänderung dort; der
MCP-Service auf :9999 läuft unverändert weiter.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
1ce6540711
commit
cd9383ff88
6 changed files with 570 additions and 50 deletions
203
pronunciation/de.json
Normal file
203
pronunciation/de.json
Normal file
|
|
@ -0,0 +1,203 @@
|
|||
{
|
||||
"_comment": [
|
||||
"Aussprache-Woerterbuch fuer deutsche Chatterbox-Synthese.",
|
||||
"",
|
||||
"Chatterbox ist GRAPHEM-basiert: es gibt keinen Phonem-/IPA-Eingang (das im",
|
||||
"Vokabular vorhandene [ipa]-Token wurde getestet und spricht Lautschrift NICHT",
|
||||
"korrekt aus). Der einzig tragfaehige Weg ist deshalb die Umschrift in deutscher",
|
||||
"Rechtschreibung: 'Repository' -> 'Ripositori'.",
|
||||
"",
|
||||
"Regeln fuer neue Eintraege:",
|
||||
" - Nur aufnehmen, was die deutsche Synthese WIRKLICH falsch spricht. Anglizismen",
|
||||
" wie 'Cloud', 'Update', 'Meeting' klingen ohnehin brauchbar -> kein Eintrag.",
|
||||
" - Umschrift so schreiben, wie ein deutscher Sprecher das Wort vorlesen wuerde.",
|
||||
" - Ersetzt wird nur an Wortgrenzen, 'UN' trifft also nicht mehr in 'UNESCO'.",
|
||||
" - Reihenfolge egal: laengere Eintraege gewinnen automatisch vor kuerzeren.",
|
||||
" - Die Umschrift NICHT komplett grossschreiben: nach dem Woerterbuch laeuft die",
|
||||
" Akronym-Expansion, die 'EIGEN' zu 'E I Ge E En' buchstabieren wuerde.",
|
||||
"",
|
||||
"Kandidaten aus eigenen Texten finden:",
|
||||
" python pronunciation_candidates.py transkript.txt",
|
||||
"",
|
||||
"Schluessel, die mit _ beginnen, werden ignoriert (Kommentare)."
|
||||
],
|
||||
|
||||
"Repository": "Ripositori",
|
||||
"Repositories": "Ripositoris",
|
||||
"Deployment": "Diploiment",
|
||||
"Framework": "Fräimwörk",
|
||||
"Feature": "Fietscher",
|
||||
"Features": "Fietschers",
|
||||
"Release": "Rilies",
|
||||
"Pipeline": "Paiplain",
|
||||
"Commit": "Kommit",
|
||||
"Branch": "Bräntsch",
|
||||
"Issue": "Ischju",
|
||||
"Pull Request": "Pull Rikwest",
|
||||
"Open Source": "Open Sors",
|
||||
"Bug": "Bagg",
|
||||
"Debugging": "Dibagging",
|
||||
"Runtime": "Rantaim",
|
||||
"Design": "Disain",
|
||||
"Interface": "Interfäis",
|
||||
"Layout": "Lejaut",
|
||||
"Cache": "Käsch",
|
||||
"Queue": "Kju",
|
||||
"Container": "Kontäiner",
|
||||
"Cluster": "Klaster",
|
||||
"Node": "Noud",
|
||||
"Client": "Klaient",
|
||||
"Router": "Rauter",
|
||||
"Firewall": "Fajerwoll",
|
||||
"Proxy": "Proxi",
|
||||
"Token": "Touken",
|
||||
"Prompt": "Prompt",
|
||||
"Prompting": "Prompting",
|
||||
"Embedding": "Embedding",
|
||||
"Inference": "Inferens",
|
||||
"Fine-Tuning": "Fain Tjuning",
|
||||
"Machine Learning": "Maschien Lörning",
|
||||
"Deep Learning": "Diep Lörning",
|
||||
"Reasoning": "Riesoning",
|
||||
"Agent": "Ägent",
|
||||
"Agents": "Ägents",
|
||||
"Workflow": "Wörkflou",
|
||||
"Workflows": "Wörkflous",
|
||||
"Dashboard": "Däschbord",
|
||||
"Benchmark": "Bentschmark",
|
||||
"Benchmarks": "Bentschmarks",
|
||||
"Voice Cloning": "Weus Klouning",
|
||||
"Speech-to-Text": "Spietsch tu Text",
|
||||
"Text-to-Speech": "Text tu Spietsch",
|
||||
|
||||
"Donald Trump": "Donald Tramp",
|
||||
"Trump": "Tramp",
|
||||
"Elon Musk": "Ielon Mask",
|
||||
"Musk": "Mask",
|
||||
"Joe Biden": "Dschou Baiden",
|
||||
"Biden": "Baiden",
|
||||
"Barack Obama": "Barack Obama",
|
||||
"Sam Altman": "Säm Altmen",
|
||||
"Jensen Huang": "Dschensen Huang",
|
||||
"Sundar Pichai": "Sundar Pitschai",
|
||||
"Satya Nadella": "Satja Nadella",
|
||||
"Mark Zuckerberg": "Mark Zuckerberg",
|
||||
"Geoffrey Hinton": "Dschefri Hinton",
|
||||
"Yann LeCun": "Jann Lököng",
|
||||
"Andrej Karpathy": "Andrej Karpathi",
|
||||
|
||||
"Hugging Face": "Hagging Fäis",
|
||||
"Nvidia": "Enwidia",
|
||||
"NVIDIA": "Enwidia",
|
||||
"Microsoft": "Maikrosoft",
|
||||
"Google": "Gugel",
|
||||
"Amazon": "Ämazon",
|
||||
"Apple": "Äppel",
|
||||
"Meta": "Meta",
|
||||
"Tesla": "Tesla",
|
||||
"Netflix": "Netflix",
|
||||
"Adobe": "Adoubi",
|
||||
"Oracle": "Orakel",
|
||||
"Salesforce": "Säilsfors",
|
||||
"Spotify": "Spotifai",
|
||||
"Reddit": "Reddit",
|
||||
"Discord": "Diskord",
|
||||
"Slack": "Släck",
|
||||
"Twitch": "Twitsch",
|
||||
"Airbnb": "Ärbienbie",
|
||||
"Uber": "Uber",
|
||||
"PayPal": "Päipäl",
|
||||
"Docker": "Docker",
|
||||
"Kubernetes": "Kubernetis",
|
||||
"Linux": "Linux",
|
||||
"Ubuntu": "Ubuntu",
|
||||
"Debian": "Debian",
|
||||
"Windows": "Windous",
|
||||
"macOS": "Mäck Ou Es",
|
||||
"Android": "Android",
|
||||
"Firefox": "Fajerfox",
|
||||
"Chrome": "Kroum",
|
||||
"Safari": "Safari",
|
||||
"Edge": "Edsch",
|
||||
"Visual Studio Code": "Wischuel Studio Koud",
|
||||
"Python": "Paiton",
|
||||
"JavaScript": "Dschawaskript",
|
||||
"TypeScript": "Taipskript",
|
||||
"Rust": "Rast",
|
||||
"Go": "Go",
|
||||
"Java": "Dschawa",
|
||||
"Ruby": "Rubi",
|
||||
"Swift": "Swift",
|
||||
"Kotlin": "Kotlin",
|
||||
|
||||
"Gemini": "Dschemini",
|
||||
"Copilot": "Kopailot",
|
||||
"Midjourney": "Middschörni",
|
||||
"Stable Diffusion": "Stäibel Diffjuschen",
|
||||
"Whisper": "Wisper",
|
||||
"Ollama": "Ollama",
|
||||
"OpenRouter": "Open Rauter",
|
||||
"Perplexity": "Pörpleksiti",
|
||||
"Mistral": "Mistral",
|
||||
"Cohere": "Kohier",
|
||||
"DeepSeek": "Dieb Siek",
|
||||
"Qwen": "Kwen",
|
||||
"Llama": "Lama",
|
||||
"Grok": "Grok",
|
||||
|
||||
"Podcast": "Podkäst",
|
||||
"Podcasts": "Podkästs",
|
||||
"Streaming": "Strieming",
|
||||
"Newsletter": "Njuusletter",
|
||||
"Interview": "Interwjuu",
|
||||
"Highlight": "Hailait",
|
||||
"Highlights": "Hailaits",
|
||||
"Roadmap": "Roudmäp",
|
||||
"Deadline": "Dedlain",
|
||||
"Blueprint": "Bluprint",
|
||||
"Insight": "Insait",
|
||||
"Insights": "Insaits",
|
||||
"Mindset": "Maindset",
|
||||
"Startup": "Startapp",
|
||||
"Startups": "Startapps",
|
||||
"Venture Capital": "Wentscher Käpitel",
|
||||
"Founder": "Faunder",
|
||||
|
||||
"Guardian": "Gardien",
|
||||
"New York Times": "Njuu Jork Taims",
|
||||
"Washington Post": "Woschington Poust",
|
||||
"Financial Times": "Fainänschel Taims",
|
||||
"Wall Street Journal": "Woll Striet Dschörnel",
|
||||
"BBC": "Bie Bie Sie",
|
||||
"CNN": "Sie En En",
|
||||
"NASA": "Nasa",
|
||||
"FBI": "Eff Bie Ai",
|
||||
"CIA": "Sie Ai Äi",
|
||||
"NATO": "Nato",
|
||||
"EU": "Eh Uh",
|
||||
"USA": "Uh Es Ah",
|
||||
"UK": "Juu Käi",
|
||||
"AI": "Äi Ai",
|
||||
"API": "Äi Pie Ai",
|
||||
"APIs": "Äi Pie Ais",
|
||||
"CPU": "Zeh Peh Uh",
|
||||
"GPU": "Geh Peh Uh",
|
||||
"GPUs": "Geh Peh Uhs",
|
||||
"RAM": "Ramm",
|
||||
"SSD": "Es Es Deh",
|
||||
"URL": "Uh Er El",
|
||||
"HTTP": "Hah Teh Teh Peh",
|
||||
"JSON": "Dschäison",
|
||||
"YAML": "Jämmel",
|
||||
"SQL": "Es Ku El",
|
||||
"CLI": "Zeh El Ih",
|
||||
"IDE": "Ih Deh Eh",
|
||||
"SDK": "Es Deh Kah",
|
||||
"RAG": "Rägg",
|
||||
"MCP": "Em Zeh Peh",
|
||||
"TTS": "Teh Teh Es",
|
||||
"STT": "Es Teh Teh",
|
||||
"OCR": "Oh Zeh Er",
|
||||
"VPN": "Fau Peh En",
|
||||
"DSGVO": "Deh Es Geh Fau Oh"
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue