RestrictSearchAreaによる検索領域の制限
関数RestrictSearchAreaで、検索領域を矩形、矩形の配列、または区域として指定できます。
文書の異なるページで、求められるフィールドがその名前と異なる位置に置かれることが、よくあります。例えば、フィールドが名前の右に配置可能なページもあれば、名前の下に配置可能なページもあります。このような場合、検索領域を矩形の配列として指定することをおすすめします。このようなケースでRestrictSearchArea関数を使用することについての詳細は、要素の検索にNearestおよびFuzzyQualityを使用をご覧ください。
また、複数の要素で同じ検索制限を重複させるよりも、RestrictSearchArea関数を使用することをおすすめします。
ある種類の要素の使用が何らかの理由(低い画像の質やレイアウトの特殊性など)で不十分である時に、この機能を使用して日付フィールドまたは他のフィールドの検索領域を記述します。
いかにしてRestrictSearchArea関数を日付フィールドの検索に使えるのかを見ていきましょう。通常、少なくとも2種類の要素で日付フィールドを検索することをおすすめします:日付および文字列。でも画像の質が悪い場合、2つの要素では不十分な場合があります。日付フィールドの検索の組織化に関する詳細は、質の低い事前認識での日付の検出をご覧ください。
サンプルプロジェクトSearchOfDate.fspでこの関数を見ていきましょう(フォルダ%public%\ABBYY\FlexiCapture\12.0\Samples\FLS\Tips and Tricks\RestrictSearchArea)。このプロジェクトは、実際には、Date\FCSプロジェクトフォルダの同じ名前のプロジェクトのコピーです。そのすべての要素の検索制限(DateField、DateAsString、DateAsObjectCollection)は同じで、以下の図の通りです。
ですが、現在のプロジェクトでは、要素DateAsStringおよびDateAsObjectCollectionの関係タブの検索制限を重複させるのではなく、高度タブの高度な検索前関係フィールドで以下のコードを書いて、関数RestrictSearchAreaを使用します:
if (DateField.IsNull == FALSE) then Dontfind();
else RestrictSearchArea (DateField.Rect);
このコードの意味は、日付フィールドを文字列またはオブジェクト収集として検索することが、Date要素で検出できなかった場合にのみ、試みられるということです。また、要素DateFieldが検出されていない領域で、両方の要素が検索されます。DateField.Rect方法がDateField要素の仮説を囲む矩形を復元するために、これが起こります。仮説は見つかっていないので、囲む矩形は検索領域と一致します。従って、検出されていないDateField要素の検索領域を囲む矩形と一致しない、DateAsStringおよびDateAsObjectCollection要素の検索領域を指定します。
12.04.2024 18:16:07