データサイエンス

Wikipediaデータをxml2sqlを利用しMySQLにぶっこむ

Wikipediaではクロールを禁止している代わりに、全データがXML形式で公開されています。簡単に手に入るのですが、XMLデータのままでは扱いにくいです。今回は、XMLデータをSQLに変換し、最終的にMySQLに入れる方法をご紹介します!

Wikipediaデータをxml2sqlを利用し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全ページとあって、結構重たいですが気長に待ちましょう。

-データサイエンス
-