RCaBoCha_make のバックアップ(No.4) - アールメカブ

アールメカブ


RCaBoCha_make のバックアップ(No.4)


Rの備忘録

_ CaBocha? は 0.60 以降でないと動かない.

ここからダウンロードして,インストールしましょう.

_ Windows版の場合

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 だけ実行したのだろうか.

_ CaBoCha Checkでキャスト

#define CHECK(eval) if (! eval) { \
   fprintf (stderr, "Exception:%s\n", cabocha_strerror(cabocha)); \
   cabocha_destroy(cabocha); \
   return (SEXP) -1; }

を忘れてはいけない.

_ まとまった節を文を単位に区切る.

こうするしかないのだろうか?

#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で

ということらしいので,Windows版では CPP ソースファイルだけUTF-8にした.従って,コード内に日本語文字をハードコーディングできない.R から引数で渡すしかない.