Closed StatsBeginner closed 1 year ago
以下でインストールできないでしょうか?
install.packages("RMeCab", repos="https://rmecab.jp/R", type = "source")
最初、その方法を試して以下のようなエラーがでました。
install.packages("RMeCab", repos="https://rmecab.jp/R", type = "source")
Installing package into ‘/home/ec2-user/R/x86_64-koji-linux-gnu-library/4.0’
(as ‘lib’ is unspecified)
trying URL 'https://rmecab.jp/R/src/contrib/RMeCab_1.05.tar.gz'
Content type 'application/x-gzip' length 61195 bytes (59 KB)
downloaded 59 KB
* installing *source* package ‘RMeCab’ ...
** using staged installation
** libs
g++ -m64 -std=gnu++11 -I"/usr/include/R" -DNDEBUG -I. -I/usr/local/include -fpic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -c Ngram.cpp -o Ngram.o
g++ -m64 -std=gnu++11 -I"/usr/include/R" -DNDEBUG -I. -I/usr/local/include -fpic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -c NgramDF.cpp -o NgramDF.o
g++ -m64 -std=gnu++11 -I"/usr/include/R" -DNDEBUG -I. -I/usr/local/include -fpic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -c NgramDF2.cpp -o NgramDF2.o
g++ -m64 -std=gnu++11 -I"/usr/include/R" -DNDEBUG -I. -I/usr/local/include -fpic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -c RMeCab.cpp -o RMeCab.o
RMeCab.cpp:25:1: warning: multi-line comment [-Wcomment]
//#define CHECK(eval) if (! eval) { \
^
g++ -m64 -std=gnu++11 -I"/usr/include/R" -DNDEBUG -I. -I/usr/local/include -fpic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -c RMeCabC.cpp -o RMeCabC.o
g++ -m64 -std=gnu++11 -I"/usr/include/R" -DNDEBUG -I. -I/usr/local/include -fpic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -c RMeCabDoc.cpp -o RMeCabDoc.o
g++ -m64 -std=gnu++11 -I"/usr/include/R" -DNDEBUG -I. -I/usr/local/include -fpic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -c RMeCabFreq.cpp -o RMeCabFreq.o
g++ -m64 -std=gnu++11 -I"/usr/include/R" -DNDEBUG -I. -I/usr/local/include -fpic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -c RMeCabMx.cpp -o RMeCabMx.o
g++ -m64 -std=gnu++11 -I"/usr/include/R" -DNDEBUG -I. -I/usr/local/include -fpic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -c RMeCabText.cpp -o RMeCabText.o
g++ -m64 -std=gnu++11 -I"/usr/include/R" -DNDEBUG -I. -I/usr/local/include -fpic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -c collocate.cpp -o collocate.o
collocate.cpp: In function ‘SEXPREC* collocate(SEXP, SEXP, SEXP, SEXP)’:
collocate.cpp:220:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
while( (z + y) <= vec1.size()){// node後の語の処理
~~~~~~~~^~~~~~~~~~~~~~
g++ -m64 -std=gnu++11 -I"/usr/include/R" -DNDEBUG -I. -I/usr/local/include -fpic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -c docDF.cpp -o docDF.o
g++ -m64 -std=gnu++11 -I"/usr/include/R" -DNDEBUG -I. -I/usr/local/include -fpic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -c docMatrix2.cpp -o docMatrix2.o
g++ -m64 -std=gnu++11 -I"/usr/include/R" -DNDEBUG -I. -I/usr/local/include -fpic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -c docMatrixDF.cpp -o docMatrixDF.o
g++ -m64 -std=gnu++11 -I"/usr/include/R" -DNDEBUG -I. -I/usr/local/include -fpic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -c docNgram2.cpp -o docNgram2.o
g++ -m64 -std=gnu++11 -I"/usr/include/R" -DNDEBUG -I. -I/usr/local/include -fpic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -c docNgramDF.cpp -o docNgramDF.o
g++ -m64 -std=gnu++11 -I"/usr/include/R" -DNDEBUG -I. -I/usr/local/include -fpic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -c setMeCabMap.cpp -o setMeCabMap.o
g++ -m64 -std=gnu++11 -shared -L/usr/lib64/R/lib -Wl,-z,relro -o RMeCab.so 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 -L/usr/lib64/R/lib -lR
installing to /home/ec2-user/R/x86_64-koji-linux-gnu-library/4.0/00LOCK-RMeCab/00new/RMeCab/libs
** R
** byte-compile and prepare package for lazy loading
** help
*** installing help indices
converting help for package ‘RMeCab’
finding HTML links ... done
Ngram html
NgramDF html
NgramDF2 html
RMeCabC html
RMeCabDF html
RMeCabDoc html
RMeCabFreq html
RMeCabMx html
RMeCabText html
coOccurrence html
collScores html
collocate html
docDF html
docMatrix html
docMatrix2 html
docMatrixDF html
docNgram html
docNgram2 html
docNgramDF html
print.docMatrix html
rmSign html
weights html
** building package indices
** testing if installed package can be loaded from temporary location
Error: package or namespace load failed for ‘RMeCab’ in dyn.load(file, DLLpath = DLLpath, ...):
unable to load shared object '/home/ec2-user/R/x86_64-koji-linux-gnu-library/4.0/00LOCK-RMeCab/00new/RMeCab/libs/RMeCab.so':
libmecab.so.2: cannot open shared object file: No such file or directory
Error: loading failed
Execution halted
ERROR: loading failed
* removing ‘/home/ec2-user/R/x86_64-koji-linux-gnu-library/4.0/RMeCab’
Warning in install.packages :
installation of package ‘RMeCab’ had non-zero exit status
The downloaded source packages are in
‘/tmp/Rtmp0gLMtB/downloaded_packages’
そこで、
install.packages("remotes") remotes::install_github("IshidaMotohiro/RMeCab")
を試したところ、
package 'RMeCab' requires R >= 4.2.0
というエラーがでたという経緯になります。
別途 MeCab をインストールする必要があるのですが、エラーを見ると、MeCabがはいっていないように見受けられます。
入っていない場合、AWS MeCab Amzon Linux で検索し、比較的新しいブログなどを参考して、インストールしてみてください。
例: https://qiita.com/hoto17296/items/7add794de677112566bc
SagerMaker の Juputer仮想環境上で MeCab を使う場合は、ちょっと調整が必要かもしれません。
何度も申し訳ありません、MeCab自体のインストールは終わっておりまして、EC2のシェルから実行可能な状態にはなっております。
[ec2-user@ip-xxx-xx-xx-xxx ~]$ mecab
すももももももものうち。
すもも 名詞,一般,*,*,*,*,すもも,スモモ,スモモ
もも 名詞,一般,*,*,*,*,もも,モモ,モモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも 名詞,一般,*,*,*,*,もも,モモ,モモ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
うち 名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
。 記号,句点,*,*,*,*,。,。,。
EOS
ちなみにlibmecab.so.2というファイルは、 /usr/src/mecab/mecab/src/.libs/libmecab.so.2 という位置にありました。
もしかすsると、mecabをインストールする場所が悪かったのでしょうか。 mecabのインストールは、homebrewからだとCコンパイラーが動きませんというエラーがでて(gccはじめ必要と思われるツール類はインストールしてあるつもりなのですが)だめだったので、 https://libproc.com/install-mecab-on-linux/ このページを参考に、以下のような作業でインストールしました。
$ cd /usr/src
$ sudo git clone https://github.com/taku910/mecab.git
$ cd mecab/mecab
$ sudo ./configure --enable-utf8-only
$ sudo make & make check
$ sudo make install
Rが /usr/src/mecab/mecab/src/.libs/以下を、ライブラリパスとして認識していないようです。 (わたしもAmazon Linux を使っていますが、 特にトラブルが起こったことはないです)。
そのパスを認識させれば良いということになりますが、
sudo ldconfig
を実行してから、RMeCabのインストールを試してみます。失敗する場合ですが、(失敗しそうな気がしますが)
とりあえずライブラリパスに /usr/src/mecab/mecab/src/.libs/ を加える。また辞書の場所を正確に指定する。(Amazon Linux でのライブラリ関連のパスをちょっといま確認できないので、いま、説明しかねます)
MeCabと辞書をそれぞれ make uninstall で削除し、confiugre時に、それぞれ次のオプションを加えてインストールし直す。
本体
./configure --prefix=/usr/local --with-charset=utf8 --enable-utf8-only
辞書
./configure --with-mecab-config=/usr/local/bin/mecab-config --prefix=/usr/local --with-charset=utf8 --with-dicdir=/usr/local/mecab-dic/ipadic-utf8
2のほうが確実そうな気がしますが、そもそもオプション無しでインストールした場合に、/usr/src/mecab/mecab/src/.libs/ が生成されるようなので、うまく行かないかもしれません。
ちょっと気になったので、いまインスタンスを立ててやってみました。以下の手順で特にオプションを指定せずに実行すると、MeCabのデフォルトのライブラリパスにインストールされますが、Amazon Linux がそれを認識していないので、exportでライブラリパスを指定して実行すると、動きます。 ライブラリパスは .bashrc に書き込んでおくことで永続化されます。
[ec2-user@ip-172-31-33-10 ~]$ sudo yum install git gcc-c++
[ec2-user@ip-172-31-33-10 ~]$ git clone https://github.com/taku910/mecab.git
[ec2-user@ip-172-31-33-10 ~]$ cd mecab/mecab
[ec2-user@ip-172-31-33-10 ~]$ ./configure --with-charset=utf8
[ec2-user@ip-172-31-33-10 ~]$ sudo make install
[ec2-user@ip-172-31-33-10 ~]$ cd ../mecab-ipadic/
[ec2-user@ip-172-31-33-10 ~]$ ./configure --with-charset=utf8
[ec2-user@ip-172-31-33-10 ~]$ sudo make install
[ec2-user@ip-172-31-33-10 ~]$ sudo amazon-linux-extras install R4
[ec2-user@ip-172-31-33-10 ~]$ export LD_LIBRARY_PATH="/usr/local/lib"
[ec2-user@ip-172-31-33-10 ~]$ R
...
> install.packages("RMeCab", repos="https://rmecab.jp/R")
パッケージを ‘/home/ec2-user/R/x86_64-koji-linux-gnu-library/4.0’ 中にインストールします
.....
* DONE (RMeCab)
ダウンロードされたパッケージは、以下にあります
‘/tmp/RtmpGy5tzI/downloaded_packages’
> library(RMeCab)
> RMeCabC("すもももももももものうち")
[[1]]
名詞
"すもも"
[[2]]
助詞
"も"
...
[ec2-user@ip-172-31-33-10 ~]$ cd
[ec2-user@ip-172-31-33-10 ~]$ echo 'LD_LIBRARY_PATH="/usr/local/lib"' >> .bashrc
ありがとうございます。 ちょうど、Rから /usr/src/mecab/mecab/src/.libs/ を.libPaths()に追加する方法で解決したところでした(.Rprofileを使用)。 シェルの環境変数に書き込んでもよい旨、別のインスタンスを立ち上げるときのために覚えておきます。 というかまぁ、最初からオプションつきでインストールすればいいんですね……。 ありがとうございました。
mecabとipadicを両方ともsudo make uninstallしてから、以下で再インストールしてみたのですが、
$ git clone https://github.com/taku910/mecab.git
$ cd mecab/mecab
$ ./configure --prefix=/usr/local --with-charset=utf8 --enable-utf8-only
$ sudo make install
$ cd ../mecab-ipadic/
$ ./configure --with-mecab-config=/usr/local/bin/mecab-config --prefix=/usr/local --with-charset=utf8 --with-dicdir=/usr/local/mecab-dic/ipadic-utf8
$ sudo make install
するとこんどは、インストールできたかのような感じになり、mecab -vと打てばバージョンが表示されるのですが、ターミナルでmecabと打つと
param.cpp(69) [ifs] no such file or directory: /usr/local/lib/mecab/dic/ipadic/dicrc
というエラーが表示されて、mecabを起動させることはできませんでした。
辞書を一旦アンインストールして以下を実行して試してみてください。
$ ./configure --with-mecab-config=/usr/local/bin/mecab-config --prefix=/usr/local --with-charset=utf8
ありがとうございます。 いったんMeCabとipadicをアンインストールして整理した結果、自分のEC2環境では、
$ git clone https://github.com/taku910/mecab.git
$ cd mecab/mecab
$ ./configure --prefix=/usr/local --with-charset=utf8 --enable-utf8-only
$ sudo make install
$ cd ../mecab-ipadic/
$ ./configure --with-mecab-config=/usr/local/bin/mecab-config --prefix=/usr/local --with-charset=utf8
$ sudo make install
$ echo 'LD_LIBRARY_PATH="/usr/local/lib/"' >> ~/.bashrc
$ sudo vi /etc/ld.so.conf # このファイルに/usr/local/lib/を追記
$ sudo ldconfig # ld.so.confを反映
というふうにすると、bashからMeCabを使うことができ、またRMeCabのインストールもうまく行きました。
パターンを変えて検証しましたが、最後の3行は全部実行しないと、RMeCabのインストール時に
libmecab.so.2: cannot open shared object file: No such file or directory
のエラーがでるという状況でした。
この件ですが --prefix 指定はいらないと思います。最初に 「ちなみにlibmecab.so.2というファイルは、/usr/src/mecab/mecab/src/.libs/libmecab.so.2 という位置にありました。」 と書かれていたのは、ライブラリの「インストール先」ではなく、「ビルドした場所」ということですね。 「$ cd /usr/src」 をソースファイルの取得直前に実行されていることに、今気がつきました。
なるほど、ありがとうございます。
それでは、本Issueはクローズします。
ちなみに以下ですが、前者は個人アカウントでのライブラリパス指定で、後者はシステム全体でのパス指定です。前者を反映させるには、ログインし直すか、一旦ログアウトするのを避けたければ export なり source なりのコマンドを実行する必要があります。
$ echo 'LD_LIBRARY_PATH="/usr/local/lib/"' >> ~/.bashrc
$ sudo vi /etc/ld.so.conf && sudo ldconfig # このファイルに/usr/local/lib/を追記
AWSのEC2(Linux)上でRを使っているのですが、現時点では「R-4.0.2-5.amzn2.0.1.x86_64」が最新となっております。 RMeCabをインストールしようとすると、 "package 'RMeCab' requires R >= 4.2.0" となって、インストールできませんでした。 Rの旧バージョン向けのものは公開されていないでしょうか?