wikipediaコーパスを気軽に使いたい人へ

お久しぶりです。
前回の投稿から随分と時間が経ってしまいました。
就活のこととかも書きたいですが、それはまた今度ということで。

今回はタイトル通りwikipediaコーパスを使うためにRubyをインストールからwp2txtを使えるまでの話です。
(Rubyは完全に初心者なので理屈はわかりません・・・)

環境はUbuntu14.04です。

準備

Ubuntuは標準でRubyが入っているらしいのでまずは確認。

>>ruby -v
ruby 1.9.3p484 (2013-11-22 revision 43786) [x86_64-linux]

あと、Rubyのライブラリをインストールできるgemってやつ(pythonで言うところのpipかな?)も確認。

>>gem -v
1.8.23

gemでインストールしたパッケージの管理するbundlerってやつもインストールしておく。

>>sudo gem install bundler
Fetching: bundler-1.13.2.gem (100%)
Successfully installed bundler-1.13.2

あとgitも必要なので、確認。

>>git --version
git version 1.9.1

これで準備完了です。

rbenvのインストール

wp2txtを使うためにはruby2.3以上のバージョンが必要らしい。
そこで、複数のRubyを管理できるrbenvってやつを使ってruby2.3をインストールする。
まずはrbenvのインストールはgitで、

>>git clone http://github.com/sstephenson/rbenv.git ~/.rbenv

で、rbenvのpathを/.zshrcに追加(pathの追加は適宜)。

>>echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.zshrc
>>echo 'eval "$(rbenv init -)"' >> ~/.zshrc

でこのままだと、

>>type rbenv
rbenv not found

なので、

>>source ~/.zshrc

してからもう一度。

>>type rbenv
rbenv is a shell function

これがでればrbenvのパスが通ったはず。
次にrbenvのプラグインであるruby-buildのインストール。
これはgitで以下のコマンドをたたけばおk。

>>git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

これで、

>>rbenv install -l
Available versions:
1.8.5-p113
1.8.5-p114
1.8.5-p115
1.8.5-p231
1.8.5-p52
1.8.6-p110
1.8.6-p111
1.8.6-p114
1.8.6-p230
1.8.6-p286
    ・
    ・
    ・
  (以下略)

となり、好きなやつをインストールできるようなったように見えます(インストールできるとは言っていない)。

ruby2.3のインストール

このまま素直に、

>>rbenv install 2.3.0
Downloading ruby-2.3.0.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.0.tar.bz2
Installing ruby-2.3.0...

BUILD FAILED (Ubuntu 14.04 using ruby-build 20160913-13-g8ef0c34)
・
・
・
(以下略)

と出てインストールできなかった。
調べてみると色々インストールが足りなかったみたいで、追加でいろいろインストールする。

>>sudo apt-get install -y libssl-dev libreadline-dev zlib1g-dev

そして、

>>rbenv install 2.3.0
Downloading ruby-2.3.0.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.0.tar.bz2
Installing ruby-2.3.0...

で、うまくいった。
これで、

>>ruby -v
ruby 1.9.3p484 (2013-11-22 revision 43786) [x86_64-linux]

とやったら、あれ?変わってない・・・
なので、

>>rbenv rehash
>>rbenv global 2.3.0
>>ruby -v
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]

で無事に切り替わりました。

wp2txtをインストールして使う

ここまでくれば後は簡単。
まずはgemを使ってwp2txtをインストール。

>>gem install wp2txt

で、入る。
でもこれではダメな場合もあるらしくその時はGemfile作ってやるらしい。
(自分はGemfile作ったけど上記のコマンドでうまくいった履歴があるから使ってないと思われる)
一応Gemfileの中身は、

# frozen_string_literal: true
source "https://rubygems.org"

gem "wp2txt"

と記述して、

>>bundle install

でいいみたい。

以下のURLからwikiのデータをダウンロード(数分かかる)。
https://dumps.wikimedia.org/jawiki/latest/
適当なディレクトリを作ってに保存。

>>mkdir wikicorpus
>>cd wikicorpus
>>ls
Gemfile
jawiki-latest-pages-articles.xml.bz2

後はコマンドで

>>wp2txt --input-file jawiki-latest-pages-articles.xml.bz2

で完成。

おまけ

500個近くファイルができるので、

>>cat jawiki-latest-pages-articles.xml-* > wikicorpus.txt

とし、一行に一カテゴリになるように書き換え(ミスがあると思われるが・・・)

#!/usr/bin/python
#coding:utf-8

import re

wikidata = 'wikicorpus.txt'
newwikidata = 'newwikicorpus.txt'
fr = open(wikidata,'r')
start = 0
fg = 0
docs = ''
for line in fr:
    line = line.rstrip('\n')
    if re.match('\[\[.*\]\]',line):
        if(start == 0):
            start = 1
        else:
            fw = open(newwikidata,'a')
            fw.write(docs + '\n')
            fw.close()
            docs = ''
    elif re.match('\{\{',line):
        fg = 1
    elif re.match('\}\}',line):
        fg = 0
    elif not re.match('\;|\:|\*|\{|\}|\|',line) and not re.match('==.*==',line) and fg == 0:
        docs = docs + line
fr.close()

もっとpythonぽい綺麗なソースコード書けるようになりたい・・・。