Wikipedia記事データのローカルDBへの取り込み

  • Wikipediaの本文のデータを落としてMySQLの中へ取り込む ←出来た
  • 落としたデータから「日本の妖怪の一覧」に含まれる妖怪のページを抽出
  • 内容から地名を抽出
    • 【問題】古い地名が含まれるであろう点。古い地名に関する情報が必要
  • 地名を地理情報のデータを関連付けて、「妖怪の生息地図」的な情報を作る

妖怪の生息地 - 泥縄トラップの続き。WikipediaのダンプデータをローカルPCのMySQL上へ取り込んだ。

必要な物

jawiki-latest-pages-articles.xml.bz2 日本語版Wikipediaのノートページ、利用者ページを除く最新版のダンプ(参照:Wikipedia:データベースダウンロード - Wikipedia
MWDumper 上記のデータをデータベースへ取り込むツール
MySQL 今回利用したバージョンはmysql Ver 14.14 Distrib 5.1.42, for Win32 (ia32)

作業メモ

WikipediaのベースはMediaWikiなのでDownload/ja - MediaWikiからパッケージをダウンロードする。ただし、この中で必要なのはスクリプトファイル「tables.sql」だけ。これを実行するとダンプを取り込むテーブルを作成できる。

DBについては「CREATE DATABASE IF NOT EXISTS `wikidb`」とかやって作成しておくこと。

mwdumperで取り込みを行った際に「data truncation...」といったエラーに出くわした。rev_commentカラムに格納出来る長さが入力データの長さに足らない、といった意味らしいので、カラムの型をtinyblob型からblob型へ変更した。

大事をとって、tinyblob型のカラムは全てblob型として作成するようにスクリプトを書き換えた。

一旦エラーで止まるとそれまで取り込んだデータは残るようだが、既に取り込んだところを飛ばす機能はmwdumperには無いらしいので、既存データベースを削除→再作成して再度取り込み。かなり時間がかかるので注意。

結果

項目タイトルで検索してみる。

select page_title from wikidb.page where page_title like '%高円寺%';
新高円寺駅
東京都道428号高円寺砧浄水場線
東京都道433号神楽坂高円寺線
東高円寺駅
高円寺
高円寺北
高円寺南
高円寺女子サッカー
高円寺純情商店街
高円寺駅

「Incorrect string value」に関するメモ

647,000 pagesの後にエラーが出た。rev_user_text自体はtables.sqlだと

rev_user_text varchar(255) binary NOT NULL default '',

となっている。作業中、ここには手を加えていない。binaryからUTF8にするべきなんだろうか? ウィキペディア日本語版 - Wikipediaを見る限りだと「項目数 672,466記事」となっているのでおおよその記事は取り込めている物として次の作業へ進む予定。

Exception in thread "main" java.io.IOException: java.sql.SQLException: Incorrect string value: '\xF0\xAA\x9A\xA5\xF0\xAA...' for column 'rev_user_text' at row 25