WikipediaデータをワードプレスDBにインポート

WordPress > WikipediaデータをワードプレスDBにインポート

ワードプレスとウィキペディアデータとを結び付け、ワードプレス側からウィキペディアデータを抽出表示させる方法についてです。

今更、説明必要もありませんが、膨大な情報が入っているウィキペディアのデータと運営サイトとを巧く連携させることができれば、情報の不足分を補い、より充実したサイトコンテンツへと変貌させることが出来るはずです。

今回は、ワードプレスのデータが入っているデータベースに、新たにウィキペディアデータ用のテーブルを設け、ワードプレス側からウィキペディアデータの抽出を行う方法について解説します。

ウィキペディア側では既にXMLSQLなどの形式でデータを一般公開しており、これらを使い既存のデータベースにデータを取り込めばよいのですが、いかんせん、情報量が膨大なために、そのままダイレクトにデータベースにインポートするには無理がありますし、ウィキペディアデータには様々な種類があり、ウィキペディアと同等のサイト構築を目指すなら話しは別ですが、すべてのデータが必要になるケースはむしろ稀で、ページタイトルが入ったpage_titleカラムデータ、本文が入ったold_textカラムデータ辺りにおおよその利用価値が定まるのが一般的になるのではないでしょうか?

SSHなどを駆使すれば本番サーバーにダイレクトにウィキペディアデータをインポートすることも可能ですが、正直なはなし、ウィキペディアデータは素のまま利用できるほど気の利いた内容になっていないのが現状です。

ですので一旦、ローカルサーバー上にデータベースを構築し、その中にインポートしたうえで編集作業を行い、極力、コンパクト化したうえでSSH用のポート許可を行っていないmysqlサーバーに、分割したダンプファイルをコンスタントにインポートしていくことを前提に解説していきます。

流れとしては、まずローカルサーバーにデータベース(wikidb)を作成し、page、revision、textの3つのテーブルを定義しウィキペディアデータをインポートしていきます。

さらにINNER JOINを使用したテーブル内部結合処理により、必要なデータが入ったカラムだけを集結させ新たなテーブルに投入していき、page_id、page_title、old_textの3カラムデータを集結させたひとつのテーブルにします。

内部結合時には必要のないデータ(アップロード情報、削除情報・・・)等を削り必要最小限のデータのみにして検索クエリに対し極力、的を得たデータ抽出が出来るように最適化も行います。

データの利用方法としては、ワードプレス側からpage_titleカラムにmysqlのLIKEを使用し前方一致、後方あいまい検索をかけ、ヒットしたら同レコード上にあるテキストデータを抽出して表示させるといった内容になります。

これに伴いpage_titleをインデックス化しなおします。

最終的にはワードプレス記事文章から自動的にキーワードを絞り込みデータベースにクエリを送り、ヒットに応じてリンク挿入、クリックアクションでウィキペディア本文データを抽出、表示させるところまで行います。

それでは早速、データベース、テーブル作成に取り掛りましょう。
作業効率アップを考慮し必要なファイル類をひとつの圧縮フォルダにまとめキット化したもの(wikidbkit)を公開しましたので、よろしければダウンロードしてご使用ください。

フォルダ内容はテーブル定義用のprt_tables.sql、ウィキペディアデータのインポート時に必要なmwdumper.jar、関連するmysql-connector-java-5.1.39-bin.jar、内部結合用のテーブルを定義するdict_tables.sql、分割ダンプ用Bashのdb_table_data_only_dump_split.sh、分割ファイル格納用のdumpフォルダです。

ここではubuntuで仮想サーバーを構築しmysql 5.7の環境を前提に解説を進めていきます。

wikidbkitを解凍した後、各ファイルをカレントディレクトリに置いてください。
解説の都合上、カレントディレクトリにファイル類を設置した前提で進めていきます。
ubuntu環境であればhome上に置いてください。

CREATE DATABASE wikidb CHARACTER SET utf8;

mysqlコマンドライン上でwikidbというデータベースを作成、文字コードの指定も同時に行っています。

show databases;

show databasesで作成したwikidbデータベースを確認

use wikidb;

作成したwikidbデータベースを選択した後、prt_tables.sqlをインポートしてテーブルを定義します。

source prt_tables.sql

prt_tables.sqlとは単純にpage、revision、textの3テーブルに的を絞り定義したファイルです。

show tables from wikidb;

wikidbデータベース内に作成されたテーブルを確認します。
page、revision、textの3つのテーブルが作成されていることが判ります。

wget https://dumps.wikimedia.org/jawiki/latest/jawiki-latest-pages-articles.xml.bz2

シェルコマンドラインからウィキペディアデータをダウンロードします。

java -jar mwdumper.jar --format=sql:1.5 jawiki-latest-pages-articles.xml.bz2 | mysql -u root -p wikidb

ダウンロードが終了したらmwdumperを使いウィキペディアデータをデータベースにインポートしていきます。


データがインポートし終わるまではかなりの時間を要します。

上記のような状態になったらインポート完了です。

「WikipediaデータをINNER JOIN(内部結合)でまとめる」に続きます。