icu4j транслитерация с английского на урду
Я пытаюсь транслитерировать римские английские слова на слова урду. так же, как этот инструмент сайта. Я использую транслитератор icu4j. Выходная транслитерация немного неожиданна, например
вход: "намаз"
вывод: "نَمَز"
ожидаемый результат: "نماز"
Английский перевод: "Молитва"
Ниже мой идентификатор, чтобы получить экземпляр.
String id = "Eng-ur; NFD;";
Кто-нибудь знает, где проблема в моем идентификаторе String...???
2 ответа
Структура правил ICU не очень хорошо работает с исходными языками с нерегулярным произношением. К сожалению, английский язык особенно трудно произносить.
Транслитерация означает эмуляцию произношения исходного языка на целевом языке. Он состоит из двух частей: (а) Преобразование ввода в промежуточное представление, которое указывает на произношение; (б) преобразование произношения в окончательный результат.
С английским на урду основанная на правилах структура ICU никогда не даст хороших результатов для (а), но, скорее всего, это будет хорошая система для выполнения (б). Я бы порекомендовал пропустить ваши английские строки через систему преобразования текста в речь или, по крайней мере, посмотреть ввод в очень большом словаре произношения. Это даст вам произношение в международном фонетическом алфавите. Как только у вас есть произношение, ICU должен работать достаточно хорошо, чтобы генерировать урду.
Сейчас в ICU еще нет правил для преобразования международного фонетического алфавита в урду. Как разработчик правил транслитерации Unicode, я думаю, что это должно быть очень легко реализовать; Я с удовольствием сделаю это, когда найду время (но каждый может присылать патчи!) Пожалуйста, отправьте сообщение об ошибке по адресу http://unicode.org/cldr/trac/newticket если вы хотите пойти по этому пути.
Я не думаю, что есть проблема с вашей строкой идентификатора как таковой. (Наверное en-ur
хотя достаточно - зачем запрашивать NFD?) Замечу, что строка nmạz
транслитерует точно на نماز. Возможно, есть место для улучшения правил транслитерации?