Wikipedia の全記事データは、wikipedia.org の 公式サイト から圧縮XMLファイルとして、自由にダウンロードできます。
しかし、これをオフラインで読むために、自分のノートパソコンに Wikipedia サーバを構築する作業は、非常に多くの手間と時間を要します。MySQLサーバへの記事の読み込みだけで4・5日かかる場合 も珍しくありません。また数十Gbyteという膨大なHDDを消費します。これでは頻繁に記事データを更新する気力も失せてしまいます。
Wikipedia を辞書標準フォーマットEPwingに変換するツール等もあります。しかしこれらを使ったとしても、作業には半日ほどの時間かかり、また辞書サイズも4Gbyteを超えてしまい、さらにEPwingは日本独自の仕様であるため、JIS X 0208以外の文字が扱えない等の問題がありました。
ここでは、配布されている圧縮Wikipedia記事データをそのまま、解凍せずに手軽に検索して読む方法を紹介します。基本的なアイデアは記事 "Building a (fast) Wikipedia offline reader" に基づいています。
配布圧縮データをそのまま使う利点は、ディスク消費容量の少なさと、導入の容易さです。容量としては、配布圧縮データ+インデックスで、元ファイルの1.3〜 1.6倍程度(2009年10月時点の日本語版Wikipediaで1.3Gbyte, 英語版で8.5Gbyte)の容量しか必要としません。またセットアップも日本語版Wikipediaで1時間程度、英語版でも半日から1日程度(マシンの性能 に依存します)で完了するため、記事を最新版に更新するのも容易です。
この方式は、配布されている圧縮Wikipedia記事データ(日本語版の場合は jawiki-latest-pages-articles.xml.bz2 で、2009年10月時点でおよそ1Gbyteの容量がある)が、"bzip2" 形式で圧縮されていることを利用します。"bzip2" はブロックソート処理を行う都合上、約1Mbyte単位の独立したブロックの並びで構成されています。圧縮ファイルをブロック単位に分割してハードディス クにおいてしまえば、容量はほとんど変わらずに、Wikipediaの記事に対してランダムアクセスに近いことができます。
bzip2 ファイルを分割には "bzip2recover" を利用します。2009年10月時点の jawiki-latest-pages-articles.xml.bz2 を分割すると、およそ5,000近いファイルが生成されます。この分割ファイル群の総容量は、オリジナルとほぼ変わりません。分割後はオリジナルファイルは消去します。この作業は10数分程度でできます。
次に、分割 され、ランダムアクセスできるようになった Wikipedia の記事データに対して、インデックスを作成します。Wikipedia XML ファイルでは、項目タイトルは <title> .... </title> タグで囲まれています。このタイトルを(日本語版では)形態素解析に基づいて分解すると、検索性が高いインデックスを作ることができます。
この作業を高速に行うためのツールとして、"MeCab"と"Xapian" を使用します。この両者の組み合わせで、日本語版Wikipediaならば1時間程度でインデックスが作成できます。(英語版のWikipediaの場合、空白で単語を区切ってインデックス化する作業はおよそ1日ほどかかりました。)
Wikipediaの記事本文は、XMLファイルの
MediaWiki (Wikipedia)もwikiの一種類であるため、その書式を plain text に変換するのは難しくありません。ただし MediaWiki をテキスト化するならば、「表組」と「数式」をどのように扱うかが問題になります。Wikipediaでは(しばしば複雑な)表が多用されるため、この 表示をおろそかにする訳にはいきませんし、また理系のリファレンスとしてWikipediaを使う場合、数式をきちんと表示するのは必須です。
「表組」をプレーンテキストに変換するツールとしては、HTMLのテーブルを奇麗に整形、テキスト化する "w3m"が有名です。Mediawikiの表組は容易にHTMLのテーブルに変換できますので、まずMeidaWikiの表をHTML化し、さらにそのHTMLをw3mに食わせることで、MediaWikiの表はプレーテキストにできます。
数式は基本的にはプレーンテキスト化は無理なので、これだけは画像化せざるを得ません。MediaWikiでは、数式は タグで囲まれたLaTeX形式(のサブセット)で書かれています。この数式を解釈し、そのまま画像化する手軽なツールとして、MediaWikiのツールの一部である texvc がありますので、数式はこれで画像化し、それをテキストに埋め込むようにします。
以上の作業を、ひとまとめに行い、Emacsのバッファで気軽にWikipediaを引くためのツールを、Emacs 辞書検索ソフトウェア、"lookup" の中に組み込んでみました。Wikipediaをノートパソコンで気軽に持ち運びたい、という人はこのツールを検討してみるのはいかがでしょうか。
ただ、本ツールはまだ作り立てなので、CVSサーバからチェックアウトして試用することしかできません(使い方メモが、ndwikipedia.el ファイルのコメント部分にあります)。
本ツールは、Emacs, MeCab、Xapian、MediaWiki (texvc)、w3m、LaTex、bzip2, ruby などを組み合わせています。元サイトの中の人も言っていましたが、多様なツールを組み合わせれば、このような比較的複雑なシステムも簡単に構築できるの が、オープンソースソフトウェアの一つの魅力なのではないかな、と思います。
(数式のみ画像化して貼付けたサンプル画面)
(W3Mを使って、MediaWikiの表組をテキスト化して表示したサンプル画面)