fess-crawlerに、PostScript(.ps)ファイルからテキストを抽出するPsExtractorを追加しました。これにより、Fessのクロール対象としてPostScriptファイルも扱えるようになります。
PostScriptとは
PostScriptはAdobe Systemsが開発したページ記述言語で、印刷やDTPの分野で広く使われてきたフォーマットです。PostScriptファイルにはテキスト描画命令が含まれていますが、プログラミング言語としての側面もあり、テキストの抽出は単純ではありません。
PsExtractorの仕組み
PsExtractorは、PostScriptのshow系オペレータを解析してテキストを抽出します。対応しているオペレータは以下の通りです。
| オペレータ | 説明 |
|---|---|
show | 基本的なテキスト描画 |
ashow | 文字間隔調整付きテキスト描画 |
widthshow | 特定文字の幅調整付きテキスト描画 |
awidthshow | ashow + widthshow の組み合わせ |
kshow | カーニングプロシージャ付きテキスト描画 |
xshow | 個別X座標指定のテキスト描画 |
yshow | 個別Y座標指定のテキスト描画 |
xyshow | 個別XY座標指定のテキスト描画 |
文字列リテラルとしては、括弧形式の文字列((Hello World))と16進文字列(<48656C6C6F>)の両方に対応しています。括弧形式の文字列では、エスケープシーケンス(\n、\t、8進数など)やネストされた括弧も正しく処理されます。
DI設定
extractor.xmlにpsExtractorコンポーネントを登録し、application/postscript MIMEタイプにマッピングしています。
制限事項
現在の実装では以下のケースには対応していません。
- ループやプロシージャによる動的なテキスト生成
- フォントエンコーディングの再定義
- バイナリエンコードされたPostScriptファイル
静的にshow系オペレータで描画されるテキストの抽出に特化した実装となっています。
テスト
12件のテストケースを作成し、基本的なテキスト抽出、16進文字列、エスケープシーケンス、ネストされた括弧、空コンテンツ、各種show系オペレータなどの動作を検証しています。
変更の詳細はPR #140を参照してください。