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 による各種辞書