c++ - 使用 ICU 进行分词

标签 c++ cjk icu transliteration text-segmentation

我正在使用 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/

相关文章:

c++ - Visual Studio 调试控制台中的 log4cplus 日志

c++ - 适用于 Windows/Linux/Mac 的 C++ 和 G++ 纯 GUI 应用程序

unicode - 多字节字符集中的换行控制字符

javascript - ReactJS/ES6 : Searching Japanese text using includes?

c++ - 在C++中动态检测文件的字符集

c++ - ICU 和字符串比较

c++ - 无法修改类组合数据成员

C++ 从扩展中将 HTML 写入两个已打开的 Firefox 选项卡中的每一个

python - 使用正则表达式将韩文文本解析为列表

delphi - 有人用过德尔福的ICU吗?