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

标签 java nlp transliteration transcription icu4j

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

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

例子

  • 阿拉伯语文本:

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

  • Google 的音译输出

    : 萨达姆·侯赛因·提克里蒂

  • ICU4J 的音译输出

    : ṣdạm ḥsyn ạltkryty

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

ICU4J 为我们提供了编写自己的规则的选项,但我们目前陷入困境,因为我们团队中没有人懂阿拉伯语,也无法找到任何可以遵循的合适标准。

最佳答案

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

关于java - 应使用哪种罗马化标准来改进 ICU4j 的阿拉伯语-拉丁语音译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50942315/

相关文章:

java - 如何使用 Apache Httpclient 3 检索 Websphere TrustStore

r - 在 R 中用变音符号制表字符

python - tensorflow : ValueError: Shape must be rank 2 but is rank 3

Python - 将德语变音符号音译为变音符号

java - 可以将字符串编译为代码吗?

java - 如何单独解析并执行文件中的所有 SQL 语句?

python - 在 google colab 中使用 MS nlp_recipes 时没有名为 'utils_nlp' 的模块

java - Java 中的音译。重新定义字符串中的每个字符

android - iOS/Android 上的音译

java - 用于生成 ISO 文件的 Maven 插件