2010年11月14日日曜日

読みを取り出す

追記: portで入れた辞書の利用にはdylibを/opt/local/lib/libmecab.dylibにして, 'mecab_new2("-d /opt/local/lib/mecab/dic/ipadic-utf8/");'と引数を与える.



動機
Mecabに関する前回の結果から読みを取り出せないか?ということで挑戦.


やってみた
0.どうもappleの辞書では読みが取り出せない(おいらのやり方がわるいためだろうか).
1.portでmecabのutf-8の辞書を入れてみる.('sudo port install mecab-ipadic-utf8')
2.mecabの分析を以下のように変更
- (NSArray *)mecabResultWithString:(NSString *)input
{
NSMutableArray *ret= [NSMutableArray array];
if (input==nil || [input length]==0)
return ret;
const char *buf= [input cStringUsingEncoding:NSUTF8StringEncoding];
NSUInteger l= [input lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
const mecab_node_t *node = mecab_sparse_tonode2(mecab, buf, l);
if (node == NULL) {
return ret;
}
node = node->next;
for (; node->next != NULL; node = node->next) {
NSString *f = [NSString stringWithCString:node->feature encoding:NSUTF8StringEncoding];
NSString *yomi= [[f componentsSeparatedByString:@","] objectAtIndex:7];
[ret addObject:yomi];

}
return ret;
}

3.読みをローマ字にしてみた.
  int i, ic= [mecabResult count];
NSMutableString *str= [NSMutableString string];
for(i= 0;i<ic;i++) {
[str appendFormat:@"%@ ", [mecabResult objectAtIndex:i]];
}
CFStringTransform(str, NULL, kCFStringTransformHiraganaKatakana, YES); //カタカナ→ひらがな
CFStringTransform(str, NULL, kCFStringTransformLatinHiragana, YES); //ひらがな→ローマ字(?)
NSLog(@"%@", str);

4.発声してみるならこういうコードらしい
 NSSpeechSynthesizer *synth = [[NSSpeechSynthesizer alloc] init];
[synth startSpeakingString:str];
[synth autorelease];


結果
入力: 微かなオレンジの香りが残っていた
出力: kasuka na orenji no kaori ga noko~tsu te i ta

0 件のコメント: