WikipediaのバックアップXMLをMySQLに入れてみる

前回まで

日本版Wikipediaで配布されているXMLを取得して、自宅PCのmediawikiに全記事を入れようとした。
配布されているphp版プログラムだと遅すぎ、Java版だと早いが途中で落ちてソースも見つけられなかったのであきらめた。

ネタ元サイト:http://dumps.wikimedia.org/jawiki

XMLの取得方法

wget http://dumps.wikimedia.org/jawiki/20140503/jawiki-20140503-pages-meta-current.xml.bz2

解凍すると10.3G

XMLを解析してみる

公式プログラムでXMLMySQLのテーブル構造に変換したかったのですが、うまくいかなったので自力で解析してみることにしました。(マニュアルが探せばあると思いますが)

XMLの内容


  
    Wikipedia
    http://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8
    MediaWiki 1.24wmf2
    first-letter
    
      メディア
      特別
      
      ノート
      利用者
      利用者‐会話
      Wikipedia
      Wikipedia‐ノート
      ファイル
      ファイル‐ノート
      MediaWiki
      MediaWiki‐ノート
      Template
      Template‐ノート
      Help
      Help‐ノート
      Category
      Category‐ノート
      Portal
      Portal‐ノート
      プロジェクト
      プロジェクト‐ノート
      モジュール
      モジュール‐ノート
    
  
  
    <a class="keyword" href="http://d.hatena.ne.jp/keyword/Wikipedia">Wikipedia</a>:アップロードログ 2004年4月
    4
    1
    sysop
    
      2168855
      299151
      2004-04-30T14:46:00Z
      
##アカウント情報っぽいので2行略##
      
      
      "LocationMacedonia.png"をアップロードしました。: マケドニアの位置 - 英語版より
      <ul><li>14:46 2004年4月30日 [[利用者:
##アップロード履歴らしきものが500行ほど続く##

      0atpn2yli6qvrd8xzq2nnu6zp0ayovq
      wikitext
      text/x-wiki
    
  
  
    <a class="keyword" href="http://d.hatena.ne.jp/keyword/Wikipedia">Wikipedia</a>:削除記録/過去ログ 2002年12月
    4
    2
    sysop
    
      2168856
      2002-12-06T09:23:16Z
      
##アカウント情報っぽいので2行略##
      
      deleted "Linux": goatse.cx
      Below is a list of the most recent deletions.
All times shown are server (U.S. Pacific) time.
<ul><li>09:23 2002年12月6日 User:Brion VIBBER|Brion VIBBER deleted "Linux" <em>(goatse.cx)</em></li>

</ul>
      gbhvqlwj7ga4v9ghhy0n88iqmlo19vz
      wikitext
      text/x-wiki
    
  
##15000000行くらい略##
Category:存命人物
{{Academic-bio-stub}}
      s4yonjfr6lbm9uua8w99u3np66ekzge
      wikitext
      text/x-wiki
    
  


手始めに「記事タイトル」「カテゴリ」「記事とカテゴリの関係」が欲しいので、データの格納先を探してみます。
ぱっと見こんな形式でしょうか。

mediawik
  siteinfo
    namespaces・・・0:記事、14:カテゴリ
  page
    title・・・記事
    ns・・・namespacesに対応
    id・・・後で必要かもしれないので一応押さえておく
    text・・・記事本文。含まれるカテゴリは[[Category:XXX]]の形式で本文の中に記述されている。

MySQLにInsert

使い捨てですが、実際にMySQLに投入するプログラムを書きました。
投入したデータを眺めたかったのですが、データ投入で時間がかかって週末が終わってしまったので続きはまた後日です。

https://github.com/grachro/jaWikipediaTinyParser