elsur.jpn.org >

« 読了:阿部(2014) (最近の経済学でいうところの)構造モデリングとはなにか | メイン | 覚え書き:香港映画ベスト100 [監督編 Part 1] »

2019年8月30日 (金)

 このブログには、ソフトのインストールにまつわる覚え書きのようなものは書かないことにしているんだけど、今回はあまりに時間をかけてしまったので、なんとなく記録してしまう次第である。
 Rで日本語テキストの形態素解析を行う際の定番パッケージ RMeCab が、WindowsのR 64bit環境ではうまく動かないことがある、という問題について。
 以下、環境は Windows 7 x64 build 7601, R 3.6.1, Rtools 3.5.0.4である。

MeCab正規版の場合

まずはMeCabのインストール。https://taku910.github.io/mecab/ からmecab-0.996.exeをダウンロードしてインストールした。辞書はSHIFT-JIS, インストール先はC:\MeCabとした。PATHにC:\MeCab\binを追加し、コマンドラインから動作を確認。

おつぎはRMeCabのインストール。RStudioを立ち上げて

> install.packages("RMeCab", repos = "http://rmecab.jp/R")
> library(RMeCab)
> res <- RMeCabC("すもももももももものうち")

なんと、R Session Abortedとなる。なぜだー。

RMeCabをソースから再インストール。

> install.packages("RMeCab", repos = "http://rmecab.jp/R", type = "source")

すると、32bitのほうは... (以下、C:/Users/の直下のフォルダ名を伏字にしてます)

C:/Rtools/mingw_32/bin/g++ -shared -s -static-libgcc -o RMeCab.dll tmp.def Ngram.o NgramDF.o NgramDF2.o RMeCab.o RMeCabC.o RMeCabDoc.o RMeCabFreq.o RMeCabMx.o RMeCabText.o collocate.o docDF.o docMatrix2.o docMatrixDF.o docNgram2.o docNgramDF.o setMeCabMap.o -L/usr/local/lib -lmecab -LC:/PROGRA~1/R/R-36~1.1/bin/i386 -lR
installing to C:/Users/xxx/Documents/R/win-library/3.6/00LOCK-RMeCab/00new/RMeCab/libs/i386

と無事通過するんだけど、64bitのほうは

C:/Rtools/mingw_64/bin/g++ -shared -s -static-libgcc -o RMeCab.dll tmp.def Ngram.o NgramDF.o NgramDF2.o RMeCab.o RMeCabC.o RMeCabDoc.o RMeCabFreq.o RMeCabMx.o RMeCabText.o collocate.o docDF.o docMatrix2.o docMatrixDF.o docNgram2.o docNgramDF.o setMeCabMap.o -L/usr/local/lib -lmecab -LC:/PROGRA~1/R/R-36~1.1/bin/x64 -lR
C:/Rtools/mingw_64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.3/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lmecab
collect2.exe: error: ld returned 1 exit status
DLLは生成されませんでした
ERROR: compilation failed for package 'RMeCab'
* removing 'C:/Users/xxx/Documents/R/win-library/3.6/RMeCab'
* restoring previous 'C:/Users/xxx/Documents/R/win-library/3.6/RMeCab'
Warning in install.packages :
installation of package ‘RMeCab’ had non-zero exit status

というわけで、インストールに失敗する。な・ぜ・だー。

先人の残した貴重なメモ http://shimocchi.hatenablog.jp/entry/2017/07/04/172302 を研究し、これはずいぶん手間がかかる話だ、と悟った。

まずはVisual Studio Build Tools 2017のインストール。https://visualstudio.microsoft.com/ja/thank-you-downloading-visual-studio/?sku=BuildTools&rel=15 からインストーラをダウンロードし、Visual Studio Build Tools 2017を選択。

次に、MeCabのソースをダウンロード。https://taku910.github.io/mecab/ からmecab-0.996.tar.gzをダウンロードし、C:\work\mecab-0.996に展開。

ソースコードの修正。https://qiita.com/tobesan/items/6b6f3a025fdd177ef52a の教えに従い、Makefile.msvc.in, feature_index.cpp, mecab.h, writers.cpp, common.hを修正。なお、writer.cppは、左記ページで説明されている旧コード(260行目)と実際のコードが異なっていたので悩んだが、新コードに修正した。

管理者権限でコマンドプロンプトを起動し、

>cd c:\work\mecab-0.996\src
>call "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" amd64
>nmake -f Makefile.msvc.in

なんかものすごくいろんなメッセージが出て怖かったのだが、とにかく、C:\work\mecab-0.996\src\libmecab.dllというファイルが生成された。

ライブラリのコピー。管理者権限で、C:\MeCab\bin\libmecab.dll を C:\Program Files\R\R-3.6.1\bin\i386 にコピー。C:\work\mecab-0.996\src\libmecab.dll を C:\Program Files\R\R-3.6.1\bin\x64 にコピー。

ふたたびRStudioを立ち上げて

> install.packages("RMeCab", repos = "http://rmecab.jp/R", type = "source”)

正常終了!
 祈るような気持ちで

> library(RMeCab)
> res <- RMeCabC("すもももももももものうち")

と試してみたところ... 無情にも、やはり R Session Abortedになる。なーぜーだー。

 このようにRが落ちてしまうのはR 64bit版の場合であって、32bit版ならちゃんと動作する。 RMeCabを使いたくなるたびにR を32bit版に切り替えればいいんだけど、でも、そんなの嫌じゃないですか。
 R 64bitでRMeCabが動かないことがあるというのは、新発見でもなんでもない。RMeCab開発者の先生もちゃんと注記して下さっている。諦めきれない私が悪いのです。

 他にもいろいろなことを試したのだが、メモは省略する。
 数時間粘ってついに断念。やけになって、C:\Program Files\R\R-3.6.1\bin\ の下にコピーしたライブラリを削除し、 mecab をきれいさっぱりアンインストールし、PATHを元に戻し、C:\Users\xxx\Documents\R\win-library\3.6 のRMeCabを削除し、PCをシャットダウンし、買い物に出かけた。

MeCab 64bit版の場合

 世の中には奇特な方がいらっしゃるもので、Windows 64bit 用にMeCabをビルドして下さっている方がいらっしゃることに気が付いた。
 ありがたいことだ... というわけで、再挑戦。

 https://github.com/ikegami-yukino/mecab/releases から mecab-64-0.993.2.exeをダウンロードしインストール。辞書はSHIFT-JIS, 話がややこしくなるのが怖くてインストール先は変更せず、C:\Program Files\MeCab のままとした。PATHにC:\Program Files\MeCab\binを追加。
 コマンド・プロンプトから動作確認したがエラーとなる。しばし悩んだうえ、環境変数 MECABRC=C:\Program Files\MeCab\etc\mecabrc を定義。無事動作することを確認した。

 RStudioを立ち上げ、RMeCabをインストールしてみると...

> install.packages("RMeCab", repos = "http://rmecab.jp/R")
> library(RMeCab)
> res <- RMeCabC("すもももももももものうち")
> res
[[1]]
名詞
"すもも"

[[2]]
助詞
"も"

[[3]]
名詞
"もも"

[[4]]
助詞
"も"

[[5]]
名詞
"もも"

[[6]]
助詞
"の"

[[7]]
名詞
"うち"

う...動いた....!!!
 というわけで、無事に難関を突破したという喜びと、これにいったい何時間かけたんだという虚脱感で、しばし呆然とディスプレイを眺めたのであった。
 
 なお、上記は R 64bit だけでなく R 32bitでも動く。また、install.packages("RMeCab", repos = "http://rmecab.jp/R", type = "source") は失敗する。

 正直疲れましたが、ともあれ、MeCab開発者のみなさま、RMeCab開発者のみなさま、Web上で情報を提供して下さっている皆々様にお礼申し上げますです。

雑記 - 覚え書き:Windows上の R x64 で RMeCabが動かない問題

rebuilt: 2022年3月 1日 19:15
validate this page