“とりあえず”のコーパスならWikipediaでイイんじゃないですか?
どうも、めちゃくちゃ久しぶりの自然言語記事ですが、内容はめちゃくちゃシンプルです。
皆さんは実験に使うコーパスは何を使っているでしょうか? もちろん実験の内容によって大きく変わると思いますが、”とりあえず”で動かそうと思った時はWikipediaを使う人が多いかと思います。というわけで、今回はWikipediaの本文データを持ってきて正規化して分ち書きにするところまでやってみようと思います。
今回はWikipedia本文テキストの抜き出しと形態素解析でPython2,3系を使用するので、事前に用意してもらえると幸いです。
OS : Ubuntu 16.04 LTS
Python : 3.6.3, 2.7.14
0. Wikipediaを使う理由
まずはじめに、なぜWikipeiaを使う人が多いのかについてテケトーに書いていこうと思います。理由としてあげられるのはいくつかあると思いますが、その中でも”比較的大きく広範囲のデータセットが作れる”というのがあげられると思います。
Wikipediaといえば言わずと知れた、ネット上の百科事典です。そのWikipediaが扱っている記事の範囲は膨大で、一国の詳細情報からマイナー芸人さんのプロフィールまで”なんでそんな記事があるの?!”というものも沢山あります。その記事数は”誰でも編集できる”というところに由来しているため記事の信憑性は高いとは言えませんが、ただ”文章”が欲しい時にはこれほど力強いものは無いと思います。またすごいのが、これほどのテキストが無料で全文配布されているというところです。他にもタイトル一覧とか各記事のリンク関係など使い方次第で面白いことができそうです。Wikipediaから公式に提供されているものはこちらのサイトさんがよくまとまっているので、参考までにどうぞ。
以上のことから、”幅広いジャンルのテキストが無料で沢山手に入る”ため”とりあえず”でWikipediaがよく使われるんですね。
1. 本文テキストをダウンロード
では早速ダウンロードしていきましょう。ダウンロード先はWikipedia公式さんのこちらのページです。今回はWikipediaの本文テキストが欲しいので、この中から”jawiki-latest-pages-articles.xml.bz2″をダウンロードすれば大丈夫です。記事を書いている現在時点で2.6GBくらいあるので気長にダウンロード完了をお待ちください。
2. 本文を正規化
先ほどダウンロードした本文データはWikipediaの記述手法にならっているため、テキストだけを抜き出してあげる必要があります。そこで使用するのがこちらのPythonコードです。これは有志の方が作成してくださったWikipedia記述から本文だけを抽出してくれるスクリプトです。これをコピペするなりwgetするなりして手元にダウンロードしてください。ちなみにwgetするなら以下のコマンドで大丈夫です。
1 |
$ wget http://medialab.di.unipi.it/Project/SemaWiki/Tools/WikiExtractor.py |
これを今ダウンロードしてきた本文データと同じディレクトリに配置して以下のコマンドを実行することで抽出作業が始まります。
1 |
$ python WikiExtractor.py -o extracted_text jawiki-latest-pages-articles.xml.bz2 |
参考にさせてもらったサイトではコマンド実行時に”-b 500K”というオプションを私て出力ファイルを500KB毎に分割するということをしていました。未検証ですが、そちらの方が動作が軽量なんだと思います。どちらにしろこの後の作業で一つのファイルにまとめることができるので、お好みでどうぞ。ちなみに、このPythonコードですが自分の環境ではPython3では動きませんでした。Python2系で実行したら動いたので、(ちゃんと調べたわけでは無いので確証はありませんが)おそらくPython3系では動かないものと思われます。
さて、抽出作業が終わったら以下のコマンドで分割されているファイル群を一つのファイルにまとめてしまいます。
1 |
$ find extracted_text -name 'wiki*' -exec cat {} \; > output.txt |
これにてWikipediaの本文テキスト獲得はおしまいです。もし文字ベースの解析なんかを行う場合はこれでおしまいですが、今回は単語毎の分ち書きまでやってみます。
3. MeCabで分ち書きをしてみる
今回は形態素解析ではおなじみのMeCabさんを使っていきます。すでにインストールしているという人も多いかと思いますが、備忘録も兼ねてインストール方法も書いておこうと思います。
Mecabのインストールは以下のコマンドで簡単に行うことができます。
1 |
$ sudo aptitude install mecab libmecab-dev mecab-ipadic-utf8 git make curl xz-utils file |
またMeCabをPython3から呼び出すための準備として以下のコマンドを実行しておいてください。
1 |
$ pip install mecab-python3 |
これでPython上からMeCabを呼び出すことができるようになりました。ですが、これだけだと味気ないので、有能な辞書という定評があるmecab-ipadic-NEologdを導入しようとおもいます。正直GitHubのページに導入方法は載っていますし、ほぼコマンドを実行するだけなのでこちらで説明する意味はないのですが、一応書いておきます。
作業前に作業用のディレクトリを作っておくと便利かもしれません。今回の説明ではホームディレクトリにWorkSpaceというディレクトリを作ったという仮定でお話していきます。 下準備として必要なものをインストールしておきます(自分の環境ではこのコマンドは不要でした)。
1 |
$ sudo apt-get install mecab libmecab-dev mecab-ipadic-utf8 git make curl xz-utils file |
さて、以下のコマンドで辞書のダウンロードとインストールをすることができます。
1 2 3 4 |
$ cd ~/WorkSpace $ git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git $ cd mecab-ipadic-neologd/ $ ./bin/install-mecab-ipdic-neologd -n -a |
辞書のインストールが完了したら、正常にインストールされているかを確認してみましょう。確認用のコードは上記のコマンドの出力の最後尾から4行目くらいに書かれているものが使えます。
1 2 3 4 5 6 7 8 |
[install-mecab-ipadic-NEologd] : Install completed. [install-mecab-ipadic-NEologd] : When you use MeCab, you can set '/usr/lib/mecab/dic/mecab-ipadic-neologd' as a value of '-d' option of MeCab. [install-mecab-ipadic-NEologd] : Usage of mecab-ipadic-NEologd is here. Usage: $ mecab -d /usr/lib/mecab/dic/mecab-ipadic-neologd ... [install-mecab-ipadic-NEologd] : Finish.. [install-mecab-ipadic-NEologd] : Finish.. |
自分の環境では上記のような出力がされたので以下のコマンドで動作確認をします。
1 |
$ mecab -d /usr/lib/mecab/dic/mecab-ipadic-neologd |
このコマンドは一時で気にオプションで持たせた辞書を使って形態素解析を行うものです。今回は新しくインストールしたNeologd辞書をオプションで持たせています。もちろん”-d”以降を削除すればデフォルトの辞書で解析をすることができます。
ちなみに、この辞書のGitHubに載っていた例文では正しく動作を確認することはできないので、自分なりの新語を含んだ文章でテストするのが懸命だと思います。新語っぽいのを含んだ文章をNeologdとデフォルトのそれぞれで解析してみれば結果が変わると思います。
さて、動作確認が終わったら、Neologd辞書をデフォルトの辞書に設定してしまいます。これをしておけばいちいちオプションで辞書を指定する手間が省けるのでやっておいてそんは無いと思います。設定するには/etc/mecabrcというファイルの以下の部分を書き換えます。
1 2 3 4 |
dicdir = /var/lib/mecab/dic/debian ; この部分を ; dicdir = /var/lib/mecab/dic/debian ; こんな感じに書き換える dicdir = /usr/lib/mecab/dic/mecab-ipadic-neologd |
自分の環境ではNeologdをインストールしたディレクトリは”/usr/lib/mecab/dic/mecab-ipadic-neologd”なのでこう書きましたが、この部分はご自身の環境に合わせて書き換えてください。これで、MeCabのセットアップはおしまいです。
さて、では最後にWikipediaを分かち書きして終わります。ですが、分かち書きプログラムは検索すればいくらでも出てくるかと思いますので省略しようと思います。ですがひとつの選択肢として自分か以前書いたコードを紹介しておきます。
このコードでは品詞を考慮して分かち書きを行うことができるようにしているので、”助詞,助動詞はいらぬ”といったニーズにも答えられるようにしているのでぜひ見てみてください。
分かち書きが終わりましたら、これにてWikipedia本文データコーパスは完成です。お疲れ様でした。
コーディングで分からないことがあれば
プログラミングや環境構築で分からないことがあったら『teratail』というエンジニア特化型のQ&Aサービスがオススメです。自分もどうしても分からないことがあったら、時々質問しにいきますが、かなりニッチな質問にも意外と早く回答がつくのでとても頼もしいです。という宣伝でした。
おわりに
ここまで、お読み下さりありがとうございます。今回の記事はなかなか初歩的ながら自然言語処理の実験を行うときにはなかなかさけては通れない道という内容だったと思います。かくゆう自分もWikipediaさんのデータにはお世話になっています。みなさんもここから頑張って自然言語処理ってください。
「【Python】日本語Wikipediaのダンプデータから本文を抽出する」