知り合いからWikipedia-jaのデータを、辞書ソフトで使われる JIS X 4081 形式に変換出来ないかと頼まれた。 変換ツールは存在するのだが、プログラマではないその知り合いでは、自分で試すには難易度が高すぎるらしい。 #more|| * 基本手順と参考URL 順序: + PerlをINT64bit、large-fileサポート付でコンパイル。 + FreePWINGを入れる。これ"./configure && make && make install"が必要。 + wikipedia-fpwを持ってきて、テケトーなディレクトリに展開する。 + wikipedia-jaのデータ持ってきて、wikipedia-fpwのディレクトリで伸長する。 + wikipedia-fpw.confを調整する。相互参照(enable-reference)をOFF、数式を使わなければenable_mathをOFF。 + 変換実行。 FreePWINGとwikipedia-fpw: - FreePWING -- http://www.sra.co.jp/people/m-kasahr/freepwing/ - wikipedia-fpw -- http://ikazuhiro.g.ribbon.to/dic/wikipedia-fpw.html CPANで必要?かもなモジュール: - mimeTex, Image::Magick(数式ON時) - DB_File, BDB(?) : こちらはOut of memoryとかが出た時用。 他参考:FreePWINGのバージョンがビミョーに古い記事もあるので注意。FreePWING 1.6以降推奨らしい。 - http://blog.otsuka-miso.com/Entry/7/ - http://ikazuhiro.s206.xrea.com/staticpages/index.php/wikipedia-fpw - http://kagebane.blogspot.com/2009/02/wikipedia-wikipediawikipedia-epwing.html - http://naotaso.seesaa.net/article/70499096.html - http://pub.ne.jp/spitz/?entry_id=1070982 - http://yoosee.net/d/archives/2008/03/03/002.html * Perlのコンパイル&インストール(適当) 今回使ったサーバでは64bitintが無効のPerlがインストールされていた。OSインストール時に一緒に入ってきたパッケージなので、弄りたくない。 そこで、適当なディレクトリに手動でPerlを64bitint, largefiles対応でコンパイル&インストールしてそっちを使うようにする。 かなりざっくりと、tarボールのDLからコンパイル+インストールの流れ: #pre||> $ wget http://www.cpan.org/src/perl-5.10.1.tar.bz2 $ tar jxvf perl-5.10.1.tar.bz2 $ ./Configure \ -ds -e \ -Duse64bitint -Duselargefiles \ -Doptimize=-O2 -Dcccdlflags=-fPIC -Darchname=i386-linux \ -Dd_dosuid -Dusethreads -Ud_setresuid -Ud_setresgid -Dd_semctl_semun \ -Di_db -Di_ndbm -Di_gdbm \ -Dprefix=/foo/bar/perl-5.10.1 \ -Dinstallprefix=/foo/bar/perl-5.10.1 (細かいコンパイルオプションは、パッケージでインストールされたPerlのものを流用) $ make && make test $ su # make install ||< 今回コンパイル+インストールしたPerlを使いたい場合は、PATHを調整する。 bash例: $ PATH=/foo/bar/perl-5.10.1/bin:$PATH $ export PATH $ cpan (適当にセッティング) * FreePWINGのインストール かなりざっくりと: #pre||> $ wget ftp://ftp.sra.co.jp/pub/misc/freepwing/freepwing-1.6.1.tar.bz2 $ tar jxvf freepwing-1.6.1.tar.bz2 $ cd freepwing-1.6.1 $ ./configure \ --prefix=/foo/bar/freepwing-1.6.1 \ --with-perllibdir=/foo/bar/perl-5.10.1/lib/site_perl/5.10.1 (手動インストールしたPerlを使うように、"--with-perllibdir"を調整する) ||< なおautoconfig中で"perl5"ディレクトリを見ている。上で手動コンパイル&インストールしたPerlは perl5.10.1 というディレクトリにインストールされた為、とりあえずシンボリックリンクを作ってごまかした: $ ln perl5.10.1 perl5 あとはmake & make install: $ make $ su # make install * wikipedia-fpwとwikipediaデータのDL, 変換実行 ざっくりと:詳細は前掲の参考URL参照。 $ wget http://ikazuhiro.s206.xrea.com/filemgmt/visit.php/134 $ tar zxvf wikipedia-fpw-20091202-src.tar.gz $ cd wikipedia-fpw-20091202 $ wget http://download.wikimedia.org/jawiki/20100217/jawiki-20100217-pages-articles.xml.bz2 時間掛かるので、nohupコマンドでターミナル(puttyやTeraTerm)からログアウトしても実行し続けるようにする。そのための、PATH調整を含めた簡単なスクリプトを作る。 do_conv.sh: #pre||> #!/bin/sh PATH=/foo/bar/freepwing-1.6.1/bin:/foo/bar/perl-5.10.1/bin:$PATH export PATH fpwmake > foo.log 2>&1 echo $0 >> foo.log ||< 実行。 $ nohup sh do_conv.sh & これで、ターミナルからログアウトしてもOK。 →仕掛けたのが2/22, 23:00位。 終わったのが・・・ #pre||> $ stat foo.log File: `foo.log' Size: 66141838 Blocks: 129320 IO Block: 4096 通常ファイル Device: 303h/771d Inode: 15418803 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 600/ lain) Gid: ( 600/ king) Access: 2010-02-23 08:29:29.000000000 +0900 Modify: 2010-02-23 05:33:47.000000000 +0900 Change: 2010-02-23 05:33:47.000000000 +0900 ||< →5時過ぎ。6時間半かかった。 * 変換データの圧縮、パッケージングでの注意点(2GB越のデータをzip圧縮→要注意) "fpwmake"コマンドの引数に"package"を指定すると、辞書ソフトで読めるディレクトリ構造にパッケージング+圧縮してくれる。 $ fpwmake package 自分の環境ではすぐ終わってしまった。 圧縮しているようには思えないほどすぐに終了してしまったので、パッケージファイルを解凍してみる。 ・・・HONMONファイルとか実際にコピーされてないっぽい。 ディレクトリ構造、README.PKGやCATALOGS, ライセンスファイルの入ったzipファイルは作成されていた。 ログに実行されたシェルスクリプトが出てきたし、 http://www.sra.co.jp/people/m-kasahr/freepwing/doc/freepwing-04.html#package とかも見て、足りてないデータファイルを手動でコピーしてzipする。 ・・・が、それでもHONMONファイルがzipアーカイブされていない。 ログに出てきたzipコマンドは下記の通り。 zip -9rkq wikipedia-fpw-20091202.zip WIKIP "-q"を外して詳細を表示させると、見事にHONMONがスルーされている。 手動でアーカイブに追加してみると・・・ $ zip -9k wikipedia-fpw-20091202.zip WIKIP/WIKIP/DATA/HONMON zip warning: name not matched: WIKIP/WIKIP/DATA/HONMON zip error: Nothing to do! (wikipedia-fpw-20091202.zip) HONMONファイルは2GBを超えている。・・・いや~な予感がして、"zip warning: name not matched 2GB"でぐぐってみたら・・・ - Gentoo Bug 200995 - app-arch/zip missing flags for >2GB files -- http://bugs.gentoo.org/200995 2GBを超えるファイルを扱うには -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE が必要とのこと。 さすがにzipコマンドまで手動コンパイル&インストールする気力は無かった。 ディレクトリ構造だけ整えて、試しにtar.gzで圧縮してみたら上手く行った。 "fpwmake"でパッケージ&圧縮する時は、使われるzipコマンドが2GB超えに対応しているか確認してからの方がよい。 そうでない場合は、手動でディレクトリ構造を整え、別途2GB超えに対応している圧縮ツールを使う。