Kazuhiro's blog
ようこそ! Kazuhiro's blog
土曜日, 12月 28 2024 @ 02:17 午前 JST

wikipedia-fpw

ウィキペディア日本語版のダンプデータをFreePWINGを利用してJIS X 4081形式に変換するツールです。 オフラインでウィキペディアを参照したい場合に使えます。 ただし、画像とか表には全く対応していないので、そういうものも参照したい場合はオンラインになるなりローカルにウィキペディアのコピーを構築した方がよいと思います。

for your download

wikipedia-fpw-20091202-src.tar.gz

インストール

このツール自体は任意のディレクトリに展開するだけです。 ただし、FreePWINGの導入以外に以下の要件を満たす必要があります。

Perlが5.8以降であること。

Perlが64ビットintとlarge fileをサポートしていること。

これは2GBを超えるサイズのHONMONファイルを作成する為の要件ですが、現在ダウンロードできる最新のダンプデータからそのまま書籍を作成するとHONMONファイルが2GBを超えるので必要になります。

perl -V等で、Compile-time optionsにUSE_64_BIT_INTUSE_LARGE_FILESが存在している事を確認してください。

また、FreePWINGは1.6以降を使用する事をおすすめします。 古いFreePWINGでの動作は確認していません。

それなりのHDD容量

相互参照つきで作成した場合、HONMONファイルを作成するのに(ダンプデータ分も含めて)6.5GBくらい必要になります。 パッケージを作成する場合は一時的に9GB弱くらい必要そうです。 (2007年11月現在)

それなりの時間

Core 2 Duo T7200 (2GHz)搭載のノートPCで4時間弱くらいかかりました(2007年11月現在)。 ただし、VMware上での動作のうえに別の作業をしながらだったので実際にはもうちょっと速くできるかもしれません。

また、FreePWINGは1.6以降を使用する事をおすすめします。

変換準備

ダンプデータの準備

ダウンロードサイトからダンプデータをダウンロードします。 ダウンロードするファイルはjawiki-latest-pages-articles.xml.bz2、あるいはjawiki-yyyymmdd-pages-articles.xml.bz2のような名前のファイルです。

ダンプデータは伸長した状態で、ツールのあるディレクトリにwikipedia.xmlという名前で置いてください。

wikipedia-fpw.confの修正

FreePWING 1.5以降を利用していない場合は

  'trim_long_index' => 0,

となっている部分を

  'trim_long_index' => 1,

と変更してください。ただし、動作は未確認です。 また、相互参照を使用しない場合は

  'enable_reference' => 1,

となっている部分を

  'enable_reference' => 0,

のように変更してください。 この値を2にすると同一項目内にある、参照先が重複した相互参照を無効にできます。

数式を収録しない場合は'enable_math'0に変更してください。 数式の収録には、インライン画像の登録に対応したFreePWING 1.6以降とmimeTeX及びImage::Magickモジュールが必要になります。 数式を収録する場合は、ファイルのコメントを参照の上、'mimetex''math_black'の値も設定して下さい。 ただし、Cygwin 環境では子プロセスの起動に時間がかかるようで、ものすごく時間がかかります。数式の収録を行う場合は他の環境を用意することをおすすめします。

読みがなの収録を試みない場合は'yomigana'0に変更してください。 デフォルトでは本文テキストから類推した見出し語の読みがなをインデックスに登録します。 この機能は2ちゃんねるにて開発されたものを取り込ませて頂きました。

@skip_headings, @skip_contents, @select_headings, @select_contentsを編集することで、書籍に収録する項目の取捨選択が(一応)行えます。 ソースのコメントを参照してください。

その他の項目はどちらかというとデバッグ用です。 コメントを見てわかる人はいじってみてください。

変換

通常のFreePWINGを利用したツールと同様です。

$fpwmake

で辞書が生成されます。 この時、

Complex regular subexpression recursion limit (32766) exceeded at 
fpwwikipedia line 219, <GEN11> line 4959960.

のような表示が出るかもしれませんが気にしないでください。

また、parserやpreparserがOut of memoryで止まる場合はDB_Fileモジュールをインストールしたうえで

$fpwmae HASH_MOD=BDB

として辞書を作成してください。fpwlinkOut of memoryで止まる場合は

$fpwmae FPWLINKMOD=BDB

としてください。 (FreePWING 1.6以降が必要です。)

パッケージを作る場合は
$fpwmake package

等のようにします。 packageの部分をpackage-tar-gzpackage-tar-bz2に変えれば、それぞれに応じたファイル形式でパッケージが作られます。

制限・不具合

画像・音声・表には未対応

仕様です。

JIS X 4081の書籍に収録できない文字には未対応

仕様です。 ただし、tablesファイルを書き換えることで、特定の文字列を収録可能な文字列に変換する事は可能です。

予想外の書式に弱い(かも)

試行錯誤である程度は対応したつもりですが、予期せぬ書式に出くわしたときはエラーで止まるかもしれません。 というか、正しく書かれたものでも止まるかもしれません。

cygwinのperlでfpwwikipediaを実行すると落ちる(ことがある)

テキストの内容によってはcygwinのperlが落ちます。 相互参照が有効になっている時に、別名を持つリンクの閉じ括弧がないと落ちることがあるようです。 今のところは動かなくなる部分にworkaroundを入れて対応しています。 また、閉じ括弧がないのはMediaWikiの書式としても正しくはないので、見つけたものについてはWikipediaのページにも反映させています。 ですので、新しいダンプデータではこのworkaroundは不要になっているかも知れません。

workaroundは変換速度の低下につながるので古くなった分に関してはコメントアウトしていく予定です。 つまり、ダンプデータが新しすぎたり古すぎたりする場合はうまく動作しないことがあります。 それから、筆者はcygwinのperlでの動作確認は基本的にはしていないので、動作しなくなっていても気づかない事があります。 動かなくなっている場合は、いつのダンプデータの、どの項目で落ちるかお知らせいただければ対処できるかもしれません。

上記のような説明はどうでもよくてとにかくcygwinのperlで変換したい場合は相互参照を無効にして下さい。

表示されない・表示がおかしい数式がある

ウィキペディアでは数式の表示にtexvcを使用していますがwikipedia-fpwではmimeTeXを使用しています。 その為、一部にmimeTeXではレンダリングできない数式があるようです。

その他

ツールのライセンスはGPL v2に従って下さい。 作成された書籍のライセンスはGFDLに従います。

更新履歴

2009/12/04 2009/11/08にエンバグして、リダイレクトのインデックスが正しく作成されなくなっていたのを修正した。

2009/11/08 パーサーがメモリ不足で止まるのを回避できるようにした。

2009/10/04 インデックスの登録時に文字参照のデコードをしていなかったのを修正した。

2009/09/07 インデックスに読みがなを登録できるようにした。 cf. http://pc11.2ch.net/test/read.cgi/mobile/1205944629/

2009/05/06 2GB超に関連して、Perlの要件を追記した。

2009/05/02 数式有効時にmathタグ内にnowikiタグ等があるとエラーになるのを回避した。

2009/02/20 インライン画像と代替文字列の両方を表示するEPWINGブラウザがそれなりにある(らしい)ため、数式の代替文字列を収録しないようにした。

2009/01/26 登録前に見出し語をチェックして登録できないものは弾くようにした。 上付き文字と下付き文字に対応した。 preタグの取り扱いがおかしかったので変更した。 整形済み書式の処理がおかしかったので変更した。 整形するテンプレートをちょっとだけ増やした。 リダイレクト先に含まれるアンダースコアを空白文字に変更するようにした。 数式に対応した。

2008/07/30 <source>タグに対応した。 マッチ演算の回数をなるべく減らすようにした。 もしかしたら要るところまで削っているかも。

2008/05/31 収録する項目の取捨選択が(ある程度)行えるようにした。 項目末尾のゴミになっていた部分を取り除いた。 同一項目内で参照先が重複している相互参照を無効にできるようにした。

2007/12/02 cygwinでだけ落ちていたところで落ちにくくなった(かも)。 余計な字下げ情報を出力していたのを修正した。 htmlタグで書かれた表も取り除くようにした。 2007/11/21のダンプデータとcygwinで動作するのを確認した。

2007/09/27 20070923版のダンプデータで動作するようにworkaroundを追加した。 Encodeモジュールに関する説明をちょっと追加した。

2007/08/23 数値参照をデコードするようにした。 cygwinのperlで通るようにworkaroundを追加した。 2007/08/17のダンプデータでは大丈夫(なはず)。 cygwinのperl特有の事項を制限・不具合の項に書き直した。

2007/08/19 cygwinのperlでは相互参照を無効にするよう記載した。

2007/06/29 自ページ内への参照の処理がうまくできていなかったのを修正した。 リダイレクトの検出に失敗することがあったのを修正した。 warningを標準出力に出すようにした。

2007/06/24 正規表現について色々勘違いしていたので修正した。 デバッグモード時に有効になるコードを入れ忘れていたのを修正した。 整形済みテキストに対応した。 整形処理をもう少し真面目にやるようにした。

2007/06/20 公開。


最終更新日: 月曜日, 7月 08 2019 @ 11:24 午後 JST; 93,084 閲覧件数 印刷用画面