应该使用哪种罗马化标准来改进 ICU4j 对阿拉伯语-拉丁语的转写?

6
我们有一个要求,需要将阿拉伯文本转换为拉丁字符(无变音符号)并显示给用户。我们目前使用IBM ICU4j来实现这一功能。但该API不能很好地将阿拉伯文本转换为适当的可读的拉丁字符。请参考以下示例:
示例:
- 阿拉伯文本: صدام حسين التكريتي - 谷歌的转译输出: Sadaam Hussein al-tikriti - ICU4J的转译输出: ṣdạm ḥsyn ạltkryty
我们应该如何改进ICU4j库的转译输出?ICU4J给了我们编写自己规则的选项,但我们目前陷入了困境,因为我们团队中没有人懂阿拉伯语,并且无法找到任何可以遵循的适当标准。

1
你不能使用谷歌的音译 API 吗?由于阿拉伯文缺少大部分元音,因此无法从阿拉伯文到拉丁文进行基于规则的音译,但您将不得不在字典中查找阿拉伯单词,很可能需要结合上下文知识来区分用阿拉伯文书写但具有不同音译的单词。 - jarnbjo
@jarnbjo 感谢您的关注。Google的转写API不是免费的,我们想使用一些开源的东西。 - Kamlesh Sharma
1个回答

1

我花了4个小时的时间研究其他来源来解决这个问题。后来我尝试了ICU4J并找到了解决方案。你可以运行代码并查看你所缺失的部分。

package com.webom.crypt;

import org.apache.commons.lang3.StringEscapeUtils;

import com.ibm.icu.text.Transliterator;

public class Test {



        public static String ARABIC_TO_LATIN = "Arabic-Latin";
        public static String ARABIC_TO_LATIN_NO_ACCENTS = "Arabic-Latin; nfd; [:nonspacing mark:] remove; nfc";

        public static void main(String[] args) {
            String ARABICString = "صدام حسين التكريتي";

            String unicodeCodes = StringEscapeUtils.escapeJava(ARABICString);
            System.out.println("Unicode codes:" + unicodeCodes);
 ///YOUR WAY
            Transliterator ARABICToLatinTrans = Transliterator.getInstance(ARABIC_TO_LATIN);
            String result1 = ARABICToLatinTrans.transliterate(ARABICString);
            System.out.println("ARABIC to Latin:" + result1);
    //MINE WAY      
            Transliterator ARABICToLatinNoAccentsTrans = Transliterator.getInstance(ARABIC_TO_LATIN_NO_ACCENTS);
            String result2 = ARABICToLatinNoAccentsTrans.transliterate(ARABICString);
            System.out.println("ARABIC to Latin (no accents):" + result2);
        }
    }

只需检查答案并自行验证。您收到的输出将与下面显示的完全相同。

 Unicode codes:\u0635\u062F\u0627\u0645 \u062D\u0633\u064A\u0646\u0627\u0644\u062A\u0643\u0631\u064A\u062A\u064A

ARABIC to Latin:ṣdạm ḥsyn ạltkryty

ARABIC to Latin (no accents):sdam hsyn altkryty

谢谢您的努力,但是我们已经使用 ICU4j 生成了去除重音符号的转写版本。从您的代码中生成的最终输出仍然无法读取。我们期望的是像“萨达姆 · 哈桑 · 法提赫 · 阿尔 - 提克里提”这样的结果。 - Kamlesh Sharma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接