« MeCab (和布蕪) 辞書の構築 | メイン | Sennaのインストールレス化 »

2006年02月19日

Web関連の開発日誌:: MeCab の設定ファイル

    

MeCab は実行時に mecabrc ファイルを参照する。
Windows環境下では、 mecabrc ファイルの位置はまずレジストリを参照して見つからなければ、デバッグオプションの MECAB_DEFAULT_RC で指定されたパスを見る。
そして、これはデフォルトだと c:\Program Files\mecab\etc\mecabrc になっている。
これだと任意の位置にMeCab を置きたい場合に困るので、何とかしたい。
そこで、DLLが置かれている位置と同じフォルダにmecabrc ファイルを置き、それを参照してくれるようにすることにした。

そこでまずはDllMainを次のように変更した。

HINSTANCE gDllInst = NULL;
BOOL __stdcall DllMain( HINSTANCE hInst, DWORD dwReason, void* )
{
  if( gDllInst == NULL ) gDllInst = hInst;
  return( TRUE );
}

次に、この変数を参照するために、tagger.cppの std::string getDefaultRc (Param &param) 関数の前に次のようにextern HINSTANCE gDllInstを追加。

#if defined (_WIN32) && ! defined (__CYGWIN__)
extern HINSTANCE gDllInst;
#endif

最後にstd::string getDefaultRc (Param &param) 関数内の return std::string (MECAB_DEFAULT_RC); の前のif define内に

vt = GetModuleFileName( gDllInst, v, size );
if(vt != 0)
{
  char drive[_MAX_DRIVE];
  char dir[_MAX_DIR];
  _splitpath( v, drive, dir, NULL, NULL );
  return std::string(drive) + std::string(dir) + std::string("mecabrc");
}

を追加した。
これで、MeCab がインストールされていなくてレジストリに登録されていない場合、DLLが置かれたディレクトリにあるmecabrc ファイルを参照してくれるようになる。
インストールなしでコピーするだけで使えるようにするには、こうなっていた方が使い勝手がいいだろう。



投稿者 Takenori : 2006年02月19日 19:12




comments powered by Disqus
Total : Today : Yesterday : なかのひと