5
从the boost::locale documentation使用示例代码,我不能让下面以中国文字正确记号化:使用boost ::现场/ ICU边界分析中国
using namespace boost::locale::boundary;
boost::locale::generator gen;
std::string text="中華人民共和國";
ssegment_index map(word,text.begin(),text.end(),gen("zh_CN.UTF-8"));
for(ssegment_index::iterator it=map.begin(),e=map.end();it!=e;++it)
std::cout <<"\""<< * it << "\", ";
std::cout << std::endl;
这种分裂中華人民共和國到七个不同的角色中/华/人/民/共/和/国,而不是中华/人民/共和国。与Boost编译的documentation of ICU声称,中文应该开箱即用,并使用基于字典的标记器正确地分割短语。在上面的代码中用“ja_JP.UTF-8”语言环境做的工作,但是这个标记化不依赖于字典,只能在汉字上使用示例日语测试短语“生きるか死ぬか,それが问题だ。” /假名边界。
我已经在ICU中直接尝试了相同的代码,建议here,但结果是一样的。
UnicodeString text = "中華人民共和國";
UErrorCode status = U_ZERO_ERROR;
BreakIterator* bi = BreakIterator::createWordInstance(Locale::getChinese(), status);
bi->setText(text);
int32_t p = bi->first();
while (p != BreakIterator::DONE) {
printf("Boundary at position %d\n", p);
p = bi->next();
}
delete bi;
任何想法我做错了什么?