gpt4 book ai didi

unicode - ICU自定义音译

转载 作者:行者123 更新时间:2023-12-02 10:49:28 31 4
gpt4 key购买 nike

我希望利用 ICU 库进行音译,但我想为一组特定的自定义音译提供自定义音译文件,以便在编译时合并到 ICU 核心中,以便在其他地方以二进制形式使用。出于兼容性原因,我正在使用 ICU 4.2 的源代码。

据我了解,来自the ICU Data page of their website ,解决此问题的一种方法是在 ICUHOME/source/data/translit/中创建文件 trnslocal.mk,并在该文件中包含单行 TRANSLIT_SOURCE_LOCAL=custom.txt

对于 custom.txt 文件本身,我基于主文件 root.txt 使用了以下格式:

custom{
RuleBasedTransliteratorIDs {
Kanji-Romaji {
file {
resource:process(transliterator){"custom/Kanji_Romaji.txt"}
direction{"FORWARD"}
}
}
}
TransliteratorNamePattern {
// Format for the display name of a Transliterator.
// This is the language-neutral form of this resource.
"{0,choice,0#|1#{1}|2#{1}-{2}}" // Display name
}
// Transliterator display names
// This is the English form of this resource.
"%Translit%Hex" { "%Translit%Hex" }
"%Translit%UnicodeName" { "%Translit%UnicodeName" }
"%Translit%UnicodeChar" { "%Translit%UnicodeChar" }
TransliterateLATIN{
"",
""
}
}

然后,我将文件 Kanji_Romaji.txt 存储在目录 custom 中,如 here 所示。 。因为它使用 > 而不是我在其他文件中看到的 ,所以我适本地转换了每个条目,所以它们现在看起来像:

丁 → Tei ;
七 → Shichi ;

当我编译 ICU 项目时,没有出现任何错误。

但是,当我尝试在测试文件中使用此自定义音译器(与内置音译器配合良好的测试文件)时,我遇到了错误错误:65569:U_INVALID_ID

我使用以下代码来构造音译器并输出错误:

UErrorCode status = U_ZERO_ERROR;
Transliterator *K_R = Transliterator::createInstance("Kanji-Romaji", UTRANS_FORWARD, status);
if (U_FAILURE(status))
{
std::cout << "error: " << status << ":" << u_errorName(status) << std::endl;
return 0;
}

此外,循环到 Transliterator::countAvailableIDs()Transliterator::getAvailableID(i) 不会列出我的自定义音译。我记得读过有关自定义转换器的内容,它们必须在/source/data/mappings/convrtrs.txt 中注册。有类似的音译器文件吗?

看来我的自定义音译器要么没有构建到适当的包中(尽管没有编译错误),要么格式不正确,要么以某种方式没有注册使用。顺便说一句,我知道运行时的 RuleBasedTransliterator 路由,但我希望能够编译自定义音译以在任何生成的二进制文件中使用。

如果需要任何额外说明,请告诉我。我知道这里至少有一位 ICU 程序员,他在我在其他地方写过和看到的其他帖子中也提供了很大的帮助。我将不胜感激任何我能找到的帮助。预先感谢您!

最佳答案

音译器源自 CLDR - 您可以将音译器添加到 CLDR(crosswire 目录在 cldr/目录中包含 XML 格式的音译器)并重建 ICU 数据。 ICU 没有像您尝试的那样添加音译器的简单机制。我要做的就是忘记 trnslocal.mk 或 custom.txt,因为您不需要添加任何文件,只需修改 root.txt - 如果您有建议的改进,您可能会提交错误。

关于unicode - ICU自定义音译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6270357/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com