知り合いからWikipedia-jaのデータを、辞書ソフトで使われる JIS X 4081 形式に変換出来ないかと頼まれた。
変換ツールは存在するのだが、プログラマではないその知り合いでは、自分で試すには難易度が高すぎるらしい。
順序:
FreePWINGとwikipedia-fpw:
CPANで必要?かもなモジュール:
他参考:FreePWINGのバージョンがビミョーに古い記事もあるので注意。FreePWING 1.6以降推奨らしい。
今回使ったサーバでは64bitintが無効のPerlがインストールされていた。OSインストール時に一緒に入ってきたパッケージなので、弄りたくない。
そこで、適当なディレクトリに手動でPerlを64bitint, largefiles対応でコンパイル&インストールしてそっちを使うようにする。
かなりざっくりと、tarボールのDLからコンパイル+インストールの流れ:
$ 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 (適当にセッティング)
かなりざっくりと:
$ 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
ざっくりと:詳細は前掲の参考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:
#!/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位。
終わったのが・・・
$ 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時間半かかった。
"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"でぐぐってみたら・・・
2GBを超えるファイルを扱うには
-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
が必要とのこと。
さすがにzipコマンドまで手動コンパイル&インストールする気力は無かった。
ディレクトリ構造だけ整えて、試しにtar.gzで圧縮してみたら上手く行った。
"fpwmake"でパッケージ&圧縮する時は、使われるzipコマンドが2GB超えに対応しているか確認してからの方がよい。
そうでない場合は、手動でディレクトリ構造を整え、別途2GB超えに対応している圧縮ツールを使う。