应该使用哪种罗马化标准来改善阿拉伯语-拉丁语的ICU4j音译?

时间:2018-06-20 07:12:36

标签: java nlp transliteration transcription icu4j

我们需要将阿拉伯文本音译为拉丁字符(不带变音符号)并将其显示给用户。

我们当前正在为此使用IBM ICU4j。 该API不能很好地将阿拉伯文本正确地翻译成适当的可读拉丁字符。请参考以下示例:

示例

  • 阿拉伯语文本:

    صدامحسينالتكريتي

  • Google的音译输出

    Sadaam Hussein al-tikriti

  • ICU4J的音译输出

    ṣdạm ḥsyn ạltkryty

我们如何改善ICU4j库的音译输出?

ICU4J为我们提供了编写自己的规则的选项,但由于我们的团队中没有一个人知道阿拉伯语,因此找不到适合的标准,因此我们目前处于困境。

1 个答案:

答案 0 :(得分:2)

花了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