最近、研究でDoc2vecに手を出しはじめたのですが、Wikipediaのデータで学習モデルを作る段階でいろいろつまづいて悲しい思いをしたので(最終的にはなんとかなったものの)、2度とこのような思いをしないためのメモです。
ちなみにこれが初投稿なので、変なところがあったらすみません。
■ 主な内容
- Wikipediaからダンプデータをダウンロードする
- bundleを使ってwp2txtをインストール
- rbenvを用いたruby2.3.0のインストール
- wp2txtを使ってダンプデータを使える状態にする
自分がやった流れは簡単に言うと以上です。
しかし、最後の方に色々あって、結局どの手順が最適解なのかがわからなくなってしまったので、あまり他の人の参考にはならないかもしれません。
特に、途中のbundleを使ったwp2txtのインストール
が結果的に意味があったのかわかりません。
先にruby2.3.0のインストール
から行い、それでwq2txtのインストール
ができなければbundle
を使用するやり方に挑戦する流れの方が、手間が少ない可能性があります。
■ 参考資料
手当たりしだい、いろいろなページを参考にさせて頂いて試したのですが、最終的にこちらのページを主に参考にさせて頂いてなんとかなりました。
一応、以下の文中でも適宜リンクを貼らせていただいています。
- word2vecで遊ぶ | Eyepod touch
- wp2txtでwikipediaのコーパスを作るまでの道のり
- Mac OS X el captionでgem installする際にpermissionエラーが発生する場合の対処方法 | Web活メモ帳
- bundle install で nokogiri をインストールしろと言われる解決方法
- wikipediaコーパスを気軽に使いたい人へ
- MacにrbenvでRubyを簡単にインストールしてみる
■ 自分の環境
参考になるかわからないのですが、一応。
- OS X EL Capitan (10.11.6)
また、rbenvを用いたrubyのインストールの際には、homebrewを使いますが、自分の環境ではすでにhomebrewがある状態でした。そのためhomebrewのインストールのやり方については述べていませんので注意してください。
■ 実際にやったこと
大まかな流れは参考資料にも載せたこちらを参考にしました。
● wikipediaダンプデータ
まずはWikipediaからダンプデータをダウンロード
$ wget http://dumps.wikimedia.org/jawiki/latest/jawiki-latest-pages-articles.xml.bz2
自分の場合は2.25GBで、30分ほどでした。
ダンプファイルを入手出来るwikipediaのurlは、いろいろなページを参考にして幾つかのパターンがありましたが、このページの一番下のlatest/
から入手出来るデータが日本語記事で一番最近のものぽいので、これが良いのではないかともいます。
ちなみに自分は一回目にそもそも日本語の記事とか関係なく、全ての記事を取得するurlを書いてしまったみたいで大変なことになりました。
● wp2txt
ここからが戦いでした。
ダンプデータを使える状態にうまく処理してくれるらしいwp2txt
とりあえずターミナルにインストールをお願いする
$ gem install wp2txt
しかし怒られる
Fetching: htmlentities-4.3.4.gem (100%) ERROR: While executing gem ... (Gem::FilePermissionError) You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.
とりあえずエラーの内容でググってみて、同じようにwp2txtのインストールで苦しんだ同じような人がたくさんいることがわかりました。
- 自分はこの次にbundleを使用したwp2txtのインストールを行っていますが、先にRuby2.3.0以上のインストールをおこない、もう一度
$ gem install wp2txt
を試す方が余計な手間がかからない可能性があります。
もし先にRubyをインストールしてからうまくいった人がいればぜひ教えてください。
● bundleのインストール
bundleというものを使用して解決したページを発見したので、ためしてみる。
$ gem install bundle
Fetching: bundler-1.13.6.gem (100%)
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.
いや同じエラー出るやん。だめなやつやん。
手詰まりかと思いましたが、運良くこちらを見つけることができ、これを参考に進めました。
- bundleインストール先の指定
インストール先を/usr/local/binに変更する事でエラーを回避できるそうです。
こちらでターミナルにお願いします。
$ sudo gem install -n /usr/local/bin bundler
Password: Fetching: bundler-1.13.6.gem (100%) Successfully installed bundler-1.13.6 Parsing documentation for bundler-1.13.6 Installing ri documentation for bundler-1.13.6 1 gem installed
うまくいったっぽい!よかった!
- bundleの続き
うまくインストールできたようなので、先ほどのこちらを参考にbuncleの続きを進めます。
$ mkdir ~/ruby_bundle
$ cd ~/ruby_bundle
$ bundle init
Writing new Gemfile to /file_to_path/ruby_bundle/Gemfile
$ echo 'gem "wp2txt"' >> Gemfile
$ bundle install
最後の行で、いろいろ必要なものをインストールしてくれるみたいです。(よくわかってない)
途中までいい感じだったのですが、残念ながら、最後になんかエラーっぽいのが出ました。
An error occurred while installing nokogiri (1.6.8.1), and Bundler cannot continue. Make sure that `gem install nokogiri -v '1.6.8.1'` succeeds before bundling.
うーん、ノコギリをインストールしろ......??
よくわからないのですが、仕方がないので言われた通りにします。
- nokogiriのインストール
gem install nokogiri -v '1.6.8.1'
Fetching: nokogiri-1.6.8.1.gem (100%) ERROR: While executing gem ... (Gem::FilePermissionError) You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.
うん、知ってた。こんな予感がしてた。
- nokogiriの再インストール
こちらのページによると、何やらオプションをつけるとうまくいくらしい。頑張ります。
$ bundle config build.nokogiri --use-system-libraries
これを実行した後に、以下でもう一度再インストールすれば良いみたいです。
$ bundle install --path vendor/bundle
Fetching gem metadata from https://rubygems.org/............. Fetching version metadata from https://rubygems.org/. Resolving dependencies... Rubygems 2.0.14.1 is not threadsafe, so your gems will be installed one at a time. Upgrade to Rubygems 2.1.0 or higher to enable parallel gem installation. Installing htmlentities 4.3.4 Installing mini_portile2 2.1.0 Installing trollop 2.1.2 Using bundler 1.13.6 Installing nokogiri 1.6.8.1 with native extensions Installing wp2txt 0.8.0 Bundle complete! 1 Gemfile dependency, 6 gems now installed. Bundled gems are installed into ./vendor/bundle.
やったー! ありがとうございます!!
何のためにこれをしていたのか忘れかけていましたが、
多分これでwp2txtが使えるようになるはず。
$ wp2txt --input-file jawiki-latest-pages-articles.xml.bz2
-bash: wp2txt: command not found
何で。えっ。
さっきInstalling wp2txt 0.8.0
っていっとったやん。
● Rubyのインストール
- wp2txtにはruby2.3以上が必要
調べてみると、どうもこちらのページによると、
rubyが2.3以上のバージョンでないとwp2txtを使えないらしいのです。
試しにチェックしてみますと、
$ruby --version
ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin15]
あー。
- rbenvを使ってRubyをインストール
しんどくなってきましたが、またこちらの別のページを参考に頑張っていきます。
ちなみに、自分はすでにhomebrewは入っている環境でしたので、その段階はクリアできていて良かったです。
以下、結構簡略して書いているので、Macの方はぜひこちらを参考に進めてください。
$ pwd
/Users/ユーザー名
$ brew update
$ brew install openssl
$ brew install readline
$ brew install rbenv
$ brew install rbenv-gemset
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile
$ rbenv install 2.3.0
$ rbenv rehash
$ rbenv global 2.3.0
$ ruby -v
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin15]
最後にもう一度バージョン確認して、rubyのデフォルトが2.3.0になってくれたことを確認しました。
$ rbenv rehash
しないと、$ rbenv global
でデフォルトの設定が変更できないみたいなので注意です。
● 最終的に
- なぜか動いてくれないwp2txt
さあ、これでいいでしょう。
$ wp2txt --input-file jawiki-latest-pages-articles.xml.bz2
-bash: wp2txt: command not found
なんでなんだろう......
ここまでくるともう若干半泣きでした。どうしろと。
- やけになった
やけになって、もう一度そのままインストールをやってみた。
$ gem install wp2txt
Fetching: mini_portile2-2.1.0.gem (100%) Successfully installed mini_portile2-2.1.0 Fetching: nokogiri-1.6.8.1.gem (100%) Building native extensions. This could take a while... Successfully installed nokogiri-1.6.8.1 Fetching: htmlentities-4.3.4.gem (100%) Successfully installed htmlentities-4.3.4 Fetching: trollop-2.1.2.gem (100%) Successfully installed trollop-2.1.2 Fetching: wp2txt-0.8.0.gem (100%) Successfully installed wp2txt-0.8.0 Parsing documentation for mini_portile2-2.1.0 Installing ri documentation for mini_portile2-2.1.0 Parsing documentation for nokogiri-1.6.8.1 Installing ri documentation for nokogiri-1.6.8.1 Parsing documentation for htmlentities-4.3.4 Installing ri documentation for htmlentities-4.3.4 Parsing documentation for trollop-2.1.2 Installing ri documentation for trollop-2.1.2 Parsing documentation for wp2txt-0.8.0 Installing ri documentation for wp2txt-0.8.0 Done installing documentation for mini_portile2, nokogiri, htmlentities, trollop, wp2txt after 8 seconds 5 gems installed
えっ。
- 結局何が原因で上手く行ったのかよくわからない
一番初めの時点では失敗していた、
$ gem install wp2txt
が、なぜ最後に試すと上手くいったのかわかりません。
最初の状態と異なっているのは、
- bundleがインストールされている
- Rubyのバージョンが変わった
- ルートディレクトリ以外の場所でgem install
した
の3つです。
1つ目は、一応、
$ echo 'gem "wp2txt"' >> Gemfile
$ bundle install
でインストールを行っていると思うのですが......
自分としては、初めのgem install
でのエラーで、
You don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.
と怒られているので、使用するRubyのバージョンが2.3.0に変更されたのがうまくいった原因なのかな?と思っています。
でも正直gemのことよくわかっていないので、わかりません、すみません。
誰かなんで上手くいったのか教えてください。
● wp2txtでwikipediaのダンプデータファイルを解凍する
とりあえず、できたものは仕方がないので、最後です。
$ wp2txt --input-file jawiki-latest-pages-articles.xml.bz2
Preparing ... This may take several minutes or more ... Done.
jawiki-latest: 3% |o | ETA: 02:53:17
あとはこの状態で待っておけばwp2txtが上手に解凍してくれるはずです。
自分は5時間ほどかかりました。