我正在使用ICU4C来音译CJK。我想知道是否有可能在ICU中进行分词,将中文文本分成一系列单词,根据某些分词标准定义。
当我尝试音译时,例如:
直接输出html代码而不是作为函数返回值代后处理
使用
Transliterator* myTrans =
Transliterator::createInstance("zh-Latin",UTRANS_FORWARD, err);
UnicodeString str;
str.setTo("直接输出html代码而不是作为函数返回值代后处理");
myTrans->transliterate(str);
str.toUTF8String(st);
std::cout << st << std::endl;
我得到以下输出:
zhí jiē shū chū html dài mǎ ér bù shì zuò wèi hán shù fǎn huí zhí dài hòu chù lǐ
检查在线拼音工具似乎完全没问题,但我的问题是ICU逐字逐字翻译。我正在寻找的东西更像下面的文字(我不知道任何中文,所以下面的文字可能没有任何意义,但它应该展示我感兴趣的输出类型) :
zhíjiē shūchū html dàimǎér bùshì zuò wèihán shùfǎn huízhídài hòu chùlǐ
I have been told ICU 50能够进行分词,但我无法在网页上找到任何文档。想知道你们中是否有人在ICU工作过分词或者知道怎么做,或者你们是否有如此方法的良好联系。
答案 0 :(得分:1)
“基于字典的迭代器”不是一个不同的API。只需使用适当的区域设置ID创建ICU字断点迭代器。
icu / source / samples / break中有ICU附带的C / C ++示例
以下示例代码还显示了单词: http://source.icu-project.org/repos/icu/icuapps/trunk/iucsamples/c/s24_brkw/s24_brkw.cpp http://source.icu-project.org/repos/icu/icuapps/trunk/iucsamples/c/s23_brki/
可能是这样的:
BreakIterator *wordIterator = BreakIterator::createWordInstance(Locale("zh"), status);
UnicodeString text = "Unicode provides a unique number for every character, no matter what the platform, no matter what the program, no matter what the language.";
wordIterator->setText(text);
int32_t breakCount = 0;
int32_t start = wordIterator->first();
for(int32_t end = wordIterator->next();
end != BreakIterator::DONE;
start = end, end = wordIterator->next())
{
breakCount++;
}
delete wordIterator;
答案 1 :(得分:0)
这是我从ICU的邮件列表中得到的回复:
“还有一个全新的online demo正在进行中,它会进行细分并将文本拆分为以下内容 - 选择中文时。希望这会有所帮助。”
直接
输出
html
代码
而不是
作为
函数
返回
值
代
后
处理
这可以解决我的问题,我需要音译这个输出以获得我想要的东西。