wp2txt
機械学習における自然言語処理等のチュートリアルで「訓練データようにWikipediaを全文ダウンロードしてplain textにして使いましょう」というシーンで出てくるツールです。Rubygems で bin/ にインストールされる、Ruby のプログラム。
この記事は
ぼくもまさに上述の流れで使おうと思ったのですが、ちょっと調べると付随するgemがいろいろインストールされるのでローカル環境でbundler使った方が良いよ、という記事をいくつか見ました。うん、確かにそのとおり。使わないgemをやたらシステムワイドにインストールするのは躊躇しちゃうし、wp2txt自体恐らくWikipediaをplain textに変換したらもう使わないだろうから、最後は rm -r
あたりで全部まとめて簡単に消したいですもんね。
…が、そういう記事のとおりにやってもなぜかぼくの環境では
/usr/local/lib/site_ruby/2.5.0/rubygems.rb:284:in `find_spec_for_exe': can't find gem wp2txt (>= 0.a) with executable wp2txt (Gem::GemNotFoundException)
というエラーが出てうまく行きません。自分自身が bundler のしくみを良く理解していないのが原因と言えばそれまでなのですが、簡単な検索では解決法が出てなかったので同じエラーに悩む方がいるかも知れないと思いここに書いておきます。
解決策
wp2txt のスクリプトの先頭の辺りに require 'bundler/setup'
と書く。それだけです。ようはbundler使ったスクリプトの標準的な書き方にすれば良いということです。
最初から順を追って手順解説 (面倒な人はここから読み始めればok)
まずは何はなくとも Ruby と bundler をインストールしてください。Ruby は各 OS の流儀で入れるとして、Bundler は gem install bundler
で入るはずです。
さて本題。今から 『tutorial
というフォルダを掘って > そこでwp2txtを使って > 終わったら消す』 という流れで解説します。
$ mkdir tutorial
$ cd tutorial
$ bundler init
Writing new Gemfile to /PATH_TO/tutorial/Gemfile
$ echo 'gem "wp2txt"' >> Gemfile
$ bundler install --path . # ここでローカルディレクトリを指定すれば後腐れなく rm できる
ここまでで必要なファイルが tutorial/ruby
以下にインストールされます。wp2txt
は tutorial/ruby/2.5.0/bin/
等に入っています (2.5.0の部分は各自の環境依存)。これを前項の『解決策』のとおり改変します。と言っても1行追記するだけです。
#!/usr/bin/env ruby2.5
#
# This file was generated by RubyGems.
#
# The application 'wp2txt' is installed as part of a gem, and
# this file is here to facilitate running it.
#
require 'bundler/setup' # <- この1行を追記
require 'rubygems'
version = ">= 0.a"
あとは実行するだけでokです。tutorial
にWikipediaをダウンロードしているならこんな感じ。PATHが通っていないのできちんと書く必要があります。
$ ./ruby/2.5.0/bin/wp2txt --input-file jawiki-latest-pages-articles.xml.bz2
あとかたづけ
もうwp2txt使わないと思ったら、そのフォルダ (この例ならtutorial
) 内の ruby/
, .bundle/
, Gemfile
, Gemfile.lock
を消してしまってokです。
$ pwd # まとめて rm するときは念のため自分の居場所を再確認しましょう。
/PATH_TO/tutorial
$ rm -rf ruby .bundle Gemfile Gemfile.lock
参考
ちなみにwp2txtの場合、どんなgemが一緒にインストールされたか確認してみたらこんなでした。
$ ls ruby/2.5.0/gems/
htmlentities-4.3.4 nokogiri-1.10.4 trollop-2.9.9
mini_portile2-2.4.0 parallel-1.18.0 wp2txt-0.9.1