Skip to main content
FlexiLayout を作成する際、検索領域を常に相対位置だけ、たとえば別のオブジェクトの上、下、左、または右という関係だけで定義できるとは限りません。これは特に、検索領域に不要なオブジェクトが含まれている場合に当てはまります。たとえば、scanning 中に入り込んだオブジェクトなどです。これらのオブジェクトは認識ブロックに含まれてはならないため、対応する要素を作成するときに除外する必要があります。 以下の図にある住所のfieldは、そのよい例です。field 名 Address:(Address) (これらは認識から除外する必要があります) 、および住所そのもの (これは認識される必要があります) の相対的な位置関係に注目してください。

Exclude function が検索領域から Region を除外する仕組み

Exclude function は、要素の検索領域から Region を除外します。除外する Region は、function の呼び出し時に指定します。 除外対象の Region には、次のいずれかを指定できます。
  • 仮説の Region (検出されていても、されていなくても可)
  • 見つかった要素の Rectangle または矩形の array
  • 見つかった仮説の一部であるオブジェクトの Region から構成された Region (ExcludeSet メソッドを参照)
認識対象の住所テキストの横に、field 名 Company、Address、(Address) が表示された 2 つの住所 field のサンプル図。

Exclude.fsp sample プロジェクト

Exclude.fsp project (フォルダー %public%\ABBYY\FlexiCapture\12.0\Samples\FLS\Tips and Tricks\Exclude) では、Exclude function の動作を確認できます。 この project には 4 つのページがあります。
  • ページ 1 – 住所fieldは複数行で記載されています。Address: という名前は 1 行目にあるため、data field が field 名の右側または下側にあるとは言えません。ただし、この名前は認識から除外する必要があります。
  • ページ 2 – 住所fieldには名前がありません。
  • ページ 3 と 4(Address) という行が data field 内にあります。ただし、これも認識から除外する必要があります。
すべてのページで、住所fieldは会社名のfieldの下にあります。

field 名と住所 field の要素を作成する

まず、Static Text 要素を作成し、名前を CompanyHeader にして値を指定します。この要素は、field 名を検出するために使用します。 次に、Static Text 要素を作成し、名前を AddressHeader にします。この要素も、field 名を検出するために使用します。次の Static Text 値を指定します: Address:|(Address)。つまり、この行として検出し、その後、住所 field の認識対象から除外するすべての候補を列挙します。 これらの行の検索条件を Relations field で設定し、CompanyHeader 要素の下方 (Below) を検索するよう指定します。
名前用の要素は、住所 field 用の要素より先に作成する必要があります。これは、Exclude 関数では、現在の要素よりも FlexiLayout tree の上位にある要素しか参照できないためです。
FlexiLayout のマッチング手順 (Match FlexiLayout) を実行し、住所の項目名が出現するすべてのページで正しく見つかることを確認します。 この例の住所 field は複数行にわたるため、これを検索するための Paragraph 要素を作成します。名前を Address にし、前の例と同様に、CompanyHeader 要素の下方 (Below) を検索するよう指定します。 FlexiLayout のマッチング手順を実行すると、ページ 1、3、4 では、項目名の行も住所 field に含まれていることがわかります。
Exclude.fsp Project に対する ABBYY FlexiLayout Studio の FlexiLayout matching results のスクリーンショット。ページ 1、3、4 の検出された 住所 field に住所 field 名が誤って含まれていることを示しています。

Address の検索領域から field 名を除外する

次に、Address 要素の Properties ダイアログに戻り、Search Constraints タブをクリックします。Exclude regions of elements セクションの横にある Add… をクリックし、リストから AddressHeader 要素を選択します。 要素のプロパティを保存したら、FlexiLayout のマッチング手順をもう一度実行します。すると、住所 field に対応するブロックの Region が非矩形になることがわかります。これは、名前の Region がそこから切り取られているためです。
AddressHeader の Region を除外した後の ABBYY FlexiLayout Studio での FlexiLayout マッチング結果のスクリーンショット。field 名が切り取られているため、住所ブロックが非矩形になっていることを示しています。
Exclude regions of elements セクションでは、別の要素に対して見つかった 仮説 の Region を、現在の要素の検索領域から除外できます。より複雑な形状の Region を除外する場合、または最初に Region を検出してから 認識 処理から除外する場合は、Advanced pre-search relations field で ExcludeExcludeRectExcludeSet 関数を使用します。
ブロックの Region は定義上、複数の矩形を上下に重ねて構成されるため、どの水平線もその Region と交差できるのは 1 回だけです。つまり、垂直方向に突き出た「歯」のような形状は存在できません。したがって、除外する line と必要な情報が同じ高さ、またはほぼ同じ高さにある場合、その名前を FlexiLayout の作成段階で除外することはできません。その場合は、FlexiCapture で認識後に Substitute from the list ルールを使用して名前を除外できます。