[[Rの備忘録]] #contents * CaBocha は 0.60 以降でないと動かない. [#c08ec8e7] [[ここからダウンロード:http://sourceforge.net/projects/cabocha/]]して,インストールしましょう. *Windows版の場合 [#sa597f65] CaBoCha\bin フォルダの libcabocha.lib からライブラリファイルを次のように作成する必要はなかった. > C: \Rtools\minGW\bin\pexports.exe libcabocha.dll > libcabocha.def > C: \Rtools\minGW\bin\dlltool --input-def libcabocha.def --output-lib libcabocha.lib ということは,libmecab.dll でも,これは実行しなかったのかな.[[R.dll だけ実行した>hidden_R_Packages]]のだろうか. * CaBoCha Checkでキャスト [#n44e22ac] #define CHECK(eval) if (! eval) { \ fprintf (stderr, "Exception:%s\n", cabocha_strerror(cabocha)); \ cabocha_destroy(cabocha); \ return (SEXP) -1; } を忘れてはいけない. * まとまった節を文を単位に区切る. [#peb0fd33] こうするしかないのだろうか? #define DELIMITER L"/ ,、。!?.!?" /* 区切り文字 */ #define DELIMITER L" ,、。!?.!?" /* 区切り文字 */ ... setlocale(LC_ALL, ""); wchar_t *endptr = NULL; ... mbstowcs(wbuf, p, 100); sentences = wcstok(wbuf, DELIMITER, &endptr); while(sentences != NULL){ wcstombs(str,sentences, 100); tree = const_cast<cabocha_tree_t*> (cabocha_sparse_totree(cabocha, str) ); CHECK(tree); size = cabocha_tree_token_size(tree); cid = 0; for (i = 0; i < size; ++i) { const cabocha_token_t *token = cabocha_tree_token(tree, i); if (token->chunk != NULL){ cid++; linkN = token->chunk->link; } strcpy(buf1, token->feature); node = strtok(buf1, ","); j = 1; while(node != NULL){ ... * wcstok は UTF-8で [#yf3ca6a7] ということらしいので,Windows版では CPP ソースファイルだけUTF-8にした.従って,コード内に日本語文字をハードコーディングできない.R から引数で渡すしかない.