Einführung
Im Gegensatz zu Englisch wird Deutsch als ein ziemlich phonemisches Schriftsystem angesehen . Das bedeutet, dass die Entsprechung zwischen Rechtschreibung und Aussprache eng ist. Wenn Sie ein Wort kennen, das Sie nicht kennen, wissen Sie aufgrund des Rechtschreibsystems immer noch, wie es auszusprechen ist. Das heißt, ein Computer sollte das auch können, oder?
Herausforderung
Schreiben Sie ein Programm oder eine Funktion, die als Eingabe eine Zeichenfolge verwendet, die ein deutsches Wort darstellt, und deren Aussprache im Internationalen Phonetischen Alphabet (IPA) ausgibt oder zurückgibt .
Ich werde Sie natürlich nicht dazu bringen, Deutsch oder die volle IPA zu lernen . Dieser Wikipedia Abschnitt bietet fast alle deutschen IPA Regeln , die Sie brauchen, und ich habe eine ungolfed C # codiert Referenzimplementierung .
Unter diesem Link finden Sie auch eine Liste mit 400 gebräuchlichen deutschen Wörtern und deren IPA-Aussprache (für die Validierung erforderlich). Wenn Sie ein Beispiel aus dieser Liste nehmen, ist die Eingabe solltest
die richtige Ausgabe ˈzɔltəst
.
Die Referenzimplementierung fügt zwei hilfreiche Regeln hinzu, die im Wikipedia-Abschnitt nicht erwähnt werden: Es wird davon ausgegangen, dass die Wortbetonung in der ersten Silbe steht (sehr wahrscheinlich in Deutsch), und es wird eine bessere Heuristik verwendet, um zu bestimmen, wann der Buchstabe "e" den Schwa-Ton darstellt / ə /. Es implementiert auch eine spezielle Verarbeitung für Präfixe, aber das verbesserte die Ergebnisse nicht so sehr, wie ich es mir vorgestellt hatte.
Einzelheiten
Um als gültiger Eintrag zu gelten, muss Ihr Programm die folgenden Anforderungen erfüllen:
- Ihre IPA-Ausgabe muss genau mit mindestens 300 der 400 Wörter in der Referenzwortliste übereinstimmen (die Referenzimplementierung wird 333 korrekt).
- Ihr Programm muss eine Vermutung für ein plausibles deutsches Wort anstellen. Wir haben also eine technische Anforderung. Dies bedeutet, dass Sie für jede Eingabe, die dem
[a-zA-ZäÄöÖüÜ][a-zäöüß]*
regulären Ausdruck entspricht und mindestens einen Vokal (aeiouyäöü) hat, eine Ausgabe ohne Leerzeichen und keine Fehlerausgabe erstellen müssen. - Das Programm muss deterministisch sein (bei gleicher Eingabe immer die gleiche Ausgabe erzeugen)
- Andernfalls sind Standardlücken verboten (insbesondere das Abrufen von externen Ressourcen).
Verschiedenes, was Sie tun dürfen:
- Haben Sie führende und nachfolgende Leerzeichen in Ihrer Ausgabe, wenn Sie müssen
- Verwenden Sie eine bereits vorhandene Zeichenkodierung in der Ausgabe (ich kann mir nichts anderes als Unicode vorstellen, aber wenn Sie können, herzlichen Glückwunsch)
- Angenommen, die Eingabe erfolgt in einer normalisierten Form wie Unicode-Normalisierungsformulare NFD, NFC usw. Wird ä beispielsweise als einzelnes Zeichen oder als Basiszeichen + kombiniertes Zeichen geschrieben?
- Verwenden der Standardeingabe und Ausgabeverfahren
Scoring & IPA-Charaktere
Die Bewertung erfolgt in Byte. Seien Sie gewarnt, dass die deutschen Zeichen und die IPA-Zeichen in UTF-8 2 Byte sind. Das IPA-Zeichen U + 0327 COMBINING INVERTED BREVE BELOW (̯) ist ein Unicode-Kombinationszeichen und ein 2-Byte-UTF-8-Zeichen für sich. Das heißt, so etwas wie ɐ̯ würde in UTF-8 als 4 Byte zählen. Für die Neugierigen bedeutet dieses Symbol, dass der Vokal nicht den Silbenkern bildet (der vorherige tut es stattdessen).
Achten Sie auch auf diese IPA-Zeichen, die in einigen Schriftarten wie andere ASCII-Zeichen aussehen: ɡ, ɪ, ʏ, ː (markiert einen langen Vokal), ˈ (markiert, welche Silbe die Betonung in einem mehrsilbigen Wort hat).
Wie die Referenzwortliste erstellt wurde
Dieser Abschnitt enthält zusätzliche Informationen, die für die Herausforderung nicht benötigt werden.
Die Wortliste wurde aus dieser Wiktionary-Worthäufigkeitsliste entnommen , wobei Wiederholungen aufgrund von Groß- und Kleinschreibung und zwei Wörtern ohne deutsche Einträge im englischen Wiktionary (oh & hey) entfernt wurden. Die IPA bezog sich sowohl auf die englischen als auch auf die deutschen Wiktionaries. Wo mehrfache Aussprachen angeboten wurden, wählte ich die formalere und Standardaussprache. Wenn dies nicht klar war, wählte ich diejenige, die den allgemeinen Regeln am besten entspricht.
Ich musste auch standardisieren, wie der Buchstabe "r" ausgesprochen wird. Es hängt stark von der Region ab, wie dieser Buchstabe ausgesprochen wird, und Wiktionary stimmte überhaupt nicht mit der von ihm gewählten überein. Ich hatte das Gefühl, dass es zu folgendem tendiert: "r" wird ausgesprochen / ɐ̯ /, wenn ein langer Vokal folgt, und ein Vokal folgt nicht, andernfalls ist es ʁ. Also habe ich alle geändert, um dieser Regel zu folgen, mit Ausnahme der Vers- und Er-Präfixe, die ziemlich konsistent waren / (f) ɛɐ̯ /. Ebenso habe ich "eu" als / ɔʏ̯ / standardisiert.
quelle
#~WordData~"PhoneticForm"&
), die jedoch nur für englische Wörter funktioniert.Antworten:
PHP,
331129882916284527592671266725092484 Bytes, die 301/400 übergebenDefiniert
pronounce(string $word)
.Verwendung:
Eine Anmerkung: 3 Präfixe und 33 Wörter sind fest codiert, und ein Teil des Codes ist leicht für die Testliste optimiert.
Der Testcode ist hier , obwohl er von dieser Datei abhängt .
Zu testen:
Angetrieben von den Tränen ternärer Aussagen.
EDIT 7 : ~ 170 Bytes durch Schreiben eines Präprozessors in das Programm entfernt. Infolgedessen ist das eigentliche Programm (alles danach
__halt_compiler();
) etwas schwer zu lesen. Wenn Sie das unverarbeitete Programm wollen, wechseln Sieeval
mitprint
in die dritte Anweisung.quelle