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

Kam*_*rma 6 java nlp transliteration transcription icu4j

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

我们目前正在使用IBM ICU4j.API不能很好地将阿拉伯文本转换成适当的可读拉丁字符.请参考以下示例:

  • 阿拉伯文:

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

  • 谷歌的音译输出

    : Sadaam Hussein al-tikriti

  • ICU4J的音译输出

    : ?d?m ?syn ?ltkryty

我们如何提高ICU4j库的音译输出?

ICU4J为我们提供了编写我们自己的规则的选项,但我们目前陷入困境,因为我们团队中没有人知道阿拉伯语,并且无法找到任何可以遵循的正确标准.

thi*_*_vm 1

我花了 4 个小时来研究任何其他来源来解决这个问题。后来我尝试了 ICU4J 并找到了您问题的解决方案。您可以运行代码并查看您遗漏的点。

\n\n
package com.webom.crypt;\n\nimport org.apache.commons.lang3.StringEscapeUtils;\n\nimport com.ibm.icu.text.Transliterator;\n\npublic class Test {\n\n\n\n        public static String ARABIC_TO_LATIN = "Arabic-Latin";\n        public static String ARABIC_TO_LATIN_NO_ACCENTS = "Arabic-Latin; nfd; [:nonspacing mark:] remove; nfc";\n\n        public static void main(String[] args) {\n            String ARABICString = "\xd8\xb5\xd8\xaf\xd8\xa7\xd9\x85 \xd8\xad\xd8\xb3\xd9\x8a\xd9\x86 \xd8\xa7\xd9\x84\xd8\xaa\xd9\x83\xd8\xb1\xd9\x8a\xd8\xaa\xd9\x8a";\n\n            String unicodeCodes = StringEscapeUtils.escapeJava(ARABICString);\n            System.out.println("Unicode codes:" + unicodeCodes);\n ///YOUR WAY\n            Transliterator ARABICToLatinTrans = Transliterator.getInstance(ARABIC_TO_LATIN);\n            String result1 = ARABICToLatinTrans.transliterate(ARABICString);\n            System.out.println("ARABIC to Latin:" + result1);\n    //MINE WAY      \n            Transliterator ARABICToLatinNoAccentsTrans = Transliterator.getInstance(ARABIC_TO_LATIN_NO_ACCENTS);\n            String result2 = ARABICToLatinNoAccentsTrans.transliterate(ARABICString);\n            System.out.println("ARABIC to Latin (no accents):" + result2);\n        }\n    }\n
Run Code Online (Sandbox Code Playgroud)\n\n

只需检查答案并自行验证。您收到的输出将如下所示。

\n\n
 Unicode codes:\\u0635\\u062F\\u0627\\u0645 \\u062D\\u0633\\u064A\\u0646\\u0627\\u0644\\u062A\\u0643\\u0631\\u064A\\u062A\\u064A\n\nARABIC to Latin:\xe1\xb9\xa3d\xe1\xba\xa1m \xe1\xb8\xa5syn \xe1\xba\xa1ltkryty\n\nARABIC to Latin (no accents):sdam hsyn altkryty\n
Run Code Online (Sandbox Code Playgroud)\n