メインコンテンツへスキップ
一部の文書では、請求書番号 field はフィールド名の右側にありますが、別の文書では名前の下にあります (文書 1 と 2 では、フィールドデータは名前のすぐ下に配置されています) 。 InvoiceNumber 要素を作成するには:
  1. InvoiceHeader 要素に、型が Character String の要素を作成し、InvoiceNumber という名前を付けます。 注。 要素名は、InvoiceNumber フィールドに対応するブロック名と同じである必要はありません。ただし、名前を同じにしておくと、FlexiLayout での作業に便利です。
  2. Character String タブをクリックします。
  3. アルファベットを指定します。 -./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
  4. アルファベットに含まれない文字の Percentage を 30% に設定します。
  5. Character count フィールドで、文字列の長さに対してファジー区間 {-1, 3, 20, INF} を指定します。これは、想定される値が 3 文字から 20 文字の範囲に収まることを前提としています。この区間外の仮説にはペナルティが課されます。
  6. 一部の画像では、請求書番号 field の 検索範囲 に、すでに検出された kwInvoiceDate 要素が含まれています。この要素を 検索範囲 から除外し、プログラムがこのテキストを 請求書番号 field の仮説に含めないようにします。
    • Search Constraints タブで、Exclude regions of elements フィールドの横にある Add… ボタンをクリックします。
    • 要素のリストから kwInvoiceDate を選択します。
    • OK をクリックします。文字列 SearchElements.InvoiceHeader.kwInvoiceDate が Exclude regions of elements フィールドに表示されます。
  1. Advanced タブをクリックします。
  2. Advanced pre-search relations で追加条件を指定します。kwInvoiceNumber という名前が見つからない場合は InvoiceNumber フィールド を検索せず、見つかった場合は検索範囲を矩形の array として指定します。1 つは名前の右側、もう 1 つは名前の少し下にオフセットした矩形です。FlexiLayout language では、この条件は次のように記述できます。 if kwInvoiceNumber.IsNull then Dontfind(); else { WholeWordMOde: true; MaxGapInLine: 30dt; RectArray DataRegion; Let r1= Rect (kwInvoiceNumber.Rect.Right, kwInvoiceNumber.Rect.Top -20dt, kwInvoiceNumber.Rect.Right + 650dt, kwInvoiceNumber.Rect.Bottom + 50dt); // InvoiceNumber フィールド 名の右側の矩形で検索範囲を制限します。 Let r2 = Rect (kwInvoiceNumber.Rect.Left - 100dt, kwInvoiceNumber.Rect.Bottom, kwInvoiceNumber.Rect.Right + 100dt, kwInvoiceNumber.Rect.Bottom + 100dt); // InvoiceNumber フィールド 名の下側の矩形で検索範囲を制限します。 DataRegion = RectArray (r1); DataRegion.Add (r2); RestrictSearchArea (DataRegion); }
  3. field の検索範囲は、field 名の右側の矩形 1 つと、その下側の矩形 1 つの合計 2 つに制限されます。field データが field 名の右側に配置されている場合、その下には別のテキストが存在することがよくあります (テスト画像では、ほとんどの場合、Date field の名前とデータです) 。この不要なテキストも 請求書番号 field の検索範囲に含まれるため、プログラムはそのテキストに対する 仮説 を生成します。この 仮説 の Quality に影響を与えるには、Advanced post-search relations field で追加チェックを指定します。field 名の下にあるテキストほど、ペナルティを大きくします。FlexiLayout language では、この条件は次のように記述できます。 if not IsNull then { FuzzyQuality: Top - kwInvoiceNumber.Rect.Top, {-30000,0,0,10000}*dt; } // 名前と field の上境界との距離が大きいほど、対応する 仮説 へのペナルティも大きくなります。このケースでは、上境界が名前の上境界と一致する要素の 仮説 が最も高い Quality になります。
  4. InvoiceFooter 要素を一時的に Exclude し、FlexiLayout を Match します。
  5. InvoiceNumber ブロック の位置を、InvoiceNumber 要素の rectangular region を縦横それぞれ 5 ドット拡大したものとして指定します。これを行うには、Expression を選択して次の expression を入力します。 Rect outputRect; outputRect = InvoiceHeader.InvoiceNumber.Rect; IsNull = InvoiceHeader.InvoiceNumber.IsNull; // InvoiceNumber 要素が検出されている場合は、ブロック region も検出済みとして扱います。 OutputRegion = outputRect; OutputRegion.Inflate (5dt, 5dt);