2015-03-13 21 views
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; 

任何想法我做错了什么?

回答

1

您最有可能使用5.0之前的ICU版本,这是第一个支持基于字典的中文分词的版本。

此外,请注意,默认情况下升压会将ICU用作本地后端,因此会产生镜像结果。