0

言語分析フレームワークは推奨されておらず、64 ビットでも使用できません。ドキュメントには、 CFStringTokenizer を使用すると書かれていますが、トークナイザーは言語分析フレームワークで利用できる機能を提供していません。

言語解析フレームワークが提供する形態素解析 API の代わりとなるものは何ですか?

編集: Pantong の返信は役に立ちましたが、すべての場合に機能するとは限りません。たとえば、漢字が 3 ~ 4 文字の単語の場合、間違った結果が返されます。(間違っているとは、同じ文字列に対して Lang 分析フレームワーク API によって返されたものと同じではないことを意味します)。

a) 現人神はラテン語に変換されます - 'gen ren shen' ひらがなでは 'げんじんしん' ですが、ラテン語では 'Aarahitogami' でひらがなでは 'あらひとがみ' です。

b) 安本丹はラテン語に変換されます - 「an ben dan」、ひらがなでは「やすもとまこと」ですが、ラテン語では「yasumoto makoto」、ひらがなでは「あんぽんたん」となります。

4

1 に答える 1

1

非推奨の形態素解析 API の機能の 1 つは、「日本語/中国語テキストのルディ テキストを取得する」ことです。その特定の機能の置き換えを求める場合、次のコードは一例です。ただし、形態素解析 API の他の機能の置き換えについてはわかりません。

CFStringRef testString = CFSTR("のちに検知されたトークンの範囲用として使用");

CFStringTokenizerRef tokenizer = CFStringTokenizerCreate(kCFAllocatorDefault,
                                                         testString,
                                                         CFRangeMake(0, CFStringGetLength(testString)),
                                                         kCFStringTokenizerUnitWordBoundary,
                                                         CFLocaleCreate(kCFAllocatorDefault, CFSTR("Japanese")));
do
{
    if (CFStringTokenizerAdvanceToNextToken(tokenizer) == kCFStringTokenizerTokenNone) {
        break;
    }

    CFStringRef originalToken = CFStringCreateWithSubstring(kCFAllocatorDefault,
                                                            testString,
                                                            CFStringTokenizerGetCurrentTokenRange(tokenizer));

    // Get Latin transcription from the Japanese text
    CFMutableStringRef convertedToken = (CFMutableStringRef)CFStringTokenizerCopyCurrentTokenAttribute(tokenizer,
                                                                            kCFStringTokenizerAttributeLatinTranscription);
    NSLog(@"token: %@ -> latin: %@", originalToken, convertedToken);

    // Get kana from Latin transcription
    CFStringTransform(convertedToken, NULL, kCFStringTransformLatinHiragana, false);
    NSLog(@"token: %@ -> latin: %@", originalToken, convertedToken);
}
while (true);
于 2013-07-24T21:43:01.123 に答える