スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書く事で広告が消せます。

WikipediaのデータをImportする

Wikipedia日本語版のデータを読み込む作業。

[[Wikipedia:データベースダウンロード]]に情報があります。
このページは読みにくいのであまりきちんと読んでいません。
日本語が読みやすいように行間を開けると、こういう解説が読みにくいのですが
ページ毎にCSSを変えたりできないのでしょうか。
名目上は百科事典サイトですから
なんとなくその必要が無い/つけたくないのは察しがつきますが、
CMS的にはあった方がいいんじゃないでしょうか。

読んだのは[[meta:Data dumps]][[mw:Manual:Importing_XML_dumps]]
ダンプを読み込むのは最近はあまりはやっていないのかメンテナンスされ具合が微妙です。

データはダウンロードページで公開されています。
うんざりするほどたくさんあるけれど、これはWikimedia財団が他にやっているプロジェクトのデータもすべて入っているからで、jawikiというのがWikipedia日本語版のデータらしい。

現時点での最新は2009年1月24日版。
履歴が全て含まれたダンプファイルは7z圧縮で2.4Gもある。(pages-meta-history.xml.7z)
履歴は正直いらないのでAll pages, current versions only(pages-meta-current.xml.bz2 ) をダウンロード。
これも820Mある。解凍して3.4G。

データの形式は.xmlとついています。
これはMediaWikiのExport機能を使ったときの形式らしく
中身は普通のxmlですが、今はこれをデータベースに読み込みたいのでこのままでは使えません。
データをxmlからmysqlのSQLに変換してくれるツールが必要です。

mediawikiにおまけで付いてくるimportDump.phpは

For a large Wikipedia dump with millions of pages, it may take days, even on a fast server. Also note that the information in meta:Help:Import about merging histories, etc. also applies.

と書いてあって何日もかかるとか冗談じゃないので[[mw:Manual:Importing_XML_dumps]]を見ると

  • Using Special:Import - 100ページ以下ぐらい向き

  • Using importDump.php - phpだし、いかにも遅い

  • Using mwdumper - javaだけど、ダウンロードしたが動作せず

  • Using xml2sql - オフィシャルではないとか


あれ、選択肢がない。

とりあえずはやり方もわからないし一日動かしっぱなしというわけにも行かない環境なので
よくわからないけどxml2sqlを使ってみることにする。
Cで書かれているのでスピードに期待。

[[meta:xml2sql]]に書かれているパッチを適用して
% ./configure
% make
% make install

で /usr/local/bin にxml2sqlがインストールされる。

ダウンロードしたダンプをsqlに展開する
% ./configure
% bunzip2 -c pages-meta-current.xml.bz2 | xml2sql


すると

  • page.sql - pageテーブル、約100MB

  • revision.sql - revisionテーブル、約12MB

  • text.sql - textテーブル、約2.9G


という三つのSQLファイルができました。中身はただのSQLファイル。
なるほど、これを mysqlimportとかでimportすればいいようです。


importするためにまずデータベースを準備します。
% mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.1.30 MySQL Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.


mysql> create database jacur;
Query OK, 1 row affected (0.06 sec)

としてデータベースを生成します。
jacur はcurrent ja wikipedia なつもりだったのですが長いのでcur。

次にMediaWikiをダウンロードしてきます。

テーブルは maintenance/tables.sqlに書かれているのでmysqlをexitして

% mysql -u root -p -D jacur < maintenance/tables.sql

これでテーブルが生成されます。
個人のパソコンの場合はmy.iniにskip-innodb を指定してInnoDBを生成しないようにしておくといいでしょう。
InnoDBのファイルはサイズが一度増えると減らないみたいですから。


データの読み込みは
% mysqlimport  -u root -p -d -L jacur ~/text.txt
Enter password:
jacur.text: Records: 1161559 Deleted: 0 Skipped: 0 Warnings: 0
% mysqlimport -u root -p -d -L jacur ~/revision.txt
Enter password:
jacur.revision: Records: 1161559 Deleted: 0 Skipped: 0 Warnings: 1826
% mysqlimport -u root -p -d -L jacur ~/page.txt
Enter password:
jacur.page: Records: 1161559 Deleted: 0 Skipped: 0 Warnings: 0

my.ini の default-charcter-set はUTF-8にしています。
my.iniの設定を変えなくてもmysqlimpoet の際に -default-charset=utf8 をオプションで指定してあげるといいようです。(未確認)

これは合わせて30分もあれば終りました。
Warningが出ていますが、気にしない。

読み込んだWikipediaのデータを使ってサイトを構築される方は
[[Wikipedia:著作権]]をよく読んできちんとライセンスの表示をしないといろいろと面倒に巻き込まれると思うのでご注意ください。

かるく試してみましょう。
mysql> select text.old_text from text,revision,page where ( page_title='A' and page.page_namespace=0 and page.page_id=revision.rev_page and text.old_id=revision.rev_text_id and text.old_id=revision.rev_text_id);
------------------------
略(ライセンスも面倒だし)
------------------------

無事ページのソースが表示されました。
準備はこれで完了です。

テーマ : プログラミング - ジャンル : コンピュータ

コメント

コメントの投稿

トラックバック


この記事にトラックバックする(FC2ブログユーザー)