0

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が文字を1つずつ音訳することです。しかし、私が探しているのは、以下のテキストのようなものです(中国語はわからないので、おそらく以下のテキストは何の意味もありませんが、私が興味を持っている出力の種類を示しているはずです) :

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ǐ

ICU 50は単語のセグメンテーションが可能であると言われましたが、彼らのWebページにもWebにもドキュメントが見つかりませんでした。ICUで単語のセグメンテーションを使用したことがあるか、その方法を知っているか、またはその方法に関する適切なリンクがあるかどうかを知りたいと思いました。

4

2 に答える 2

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;
于 2012-11-28T16:14:27.657 に答える
0

これは私がICUのメーリグリストから得た返事です:

「新しいオンラインデモも進行中です。これは、中国語が選択されたときに、セグメンテーションを実行し、テキストを次のように分割します。これがお役に立てば幸いです。」

直接
输出
html
代码
而不是
作为
函数
返回
值
代
后
处理

これで問題は解決します。探しているものを取得するには、この出力を音訳する必要があります。

于 2012-11-28T07:19:58.217 に答える