Wikipediaではクロールを禁止している代わりに、全データがXML形式で公開されています。簡単に手に入るのですが、XMLデータのままでは扱いにくいです。今回は、XMLデータをSQLに変換し、最終的にMySQLに入れる方法をご紹介します!
Wikipediaコーパスってどう入手するの?
Wikipediaのコンテンツデータは、http://dumps.wikimedia.org/にて公開されています。
(詳しくは、こちらを参照してください)
上記サイトは、英語版のWikipediaデータで、日本語版はhttp://dumps.wikimedia.org/jawiki/においてあります。
Wikipediaではクローラを禁止している代わりに、全データがXML形式で公開されています。
Wikipediaサイトで入手できるデータはXML形式なため、扱いしやすくするためMySQLに突っ込もうとしたのですが、つまづいたためそのときの備忘録です。
WikipediaのXMLデータ取得
wgetを叩くなりダウンロードするなりなんなりで、http://dumps.wikimedia.org/jawiki/latest/jawiki-latest-pages-articles.xml.bz2を取得します。
このファイルは、Wikipediaの記事データの最新の全ファイルで、圧縮時で2.01GB(2014.10.30日現在)あります。
以下のコマンドで、このファイルを解答します。
bzip2 -d jawiki-latest-pages-articles.xml.bz2
xml2sqlのインストール
xmlからsqlへ変換してくれるツールがあります。
http://meta.wikimedia.org/wiki/Data_dumps/xml2sql
このサイトから、xml2sql-0.5.tar.gz
を落として、makeしてインストールします。
wget http://ftp.tietew.jp/pub/wikipedia/xml2sql-0.5.tar.gz
tar zxvf xml2sql-0.5.tar.gz
cd xml2sql-0.5
./configure
make
cp xml2sql /usr/local/bin/
実際に変換
xml2sqlを実際に実行しようとしたのですが、以下のエラーが発生。
xml2sql jawiki-latest-pages-articles1.xml
unexpected element <dbname>
xml2sql: parsing aborted at line 4 pos 12.
大容量のDBデータを準備する - zabbiたんAMIたん
を参考に、以下のコマンドを実行。
エラーになっているところを取り除いています。
cat jawiki-latest-pages-articles.xml | sed -e 's/<ns>.*<\/ns>\|<ns.*\/>\|<parentid>.*<\/parentid>\|<parentid.*\/>\|<sha1>.*<\/sha1>\|<sha1.*\/>\|<model>.*<\/model>\|<model.*\/>\|<format>.*<\/format>\|<format.*\/>\|<redirect>.*<\/redirect>\|<redirect.*\/>\|<dbname>.*<\/dbname>//' | xml2sql
しかし、これでもうまくいかず。。。エラー部分を1つずつ潰して最終的に以下のコマンドになりました。
cat jawiki-latest-pages-articles.xml | sed -e 's/<dbname>.*<\/dbname>//' -e 's/<ns>.*<\/ns>//' -e 's/<parentid>.*<\/parentid>//' -e 's/<sha1>.*<\/sha1>//' -e 's/<model>.*<\/model>//' -e 's/<format>.*<\/format>//' -e 's/<redirect>.*<\/redirect>//' -e 's/<redirect.*\/>//' | xml2sql
このコマンドを実行すると、
- page.txt
- revision.txt
- text.txt
という3つのファイルが生成されます。
xml2sqlで変換したデータをMySQLにつっこむ
前準備として、専用のテーブルを作成する必要があります。
http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/maintenance/tables.sql?view=markup
上記ページから、table.sqlを落としてMySQLに入れます。上記3ファイルは、mysqlimportの形式となっているため、
mysqlimport -u ユーザー名 -p -d -L DB名 text.txt
mysqlimport -u ユーザー名 -p -d -L DB名 page.txt
mysqlimport -u ユーザー名 -p -d -L DB名 revision.txt
を実行すると完了します。
Wikipedia全ページとあって、結構重たいですが気長に待ちましょう。