我正在使用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中使用过分词或知道如何进行分词,或者您是否有很好的链接来做到这一点。

最佳答案

“基于字典的迭代器”不是不同的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;

关于c++ - 使用ICU的分词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13494910/

10-13 07:03