introduzione
A differenza dell'inglese, il tedesco è considerato un sistema di scrittura abbastanza fonemico . Ciò significa che la corrispondenza tra ortografia e pronuncia è stretta. Data qualsiasi parola con cui non hai familiarità, sapresti comunque come pronunciare a causa del sistema di ortografia. Questo significa che un computer dovrebbe essere in grado di farlo anche nel modo giusto?
Sfida
Scrivi un programma o una funzione che accetta come input una stringa che rappresenta una parola tedesca e stampa o restituisce la sua pronuncia in International Phonetic Alphabet (IPA) .
Non ho intenzione di farti imparare il tedesco o l'IPA completo . Questa sezione di Wikipedia fornisce quasi tutte le regole da tedesco a IPA necessarie e ho codificato un'implementazione di riferimento C # non controllata .
In questo link è anche incluso un elenco di 400 parole tedesche comuni e la loro pronuncia IPA (necessaria per la convalida). Prendendo un esempio da quell'elenco, se l'input è solltest
, l'output corretto è ˈzɔltəst
.
L'implementazione di riferimento aggiunge due utili regole non menzionate nella sezione Wikipedia: presuppone che la parola stress sia sulla prima sillaba (molto probabilmente in tedesco) e utilizza una migliore euristica per determinare quando la lettera "e" rappresenta il suono schwa / ə /. Implementa anche l'elaborazione speciale per i prefissi, ma ciò non ha migliorato i risultati tanto quanto pensavo.
Dettagli
Per essere considerato una voce valida, il tuo programma deve soddisfare i seguenti requisiti:
- L'output IPA deve corrispondere esattamente a almeno 300 delle 400 parole nell'elenco delle parole di riferimento (l'implementazione di riferimento ottiene 333 corretti)
- Il tuo programma deve fare un'ipotesi per qualsiasi parola plausibilmente tedesca. Quindi abbiamo un requisito tecnico, questo significherà che per qualsiasi input che corrisponda al regex
[a-zA-ZäÄöÖüÜ][a-zäöüß]*
e abbia almeno una vocale (aeiouyäöü), è necessario produrre output non solo per gli spazi bianchi e non errori. - Il programma deve essere deterministico (produce sempre lo stesso output dato lo stesso input)
- Altrimenti, le scappatoie standard sono vietate (in particolare quella sul recupero delle risorse fuori sede)
Cose varie che ti è permesso fare:
- Se necessario, inserisci spazi bianchi iniziali e finali nell'output
- Usa qualsiasi codifica di caratteri preesistente nell'output (non riesco a immaginare niente di diverso da Unicode che funzioni bene, ma se puoi, congratulazioni)
- Supponiamo che l'input sia in una forma normalizzata come le forme di normalizzazione Unicode NFD, NFC, ecc. Ad esempio, è scritto come un singolo carattere o un carattere di base + un carattere combinato?
- Utilizzare metodi di input e output standard
Punteggio e personaggi IPA
Il punteggio è in byte. Tieni presente che i caratteri tedeschi e IPA sono 2 byte in UTF-8. Inoltre, il carattere IPA U + 0327 COMBINING INVERTED BREVE SOTTO (̯) è un carattere che combina Unicode ed è un carattere UTF-8 da 2 byte a sé stante. Ciò significa che qualcosa come ɐ̯ conterebbe come 4 byte in UTF-8. Per i curiosi, questo simbolo indica che la vocale non forma il nucleo della sillaba (invece il precedente).
Inoltre, fai attenzione a questi caratteri IPA che in alcuni caratteri assomigliano ad altri caratteri ASCII: ɡ, ɪ, ʏ, ː (segna una vocale lunga), ˈ (segna quale sillaba ha lo stress in una parola multisillaba).
Come è stato creato l'elenco delle parole di riferimento
Questa sezione contiene informazioni extra non necessarie per la sfida.
L'elenco di parole è stato preso da questo elenco di frequenze di parole di Wikizionario , rimuovendo le ripetizioni a causa della differenza di maiuscole e due parole che non avevano voci tedesche nel Wikizionario inglese (oh & hey). L'IPA è stato analizzato dai Wikizionario in inglese e in tedesco. Dove sono state offerte più pronunce, ho scelto quella più formale e standard. Se ciò non fosse chiaro, ho scelto quello più adatto alle regole generali.
Ho anche dovuto standardizzare la pronuncia della lettera "r". Dipende fortemente dalla regione in cui si pronunciava questa lettera, e Wikizionario non era affatto coerente in quale scegliesse. Ho sentito che tendeva verso quanto segue: "r" è pronunciato / ɐ̯ / quando seguito da una vocale lunga e una vocale non segue, altrimenti è ʁ. Quindi, ho cambiato tutti per seguire quella regola, ad eccezione dei ver- e dei prefissi che erano abbastanza coerenti / (f) ɛɐ̯ /. Allo stesso modo, ho standardizzato "eu" come / ɔʏ̯ /.
#~WordData~"PhoneticForm"&
), ma funziona solo con parole inglesi.