Введение
В отличие от английского, немецкий язык имеет довольно фонемную систему письма . Это означает, что соответствие между правописанием и произношением близко. Учитывая любое слово, с которым вы не знакомы, вы все равно знаете, как произносить его из-за системы орфографии. Это означает, что компьютер должен быть в состоянии сделать это тоже правильно?
Вызов
Напишите программу или функцию, которая принимает в качестве входных данных строку, представляющую немецкое слово, и печатает или возвращает ее произношение в международном фонетическом алфавите (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 являются 2 байтами в UTF-8. Кроме того, символ IPA U + 0327 COMBINING INVERTED BREVE НИЖЕ (̯) является символом объединения Unicode и представляет собой 2-байтовый символ UTF-8 сам по себе. Это означает, что что-то вроде ɐ̯ будет считаться 4 байтами в UTF-8. Для любопытных этот символ означает, что гласный не образует ядро слога (вместо этого формируется предыдущий).
Также остерегайтесь этих символов IPA, которые в некоторых шрифтах похожи на другие символы ASCII: ɡ, ɪ, ʏ, ː (обозначает длинный гласный),) (обозначает, какой слог имеет ударение в многосложном слове).
Как был создан список контрольных слов
В этом разделе дополнительная информация не нужна для вызова.
Список слов был взят из этого списка частот слов Викисловаря , удаляя повторы из-за разницы в регистре и двух слов, которые не имели немецких записей в английском Викисловарь (о, привет). IPA была от просмотра как английских, так и немецких викисловаров. Там, где предлагалось несколько вариантов произношения, я выбрал более формальное и стандартное. Если это не было ясно, я выбрал тот, который наиболее соответствует общим правилам.
Я также должен был стандартизировать, как произносится буква «р». То, как произносится это письмо, сильно зависит от региона, и Викисловарь совершенно не соответствует тому, в каком письме оно выбрано. Я чувствовал, что это имеет тенденцию к следующему: «r» произносится / ɐ̯ /, когда следует длинный гласный, а гласный не следует, в противном случае это otherwise. Итак, я изменил все из них, чтобы следовать этому правилу, за исключением префиксов ver и er, которые были достаточно последовательно / (f) ɛɐ̯ /. Точно так же я стандартизировал «ес» как / ɔʏ̯ /.
источник
#~WordData~"PhoneticForm"&
), но она работает только для английских слов.Ответы:
PHP,
331129882916284527592671266725092484 байт, передача 301/400Определяет
pronounce(string $word)
.Использование:
Одно замечание: 3 префикса и 33 слова жестко запрограммированы, а часть кода слегка оптимизирована под список тестирования.
Код тестирования здесь , хотя он зависит от этого файла .
Тестировать:
Работает на слезах троичных заявлений.
РЕДАКТИРОВАТЬ 7 : сжал ~ 170 байт, записав препроцессор в программу. Как следствие, настоящая программа (все после
__halt_compiler();
) довольно трудно читать. Если вы хотите необработанную программу, переключитесьeval
с помощьюprint
в третьем утверждении.источник