17 September 2009

Amazon EC2を使ってWikipediaをEPWINGデータに変換

Wikipedia日本語版のデータをEPWING化する場合、データファイルが2ギガバイトを超えるため、Perlの整数(INT)が64ビットで計算されるように設定されている必要がある。

が、私の手元にあるどのマシンのPerlも整数(INT)は32ビット。

Perlをソースコードから再構築すれば64ビット化もできるが、システム標準のものを大幅に書き換えるのはちょっと不安がある。

そこで、Amazon EC2のサーバを使うこととする。

今回利用した仮想マシンのイメージ(AMI)は、開発環境がインストール済みの 「 alestic/fedora-8-developer-20080411.manifest.xml 」 を用いた。

システム起動後にSSHでログオンして作業を行う。

■ 既存のPerlのチェック

[root@ip-10-242-203-159 ~]# perl -V Summary of my perl5 (revision 5 version 8 subversion 8) configuration: Platform: osname=linux, osvers=2.6.21.7-2.fc8xen, archname=i686-linux-thread-multi-64int-ld ~ 略 ~ Compile-time options: MULTIPLICITY PERL_IMPLICIT_CONTEXT PERL_MALLOC_WRAP THREADS_HAVE_PIDS USE_ITHREADS USE_LARGE_FILES USE_LONG_DOUBLE USE_PERLIO USE_REENTRANT_API ~ 略 ~

wikipedia-fpwが2ギガバイトを超えるファイルを操作するときに必要となる USE_LARGE_FILES と USE_64_BIT_INT のうち、64ビット整数のほうがサポートされていない。

■ Perlをソースコードから再構築

Fedoraのミラーサイトより、適当なサーバを選択して、Fedora 8のSRPMSで、「 perl-5.8.8-30.fc8.src.rpm 」 をダウンロードする。

ソースコードを展開する。

[root@ip-10-242-203-159 ~]# rpm -ivh perl-5.8.8-30.fc8.src.rpm

展開先のディレクトリが無いと怒られるはずなので、ディレクトリを作成して展開を完了する。 そのディレクトリに移動して、ソースコードを解凍する。

[root@ip-10-242-203-159 ~]# cd /usr/src/redhat/SOURCES [root@ip-10-242-203-159 SOURCES]# tar xvf perl-5.8.8.tar

解凍したソースコードのディレクトリに移動し、ビルドを行う。

[root@ip-10-242-203-159 SOURCES]# sh Configure -Duselargefiles -Duse64bitint -Dusethreads -Dcc=gcc -Dccflags=-DDEBIAN -Dcccdlflags=-fPIC -Uafs -Ud_csh -Ud_ualarm -Uusesfio -Uusenm -DDEBUGGING=-g -Doptimize=-O2 -Duseshrplib -Dd_dosuid -Dinstallprefix=/usr -Dprefix=/usr -Duselongdouble -des [root@ip-10-242-203-159 SOURCES]# make [root@ip-10-242-203-159 SOURCES]# make test [root@ip-10-242-203-159 SOURCES]# make install

■ Perlが64ビット整数になったことをチェック

[root@ip-10-242-203-159 ~]# perl -V Summary of my perl5 (revision 5 version 8 subversion 8) configuration: Platform: osname=linux, osvers=2.6.21.7-2.fc8xen, archname=i686-linux-thread-multi-64int-ld ~ 略 ~ Compile-time options: MULTIPLICITY PERL_IMPLICIT_CONTEXT PERL_MALLOC_WRAP THREADS_HAVE_PIDS USE_64_BIT_INT USE_ITHREADS USE_LARGE_FILES USE_LONG_DOUBLE USE_PERLIO USE_REENTRANT_API ~ 略 ~

■ FreePWINGのインストール

FreePWINGのホームページよりソースコードを入手し、ビルド、インストールを行う。

[root@ip-10-242-203-159 ~]# wget ftp://ftp.sra.co.jp/pub/misc/freepwing/freepwing-1.6.tar.bz2 [root@ip-10-242-203-159 ~]# bzip2 -d freepwing-1.6.tar.bz2 [root@ip-10-242-203-159 ~]# tar xvf freepwing-1.6.tar [root@ip-10-242-203-159 ~]# cd freepwing-1.6 [root@ip-10-242-203-159 freepwing-1.6]# ./configure [root@ip-10-242-203-159 freepwing-1.6]# make [root@ip-10-242-203-159 freepwing-1.6]# make install

■ wikipedia-fpwの入手と作業ディレクトリへの展開

wikipedia-fpwのホームページより、スクリプトのパッケージを入手し展開する。

[root@ip-10-242-203-159 mnt]# wget http://ikazuhiro.g.ribbon.to/dic/files/wikipedia-fpw-20090831-src.tar.gz [root@ip-10-242-203-159 mnt]# tar xvf wikipedia-fpw-20090831-src.tar.gz

数式のイメージを扱わないのなら、Kazuhiro's blog wikipedia-fpw に書かれているように、設定ファイル(wikipedia-fpw.conf)の中の enable_math を 0 に設定する。 (今回は、0 に設定した)

■ Wikipediaのxmlデータの取得

Wikipedia日本語版のダウンロードサイトより、最新版のxmlデータ 「 jawiki-latest-pages-articles.xml.bz2 」 を、前項の wikipedia-fpw で作成された作業ディレクトリにダウンロードする。

また、XMLファイルは wikipedia.xml にリネームしておく。

[root@ip-10-242-203-159 wikipedia-fpw-20090831]# wget http://download.wikimedia.org/jawiki/latest/jawiki-latest-pages-articles.xml.bz2 [root@ip-10-242-203-159 wikipedia-fpw-20090831]# bzip2 -d jawiki-latest-pages-articles.xml.bz2 [root@ip-10-242-203-159 wikipedia-fpw-20090831]# mv jawiki-latest-pages-articles.xml wikipedia.xml

解凍したWikipedia日本語版のファイルサイズは、約4ギガバイト。(圧縮された元ファイルは986メガバイト)

-rw-r--r-- 1 root root 4278263915 Sep 17 08:12 wikipedia.xml


■ 変換用スクリプトを作成する

SSHをログオフしても変換作業がひとりでに進むよう、次のようなスクリプトを作成する。

autoexec.sh
fpwmake 1> /mnt/wiki/log1.txt 2>&1 date >> /mnt/wiki/log1.txt fpwmake catalogs 1> /mnt/wiki/log2.txt 2>&1 date >> /mnt/wiki/log2.txt fpwmake package 1> /mnt/wiki/log3.txt 2>&1 date >> /mnt/wiki/log3.txt

■ 変換作業開始

[root@ip-10-242-203-159 wikipedia-fpw-20090831]# sh autoexec.sh &

現在変換作業中… 果たして何時間かかるか。

topコマンドで見たCPU使用率は

top - 11:01:20 up 3:32, 1 user, load average: 1.00, 1.00, 0.95 Tasks: 41 total, 3 running, 38 sleeping, 0 stopped, 0 zombie Cpu(s): 37.9%us, 0.0%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 62.1%st

1.7GHzのCPUを38%で稼動させているということは、10時間くらいかかるのでは…

■ 結果

fpwmake 処理時間 9時間6分
fpwmake catalogs 処理時間 1秒未満
fpwmake package 処理時間 14分

fpwmakeの出力
Makefile:41: warning: overriding commands for target `work/cgraph.dep' fpwutils.mk:299: warning: ignoring old commands for target `work/cgraph.dep' /usr/local/libexec/freepwing/perl.sh preparser \ ./wikipedia.xml ./entries Entry: 3; アンパサンド. Entry: 5; 言語. Entry: 6; 日本語. Entry: 7; 地理学. Entry: 8; EU (曖昧さ回避). Entry: 9; 国の一覧. ~ 略 ~ Entry: 1209412; 葉山町長政治団体の公選法違反問題 Entry: 1209414; よゐこのアキパラ Entry: 1209415; GM大宇・ベリタス fpwwikipedia: Elapsed time : 30620sec. fpwwikipedia: Number of entries: 631765 /usr/local/libexec/freepwing/perl.sh /usr/local/libexec/freepwing/fpwsort -workdir work /usr/local/libexec/freepwing/perl.sh /usr/local/libexec/freepwing/fpwindex -workdir work /usr/local/libexec/freepwing/perl.sh /usr/local/libexec/freepwing/fpwcontrol -workdir work /usr/local/libexec/freepwing/perl.sh /usr/local/libexec/freepwing/fpwlink -workdir work -module default
fpwmake catalogsの出力
Makefile:41: warning: overriding commands for target `work/cgraph.dep' fpwutils.mk:299: warning: ignoring old commands for target `work/cgraph.dep' rm -f catalogs /usr/local/libexec/freepwing/catdump -u catalogs.txt catalogs
fpwmake packageの出力
Makefile:41: warning: overriding commands for target `work/cgraph.dep' fpwutils.mk:299: warning: ignoring old commands for target `work/cgraph.dep' rm -rf WIKIP rm -f wikipedia-fpw-20090831.zip /usr/bin/gmake INSTALLDIR="." DIR="WIKIP" install gmake[1]: Entering directory `/mnt/wiki/wikipedia-fpw-20090831' Makefile:41: warning: overriding commands for target `work/cgraph.dep' fpwutils.mk:299: warning: ignoring old commands for target `work/cgraph.dep' /usr/local/libexec/freepwing/mkdirhier ./WIKIP for file in catalogs ; do \ /usr/local/libexec/freepwing/cphier $file ./WIKIP/$file ; \ chmod 0644 ./WIKIP/$file ; \ done /usr/bin/gmake INSTALLDIR="./WIKIP/WIKIP" install-directory gmake[2]: Entering directory `/mnt/wiki/wikipedia-fpw-20090831' Makefile:41: warning: overriding commands for target `work/cgraph.dep' fpwutils.mk:299: warning: ignoring old commands for target `work/cgraph.dep' /usr/local/libexec/freepwing/mkdirhier ./WIKIP/WIKIP/data for file in honmon ; do \ /usr/local/libexec/freepwing/cphier $file ./WIKIP/WIKIP/data/$file ; \ chmod 0644 ./WIKIP/WIKIP/data/$file ; \ done /usr/local/libexec/freepwing/mkdirhier ./WIKIP/WIKIP/gaiji for file in gai16h gai24h gai30h gai48h gai16f gai24f gai30f gai48f ; do \ if test -f $file ; then \ /usr/local/libexec/freepwing/cphier $file ./WIKIP/WIKIP/gaiji/$file ; \ chmod 0644 ./WIKIP/WIKIP/gaiji/$file ; \ fi ; \ done gmake[2]: Leaving directory `/mnt/wiki/wikipedia-fpw-20090831' packageextra='GFDL README.PKG' ; \ for file in $packageextra ; do \ case $file in \ *=*) srcfile="`echo $file | sed 's/=.*//'`" ; \ dstfile="`echo $file | sed 's/.*=//'`" ; \ /usr/local/libexec/freepwing/cphier $srcfile ./WIKIP/$dstfile ; \ if [ -f ./WIKIP/$dstfile ] ; then \ chmod 0644 ./WIKIP/$dstfile ; \ fi ;; \ *) /usr/local/libexec/freepwing/cphier $file ./WIKIP/$file ; \ if [ -f ./WIKIP/$file ] ; then \ chmod 0644 ./WIKIP/$file ; \ fi ;; \ esac ; \ done gmake[1]: Leaving directory `/mnt/wiki/wikipedia-fpw-20090831' chmod 777 WIKIP chmod 777 WIKIP/WIKIP/data zip -9rkq wikipedia-fpw-20090831.zip WIKIP rm -rf WIKIP

処理終了後のディレクトリエントリ

[root@ip-10-242-203-159 wikipedia-fpw-20090831]# ll total 7547164 -rw-r--r-- 1 1005 513 17989 Feb 15 2007 COPYING -rw-r--r-- 1 1005 513 5855 Sep 3 07:59 ChangeLog -rw-r--r-- 1 1005 513 20403 Jun 12 2007 GFDL -rw-r--r-- 1 1005 513 1571 Sep 3 08:00 Makefile -rw-r--r-- 1 1005 513 3320 Aug 28 07:26 README -rw-r--r-- 1 1005 513 594 Jun 19 2007 README.PKG -rw-r--r-- 1 root root 205 Sep 17 09:45 autoexec.sh -rw-r--r-- 1 root root 2048 Sep 17 18:51 catalogs -rw-r--r-- 1 1005 513 153 Jun 18 2007 catalogs.txt -rw-r--r-- 1 1005 513 711 Jun 19 2007 entities.pl -rw-r--r-- 1 root root 21276487 Sep 17 09:52 entries -rw-r--r-- 1 1005 513 20543 Sep 3 08:00 fpwwikipedia -rw-r--r-- 1 1005 513 8275 Mar 17 2009 fpwwikipedia_cgraph -rw-r--r-- 1 1005 513 3436 Aug 14 22:29 fpwwikipedia_common -rw-r--r-- 1 root root 2399442944 Sep 17 18:51 honmon -rw-r--r-- 1 root root 29 Sep 17 09:40 log1.txt -rw-r--r-- 1 root root 10 Sep 17 09:52 preparse.dep -rw-r--r-- 1 1005 513 3436 Jan 8 2009 preparser -rw-r--r-- 1 1005 513 9388 Jan 25 2009 tables -rw-r--r-- 1 root root 1021576049 Sep 17 19:05 wikipedia-fpw-20090831.zip -rw-r--r-- 1 1005 513 5468 Sep 17 09:33 wikipedia-fpw.conf -rw-r--r-- 1 root root 4278263915 Sep 17 08:12 wikipedia.xml drwxr-xr-x 2 root root 4096 Sep 17 18:51 work

■ 完成したファイルのダウンロード

wikipedia-fpw-20090831.zip をパソコンにダウンロードします。 通信速度が遅く、2.6Mbps 程度しか速度が出ません。 1 GBytesのファイルをダウンロードするのに、およそ1時間かかります。

■ 動作確認

EBWin ver 3.03 -> 表示可能
DDWin ver 2.66-> エラー(異常終了)
EBPocket WM5 ver 3.02b -> 表示不可

同一作者のEBWinで表示可能で、EBPocketが表示不可。バージョンアップに期待するしかないのでしょうか。なお、データファイルが2ギガバイト未満の過去のデータを用いれば、EBPocketでも表示可能です。詳しくは「こちら」のホームページへ。

20090917-ebwinimg.png
EBWinでの表示

■ 参考資料

フリーの辞書一覧 Maximilk
FreePWING による各種辞書