サンプル4。ステップ5.4:Invoice Numberフィールド、InvoiceNumber要素
Invoice Numberフィールドがフィールド名の右側に位置している文書もあれば、フィールド名の下に位置している文書もあります(文書1および2ではフィールドデータが名前の真下に位置しています)。
InvoiceNumber要素を作成するには:
- InvoiceHeader要素で、種類文字列の要素を作成して名前をInvoiceNumberと付けます。
注意:要素の名前はInvoiceNumber フィールドに対応するブロックの名前と同じでなくても大丈夫です。ですが、FlexiLayoutで作業をしている時は、同じ名前が便利です。 - 文字列タブをクリックします。
- アルファベットを指定します:
-./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz - 非アルファベット文字の割合を30%に設定します。
- 文字カウントフィールドで、文字列の長さのファジー間隔{-1, 3, 20, INF}を、可能な値を3〜20文字と仮定しながら指定します。この範囲外の仮説にはペナルティが科せられます。
- 一部の画像では、Invoice Numberフィールドの検索領域に既に検出されているkwInvoiceDate要素が含まれていることがあります。この要素を検索領域から除外すると、このテキストはInvoice Numberフィールドの仮説には含められなくなります:
- 検索制限タブで、追加...フィールドの隣の要素区域を除外ボタンをクリックします。
- 要素のリストからkwInvoiceDateを選択します。
- OKをクリックします。文字列SearchElements.InvoiceHeader.kwInvoiceDateが要素区域を除外フィールドに表示されます。
表示...
- 高度タブをクリックします。
- 高度な検索前関係で、追加的な条件を指定します:名前kwInvoiceNumberが見つからない場合は、InvoiceNumberフィールドを検索しない、または検索領域を矩形配列として指定します: 名前の右に1つの矩形および小さなオフセット付きの名前の下に別の矩形。FlexiLayout言語では、以下のように書き込みできます:
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フィールドの名前の下の矩形で制限します。検索領域をInvoiceNumberフィールドの名前の下の矩形で制限します。
DataRegion = RectArray (r1);
DataRegion.Add (r2);
RestrictSearchArea (DataRegion);
} - フィールドの検索領域は、フィールド名の右と下の2つの矩形に制限されています。フィールドデータがフィールド名の右にある場合は、フィールドの下に他のテキストがあることも多いです(試験画像では、日付フィールドの名前およびデータが一般的です)。この無関係なテキストはInvoice Numberフィールドの検索領域に含まれるため、このテキストの仮説は生成されます。この仮説の質に影響を及ぼすには 高度な検索後関係フィールドで追加的な確認を指定します:フィールド名の下のテキストが小さいほど、ペナルティが大きくなります。FlexiLayout言語では、この条件を以下のように書き込みできます:
if not IsNull then
{ FuzzyQuality: Top - kwInvoiceNumber.Rect.Top, {-30000,0,0,10000}*dt;
}
// フィールドの名前と上部境界の距離が長いほど、対応する仮説に対するペナルティは大きくなります。この場合、上部境界と名前の上の境界が一致する要素の仮説が最高品質になります。 - InvoiceFooter要素を一時的に除外してFlexiLayoutを合致させます。
- InvoiceNumberブロックの位置を、5ドットずつ縦横に拡大したInvoiceNumber要素の矩形区域として指定します。これには、表現を選択して以下の表現を入力します:
Rect outputRect;
outputRect = InvoiceHeader.InvoiceNumber.Rect;
IsNull = InvoiceHeader.InvoiceNumber.IsNull;
// InvoiceNumber要素が検出された場合、ブロック区域を検出済みと処理します。
OutputRegion = outputRect;
OutputRegion.Inflate (5dt, 5dt);
12.04.2024 18:16:07