Fessの画像検索で本文に入れるメタデータを絞る

画像をFessで検索すると、説明やキーワードのほかに、ピクセル数、圧縮方式、カラープロファイルなどの値が本文へ並ぶことがありました。15.10向け開発ブランチでは、画像の本文へ追加するメタデータを、タイトルや説明などの項目に絞る変更がマージされています。

画像の本文に追加する項目を選ぶ

MIMEタイプがimage/で始まる文書には、新しいcrawler.metadata.content.image.includesが適用されます。値はカンマ区切りの正規表現で、メタデータ名全体への一致を判定します。初期値は次のとおりです。

crawler.metadata.content.image.includes=dc:title,dc:description,dc:creator,dc:subject,dc:rights,w:Comments,Exif IFD0:Image Description,Exif IFD0:Artist,Exif IFD0:Copyright,Exif IFD0:Windows XP .*,Exif SubIFD:User Comment,Object Name,Headline,Caption/Abstract,By-line,By-line Title,Credit,Source,Copyright Notice,Sub-location,City,Province/State,Country/Primary Location Name,Special Instructions,tEXt tEXtEntry,iTXt iTXtEntry,zTXt zTXtEntry

EXIF・XMP・IPTCの説明、作成者、キーワード、著作権、地名、Windowsのプロパティ、PNGのテキストチャンクなどを対象にします。新しいキーが古い設定ファイルに存在しなくても、実装側の初期値が使われます。

たとえば説明とタイトルだけに絞る場合は、対応版のfess_config.propertiesで次のように設定できます。これは初期値のリストを置き換えるため、ほかに必要な項目があれば追加します。

crawler.metadata.content.image.includes=dc:title,dc:description

設定を反映してクローラーを再起動し、対象画像を再取得するクロールで検索本文を比較します。空のリストは、画像のメタデータを本文に追加しません。これはOCRで抽出する文字自体を無効にする設定ではありません。画像以外のMIMEタイプには、この追加リストの制限は適用されません。

除外設定と抽出データを区別する

既存のcrawler.metadata.content.excludesは引き続き優先されます。初期値は次のとおりです。

crawler.metadata.content.excludes=resourceName,X-Parsed-By,Content-Encoding.*,Content-Type.*,X-TIKA.*,tk:.*,X-FESS.*

追加リストに一致しても、除外リストにも一致する項目は本文へ入りません。一方、サイズやカメラ設定などの通常の画像メタデータは抽出データに残るので、crawler.metadata.name.mappingやスクリプトで利用できます。本文への追加と、抽出そのものの削除は別の処理です。

IPTCとXMPに異なる作成者がある場合、TikaはIPTCのBy-lineをdc:creator、XMP側をxmp:dc:creatorにすることがあります。後者は初期の追加リストに含まれないため、必要なら実際の抽出名を確認して追加します。

一時ファイル由来の情報は抽出結果から取り除く

関連するfess-crawlerの修正では、Tikaが画像の一時保存先について返すFile Name、File Size、File Modified Dateを抽出結果へコピーしなくなります。tikaExtractor-123.outのような名前や一時保存時刻は元画像の情報ではないためです。この除去に新しい設定スイッチはありません。

これら3項目は、本文追加リストに戻すだけでは復活せず、マッピングやスクリプトでも取得できなくなります。元ファイルのサイズや更新日時を使う連携は、抽出器が一時ファイルから返す値に依存していないか確認してください。

既存の画像は本文を再作成する

更新前に登録した画像の本文は自動では変わりません。変更のない文書を差分クロールが省略する場合もあるため、実際に画像を再取得して本文抽出する条件でクロールします。説明やキーワードでヒットすることと、カメラ由来の数値が本文やハイライトに混ざらないことを比較すると効果を確認できます。

PRではEXIF・XMP・IPTC・Windowsプロパティ・PNGテキストを持つ画像などを使って確認しています。説明を持たずカメラ情報だけの画像は、OCRが無効なら本文が空になる場合があります。メタデータを検索用に補っていた運用では、対象画像の代表例で確認してください。

関連PR

Fessで必要なクロールだけスキャンPDFをOCRにかける

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で実行しないことを確認しています。認識精度と所要時間は資料によるため、実際の帳票やスキャン画像で評価が必要です。

関連PR

Fess 15.10向けTika 4移行で見直す抽出・OCR設定

Fessの15.10向け開発ブランチに、Apache Tika 4.1.0への移行がマージされました。文書から本文やメタデータを取り出す仕組みの更新に伴い、独自の抽出設定やOCR設定を使っている環境では、移行前の確認が必要です。

tika.xmlの設定を引き継げない

15.10向けの実装では、Tikaのパーサーをコードで構築し、tika.xmlを読み込みません。配布構成からもこのファイルを取り除いています。従来のファイルが設定ディレクトリに残っていると、起動時にfess.logへ警告を出します。

特に、parser-excludeで特定のパーサーを除外していた環境は確認が必要です。ファイルを残しても除外設定は効かず、従来止めていたパーサーが動く可能性があります。既存の設定を控え、移行後に同じ運用条件を満たせるか検証してから、不要になったファイルを整理してください。

従来の主な配置場所はZIP版のapp/WEB-INF/conf/tika.xml、RPM/DEB版の/etc/fess/tika.xmlです。既存の正式版を運用している段階で、この説明だけを根拠に削除する必要はありません。

Docker側の対応はfess/snapshotとfess/snapshot-slimで、削除されるファイルを/etc/fessへ移動しようとしてビルドが失敗することを防ぎます。リリース済み15.x用Dockerfileは今回の修正対象に含まれません。

OCRの秒とミリ秒を区別する

Fess全体のOCR設定は次の初期値を維持します。

crawler.document.ocr.enabled=false
crawler.document.ocr.language=eng
crawler.document.ocr.timeout=120

OCRは初期状態で無効、言語は英語、タイムアウトは120秒です。有効にする場合は、クローラープロセスの環境にTesseract本体と必要な言語データを用意します。tesseractと、利用する場合のImageMagickは、そのプロセスのPATHから見つかる必要があります。

一方、クロール設定のconfig.tika.tesseract.configで指定するTesseract用プロパティファイルでは、タイムアウトのキーがtimeoutMillisになり、単位はミリ秒です。たとえば300秒なら次のように記述します。

language=jpn
timeoutMillis=300000

旧キーtimeoutSecondsは値を1000倍して互換変換し、fess-crawler.logへ警告を出します。両方ある場合はtimeoutMillisが優先されます。Fess全体のcrawler.document.ocr.timeoutは引き続き秒なので、単位を混同しないようにします。クロール設定ごとのファイルは全体設定より優先されます。

tesseractPath、tessdataPath、imageMagickPathをこのファイルに書いても効果がありません。また、config.tika.pdf.configで指定するPDF用ファイルでは、ocrStrategyやocrDPI、ocrImageTypeなど、Tika 4で削除されたプロパティは警告付きで無視されます。適用できない指定を残したままにせず、ログを確認してください。PDF設定のextractIncrementalUpdateInfoはFess側で初期値をfalseにしています。

既存のPDFBoxによる本文抽出からTikaへの引き継ぎ条件を含め、代表的なスキャンPDFと文字入りPDFで再確認してください。PRのOCR検証は仮のtesseractによるもので、実際のTesseractによる文字認識品質や所要時間までは確認されていません。

メタデータ名と抽出結果を確認する

Tika 4では多くのメタデータ名が変わります。互換フィルターが対応する名前はTika 3の名前へ戻しますが、すべての名前を戻すわけではありません。たとえばExcelのprotectedはmsoffice:excel:protected-worksheetになります。crawler.metadata.name.mappingやスクリプトで使うキーは、実際の抽出結果と照合してください。

Tika内部用のtk:、X-TIKA:、zip:で始まるメタデータは、文書へ渡す前に除去します。これらをマッピングやスクリプトで取得することはできません。crawler.metadata.content.excludesの新しい初期値は次のとおりです。

crawler.metadata.content.excludes=resourceName,X-Parsed-By,Content-Encoding.*,Content-Type.*,X-TIKA.*,tk:.*,X-FESS.*

古い設定ファイルにtk:.*がなくても内部情報を本文に混ぜない処理があります。一方、それ以外の新しいメタデータは除外条件に一致しなければ本文へ追加されるため、独自の除外条件も見直します。

文字コードの報告名も、Shift_JISがwindows-31j、EUC-JPがx-eucJP-Openになるなどの違いがあります。ローカルファイルのContent-Lengthが実サイズになる点や、Markdownの解析も含め、既存文書で検索内容や連携処理に影響がないか確認するとよいでしょう。

移行前に用意するもの

独自のtika.xml、Tesseract/PDF用プロパティファイル、メタデータのマッピング設定を控え、代表的な文書の抽出結果を比較できるようにしておきます。対応版へ切り替えた検証環境では、設定警告、本文、メタデータ、OCR処理を確認します。既存インデックスの本文は自動で書き換わらないため、必要な文書は本文抽出が再実行される形でクロールしてください。

fess-crawlerの抽出クラスを利用する独自プラグインでは、TikaExtractor.setTikaConfigの削除やExtractDataのインターフェース変更もあるため、15.10向けの再ビルドと互換性確認が必要です。

関連PR