Вступ
На відміну від англійської, німецька вважається досить фонематичною системою письма . Це означає, що відповідність між написанням та вимовою є близькою. З огляду на будь-яке слово, яке вам не знайоме, ви все одно знатимете, як його вимовити через орфографічну систему. Це означає, що комп’ютер повинен робити це занадто правильно?
Виклик
Напишіть програму або функцію, яка приймає за введення рядок, що представляє німецьке слово, і друкує або повертає її вимову в Міжнародному фонетичному алфавіті (IPA) .
Я, звичайно, не збираюся змушувати вас вивчати німецьку мову або повний IPA . Цей розділ у Вікіпедії надає майже всі необхідні правила щодо IPA, що знаходяться на німецькій мові, і я зашифрував реалізацію посилань, які не мають вольфівки C # .
Також у цьому посиланні міститься список 400 поширених німецьких слів та їх вимова IPA (потрібна для перевірки). Беручи приклад із цього списку, якщо вхід є solltest
, правильний вихід ˈzɔltəst
.
Реалізація посилань додає два корисні правила, про які не згадується у розділі Вікіпедії: Це передбачає, що слово наголос є на першому складі (дуже ймовірно, німецькою мовою), і використовує кращу евристику для визначення, коли літера "е" позначає звук шва / ə /. Він також реалізує спеціальну обробку префіксів, але це не покращило результатів настільки, наскільки я думав, що це буде.
Деталі
Щоб вважатись дійсною програмою, ваша програма повинна відповідати наступним вимогам:
- Ваш вихід IPA повинен відповідати щонайменше 300 з 400 слів у списку довідкових слів (реалізація посилання отримує 333 правильних)
- Ваша програма повинна вгадати будь-яке правдоподібне німецьке слово. Отже, у нас є технічна вимога, це означає, що для будь-якого вводу, який відповідає регулярному вираженню
[a-zA-ZäÄöÖüÜ][a-zäöüß]*
та має хоча б одну голосну (aeiouyäöü), ви повинні створити вихід, який не стосується пробілів, і не помилитися. - Програма повинна бути детермінованою (завжди виробляти один і той же вихід з одним і тим же входом)
- В іншому випадку стандартні лазівки заборонені (особливо про вилучення ресурсів поза сайтом)
Різні речі, які вам дозволяється робити:
- Майте у своєму виході провідні та відсталі пробіли, якщо потрібно
- Використовуйте будь-яке раніше існуюче кодування символів у висновку (я не уявляю нічого, крім Unicode, що добре працює, але, якщо можете, вітаю)
- Припустимо, що вхід знаходиться в певній нормованій формі, як, наприклад, Unicode форми нормалізації NFD, NFC тощо. Наприклад, чи ä пишеться як один символ або базовий символ + комбінуючий символ?
- Використовуйте стандартні методи введення та виведення
Оцінка та символи IPA
Оцінка балів у байтах. Попереджуйте, що символи Німеччини та символи IPA - 2 байти в UTF-8. Також символ IPA U + 0327 КОМБІНУВАННЯ ІНВЕРТИРОВАНОГО БРЕВУ Внизу (̯) є символом, що поєднує Unicode, і є 2-байтним символом UTF-8. Це означає, що щось на зразок ɐ̯ в UTF-8 вважатиметься 4 байтами. Для допитливих цей символ означає, що голосний не утворює ядро складу (попереднє робить замість цього).
Також остерігайтеся цих символів IPA, які в деяких шрифтах виглядають як інші символи ASCII: ɡ, ɪ, ʏ, ː (позначає довгу голосну), ˈ (позначає, який склад має наголос у багатоскладному слові).
Як було створено список довідкових слів
Цей розділ - додаткова інформація, не потрібна для виклику.
Список слів був схоплений із цього списку частот Вікісловника , видаляючи повтори через різницю корпусів та два слова, які не мали німецьких записів в англійській Вікісховищі (ох і ей) IPA виглядав як на англійському, так і на німецькому Вікісловниках. Там, де пропонувалося кілька вимов, я вибрав більш формальну та стандартну. Якщо це було не ясно, я вибрав той, який найбільше відповідає загальним правилам.
Мені довелося також стандартизувати, як вимовляється буква "r". Це сильно залежить від регіону, як вимовляється цей лист, і Вікісловник взагалі не відповідав тому, який саме обрав. Я відчував, що він схильний до наступного: "r" вимовляється / ɐ̯ /, коли супроводжується довгим голосним, а голосний не слідує, інакше це ʁ. Отже, я змінив усіх, щоб дотримуватись цього правила, за винятком вер- і ерфіксів, які цілком послідовно / (f) ɛɐ̯ /. Аналогічно я стандартизував "eu" як / ɔʏ̯ /.
#~WordData~"PhoneticForm"&
), але він працює лише для англійських слів.