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

アールメカブ


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


  • 追加された行はこの色です。
  • 削除された行はこの色です。
[[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"/ ,、。!?.!?"  /* 区切り文字 */
 ...
 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 から引数で渡すしかない.