Fessの15.10向け開発ブランチで、クロール設定ごとにOCRを有効にした場合、スキャンPDFにも同じ指定が適用されるよう修正されました。OCRが必要なフォルダーだけを対象にし、ほかのクロールの負荷を抑えたい場合に役立ちます。
全体を無効のまま、対象のクロールだけ指定する
全体設定の初期値はcrawler.document.ocr.enabled=false、言語はeng、タイムアウトは120秒です。これまで画像やOffice文書内の画像では個別設定が働いても、本文を持たないPDFは全体設定が無効だとOCRされませんでした。今回、Tesseractが利用できればPDFの処理時にも個別設定を確認します。
対象クロールの「設定パラメーター」に次を指定します。
config.tika.tesseract.config=tesseract.properties
値はファイルシステムの絶対パスではなく、クラスパス上のリソース名です。ZIP版はapp/WEB-INF/classes/、RPM/DEB版は/etc/fess/にファイルを用意します。日本語と英語なら、内容を次のようにします。
language=jpn+eng
preserveInterwordSpacing=true
timeoutMillis=300000
クローラープロセスからPATH経由で実行できるTesseract本体と、指定言語のデータが必要です。導入後はクローラーを再起動して設定を反映し、代表的な画像とスキャンPDFで確認してください。文字入りPDFは従来どおりPDFBoxで抽出し、その本文が空の場合にOCRへ引き継ぎます。すべてのPDFをOCRし直す修正ではありません。
個別ファイルは全体設定とマージされない
ファイルに省略した値は全体設定を引き継がず、Tikaの初期値になります。languageはeng、timeoutMillisは120000、preserveInterwordSpacingはfalseです。言語は明示し、日本語ではpreserveInterwordSpacing=trueも指定します。省くと「請 求 書」のように文字間に空白が入り、「請求書」で検索できない場合があります。
timeoutMillis=300000は300秒です。全体設定のcrawler.document.ocr.timeoutは秒なので単位を区別します。旧timeoutSecondsは互換変換されますが、警告を確認して新しいキーへ移行します。tesseractPath、tessdataPath、imageMagickPathをこのファイルに書いても効果はありません。
全体が無効で個別ファイルもなければOCRは実行されません。逆に全体が有効な環境で特定クロールだけ止めたい場合は、その個別ファイルにskipOcr=trueを指定します。全体設定が有効かどうかを示す起動時のOCRログは、個別設定の実行有無を表すものではありません。
既存文書とクロール条件を確認する
OCRにはCPU時間がかかるため、対象や同時実行数を絞って確認します。Webクロールでは画像URLが初期状態で除外されるので、画像を対象にする場合は除外URLの設定も確認します。
既にインデックスされた文書は設定を変えるだけでは書き換わりません。「最終更新日時の確認」によって変更のない文書が省略される場合は、一時的にその確認を無効にするなど、対象文書の取得と本文抽出が再実行される条件でクロールしてください。
PRではTesseract 5.5.2を使ったファイル・Webクロールで、全体無効と個別有効の組み合わせでもスキャンPDFを認識すること、skipOcr=trueで実行しないことを確認しています。認識精度と所要時間は資料によるため、実際の帳票やスキャン画像で評価が必要です。