除外を使用した要素の除外
FlexiLayoutを作成する時、検索領域は常に「上下左右」の用語で定義されるわけではありません。これは、スキャン中に入った可能性のあるオブジェクトなど、検索領域に不要なオブジェクトが含まれている時に特に当てはまります。これらのオブジェクトは認識ブロック内部に作成されてはいけないため、対応する要素を作成する際に除外します。下の図の所在地のフィールドは良い例です。フィールド名「所在地:」、「(所在地)」(認識から除外)および所在地自体(認識が必要)の相互位置です。
除外関数は、区域を要素の検索領域から除外します。除外する区域は、関数を呼び出す時に指定されます。除外区域は、仮説の区域(検出されたか否か)、見つかった要素の矩形または矩形の配列か、または見つかった仮説の一部であるオブジェクトの区域から構築された区域かもしれません(ExcludeSet方法参照)。
除外関数がいかにして機能するかを、Exclude.fspプロジェクトで見ていきましょう(フォルダ%public%\ABBYY\FlexiCapture\12.0\Samples\FLS\Tips and Tricks\Exclude)。
プロジェクトには4ページあります:
- ページ1 - 所在地フィールドは数行に書き込まれる。名前「所在地:」は最初の行にあるため、求められるデータフィールドがフィールド名の右または下にあるとは言えません。ですが、名前は認識から除外されなければいけません;
- ページ2 – 所在地フィールドには名前はない;
- ページ3および4 – 行「(所在地)」はデータフィールド内。ですが、認識から除外されなければいけません。
すべてのページで、所在地フィールドは企業名のフィールドの下にあります。
最初に種類静的テキストの要素を作成して名前をCompanyHeaderと付け、その値を指定します。この要素は、フィールドの名前を検出するために使用されます。
種類静的テキストの要素を作成して名前をAddressHeaderと付けます。この要素は、フィールドの名前を検出するために使用されます。以下の静的テキスト値を指定します:Address:|(Address)すなわち、検出され、所在地フィールドの認識から除外されるこの行のすべてのバリエーションをリスト化します。関係フィールドでこれらの行の検索制限を記述し、CompanyHeader 要素の下(下)でこれらの行が検索されるよう指定します。
注意:除外関数では、現在の要素よりもFlexiLayoutツリーの上の要素しか参照できないため、名前の要素は所在地フィールドの要素の前に作成します。
FlexiLayout合致手順(FlexiLayout合致)を起動して、所在地の名前が発生しているすべてのページにあることを確認します。
この例の所在地フィールドには複数の行があるため、検索するために種類段落の要素を作成します。前の例の通り、名前を所在地と付け、 CompanyHeader要素の下(下)で検索されるよう指定します。
FlexiLayoutの合致を実行すると、ページ1、3および4で、名前の行も所在地フィールドに含まれていることがわかります。
所在地要素のプロパティダイアログボックスに戻って、検索制限タブをクリックします。要素区域を除外セクションの隣の追加...をクリックして、リストからAddressHeader要素を選択します。
要素のプロパティを保存した後、再度FlexiLayoutの合致を実行します。所在地フィールドに対応するブロックの区域が非矩形の形状になったことがわかります。名前の区域が切り捨てられているためです。
注意:要素区域を除外セクションで、現在の要素の検索領域から、別の要素の見つかった仮説の区域を除外することができます。幾何学的に複雑な領域を除外するまたは区域を最初に検出して次に認識から除外するには、高度な検索前関係フィールドで、関数除外、ExcludeRect、ExcludeSetを使用します。
注意:定義によるブロックの区域は互いの上にある矩形で構成されているため、横線は区域を一度しか横切ることができないすなわち縦の「歯」が飛び出ないということです。従って、除外する線と必要な情報が同じ水準またはほぼ同じ水準にある場合、FlexiLayout作成の段階で名前を除外することはできません。この場合、「リストから置換」規則を使用して、FlexiCaptureで認識された後に、名前を除外することができます。
12.04.2024 18:16:07