Kazuhiro's blog
ようこそ! Kazuhiro's blog
水曜日, 4月 26 2017 @ 01:02 午後 JST
 記事を友人にメールする 印刷用画面 

英語版WikipediaのダンプデータをJIS X 4081に変換する

general

FreePWINGによる巨大書籍の作成実験の一環としてとしてウィキペディア英語版の変換を試みました。 Cygwinで行っていましたが、変換にはFreePWINGとwikipedia-fpwのいずれにも更に変更 (まだ未公開です) が必要でした。 変更の原因としてはやはりエントリが多いことによるメモリ不足のようで、手元ではDB_Fileモジュールとtieを使って凌いでいます。

変換には変換元のファイルも含めておよそ60GB弱必要で、作成されたHONMONファイルは約14.2GBです。NTFS圧縮後で約7.5GBになっています。要した時間はだいたい50時間強くらいだと思います (PIII 1G x 2, 2GB, Cygwin)。

(追記) FreePWING 1.5に対するパッチとwikipedia-fpw-20080616に対するパッチを公開しておきます。 パッチを当てたFreePWINGは既存のスクリプトでも動作するはずですが、fpwlinkが倍、もしくはそれ以上時間がかかるようになります。

(追記の追記) wikipedia-fpwのパッチは書籍のタイトルやディレクトリ名・パッケージ名は元のままなので適宜変更してください。

タグ: EPWING FreePWING Wikipedia

 記事を友人にメールする 印刷用画面 

FreePWINGで4GB以上の書籍を作成する

general

JIS X 4081では理論上は1ファイル約190GBまでの書籍が構築可能ですが、EBStudioやFreePWINGではそのような大きな書籍は作成できません。 作成するのにどの程度手間がかかるか、wikipedia-fpwが2GBの壁に届く前にちょっと試してみました。

まず、FreePWINGにパッチをあて、4GB超の書籍を作成できるようにしてみました。

  • 必要なもの
    large fileをサポートし、64ビットintなperl

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

    large fileをサポートするファイルシステム

    例えばFAT32では4GBを超えるファイルを作成できません。

    パッチ

    FreePWING 1.5にあてるパッチです。 もうちょっと工夫すれば32ビットintなperlでも大丈夫そうな気がしますが今回は見送ります。

oald7-fpwで、テキスト登録時にテキストを水増しして4GB超の書籍を作成してみたところ、エラーも起きずにそれっぽいものが作成されました。 次にブラウザ側の検証です。

  • 4GB超の書籍を扱える(であろう)アプリケーション
    EB Libraryを利用するアプリケーション

    64ビット環境の場合はebzip以外は動作すると思いますが未確認です。 32ビット環境でoff_tが64ビット以上の場合は、パッチが必要ですが動作しました (NetBSD 4.0_BETA2)。

  • 4GB超の書籍を扱えないアプリケーション
    EB Libraryを利用するアプリケーション

    Windows環境 (Cygwin + MinGWでビルドしたもの) では扱えませんでした。 ちょっとした小細工で何とかなりそうな気はしますがまだ未検証です。

    ebzip

    4GBまでのファイルしか想定されていません。

    EBWin

    正しく扱えませんでした (2.09)。

    DDWIN (おそらく)

    未確認です。

(追記) Cygwin + MinGWではMinGWのインクルードファイルにパッチをあてれば_FILE_OFFSET_BITSを設定することでoff_tを64ビットにできるので何とかなりました。

(追記の追記) EB Libraryとebzipは4.4以降で、EBWinは3.01以降で4GB超の書籍に対応しました。

タグ:FreePWING EB Library EPWING
 記事を友人にメールする 印刷用画面 

SDIC辞書のインデキシングを最適化する

Lookup

とか書くと偉そうに聞こえますが、自作のコードで必要な部分だけのインデックスポイントを書きださせることで、インデックスのサイズを小さくするという話です。 既存のアイデアではありますが、こういうのはスクリプト言語でやった方が楽じゃないかなぁという事で、紹介します。

SDICを使ってSDIC形式の辞書を検索する時、SUFARY(あるいはSary)を使ってインデキシングを行うことで検索の高速化が可能になります。 しかし、速くなるのはいいのですが、mkary等でインデキシングを行うと元のSDIC辞書のおよそ3倍という、結構な大きさのインデックスファイルが必要になります。 SDIC形式な辞書の場合、コメントの部分や、タグや実体参照の途中等からマッチさせる必要はありません。というか、されるとうれしくありません。 ですので、この部分についてはインデックスポイントを出力しないようにしてみます。 これにより、インデックスのサイズがおよそ2割前後小さくなりました。 また、全文検索を捨てて検索語だけでインデックスを作ったり、後方一致検索も捨てることで更に小さくできます。

mkary 最適化 検索語のみ 前方一致検索のみ
gene.sdic.ary 9,591,548 7,754,864 3,007,944 229,480
jedict.sdic.ary 10,397,976 7,422,524 2,245,376 452,778

一応公開しておきます。使い方ですが

% perl sdic_dumpip.pl gene.sdic

の様に使います。検索語のみでインデックスを作成する場合は

% perl sdic_dumpip.pl --index=keyword gene.sdic

の様にしてください。前方一致検索用のインデックスを作成する場合は

% perl sdic_dumpip.pl --index=prefix gene.sdic

の様にしてください。いずれの場合でも書き出し後にmkary(あるいはmksary)によるインデックスのソートが必要です。

% mkary -so gene.sdic
% mksary -s gene.sdic

タグ:SDIC Lookup

(2008/09/08 追記) <K>以外のタグもスキップするように変更しました。

 記事を友人にメールする 印刷用画面 

FreePWING 1.5 is released

general

本日、FreePWING 1.5がリリースされました。 これには、sound patchと私が加えていた変更がそのまま取り込まれていますので、私が行っていた改造版の公開は終了しました。

(特に私がサボっていた)ドキュメントの記述等、作者の笠原さんにも色々と作業いただきましてどうもありがとうございました。

タグ:FreePWING

 記事を友人にメールする 印刷用画面 

mkdirhierのバグ

general

imakeに入っているmkdirhierがCygwin環境では動作しない(事がある)というお話しです。

なんでいきなりimakeなのかというとFreePWINGにこのmkdirhierが入っているからです。 簡単に書くと、Cygwin環境でmkdirhierに絶対パスを引数として与えるとディレクトリの作成に失敗するというものです。 何故失敗するかというと、絶対パス名が与えられると先頭の'/''//'に変更してディレクトリを掘ろうとするためです。 以前からあった問題なのかは知りません。 UNIX環境では問題にならないようですが、Cygwin環境ではUNC名として解釈されるので予期しない動作を来します (大抵の場合はエラー)。

ちなみに、最近のmkdirには同等の動作をするオプション (-p) があるので、mkdirhierがなくてもあまり困らないかもしれません。 改造版のFreePWINGは修正しました。

タグ:FreePWING