Skip to main content
要素の仮説は、見つかる場合と見つからない場合があります。見つかった仮説は、通常、1 つまたは複数の画像オブジェクト、またはその断片に基づいて形成されます (例外は White Gap 要素で、これは画像オブジェクトをまったく含まない場合があります) 。

仮説の Region と 境界

単純な要素で見つかった仮説は、常に連続した Region です。White GapSeparator、および Barcode 要素の仮説は、常に単一の Rectangle です。 仮説が検出された画像オブジェクトのセットに基づいて形成される場合、たとえば Paragraph 要素の仮説では、その仮説の Region は、検出されたオブジェクトの Rectangle の array に基づいて構築されます。この方法で作成された Region は、仮説の Region メソッドで取得できます。 画像上に仮説の Region を表示するとき、または仮説に基づいてブロックを作成するとき、Region の 境界 は各 Rectangle の 境界 に正確には一致しません。代わりに、見やすく表示するために 検索領域 の 境界 が滑らかにされます。この方法で作成された Region は、仮説の SimplifiedRegion メソッドを使用して取得できます。 Region メソッドと SimplifiedRegion メソッドは、Advanced タブの Advanced pre-search relations field (要素の 検索領域 を記述する場合) または、ブロックのプロパティを記述してすでに見つかっている要素を使用する場合の Region expression field のいずれかで使用できます。 仮説が見つからなかった場合、それはその 検索領域 の ファジー矩形 と一致します。画像上に見つからなかった仮説を表示するとき、FlexiLayout Studio は ファジー矩形 の外側の Rectangle を描画します。 任意の仮説の LefttopRight、および Bottom の 境界 は range です。見つかった各仮説では、その range は点になります。つまり、Left.Start = Left.Endtop.Start = top.End などです。見つからなかった仮説では、境界 の range はその 検索領域 の range と一致します。

FlexiLayout コードでの仮説へのアクセス

ブロックと要素の対応するダイアログのコードで、生成された仮説とそのプロパティにアクセスすると、FlexiLayout を設定するための追加の機能を利用できます。要素の仮説には、要素名でアクセスできます。Advanced post-search relations field で現在の要素の仮説にアクセスするには、プロパティ名のみを使用できます。 仮説とそのプロパティには、読み取り専用モードでアクセスします。要素の仮説には、要素の Properties ダイアログの Advanced タブにある Advanced pre-search relations および Advanced post-search relations field、ならびにブロックの Properties ダイアログにある Region expression field でアクセスできます。 Advanced pre-search relations では、FlexiLayout ツリーで現在の要素より上にあるすべての要素について、生成された仮説 (およびそのプロパティ) にアクセスできます。Advanced post-search relations では、FlexiLayout ツリーで現在の要素より上にある要素について生成された仮説と、現在の要素自体の仮説にアクセスできます。 Region expression では、すべての要素の仮説 (およびそのプロパティ) にアクセスできます。

すべての要素型の仮説のプロパティ

次の表は、すべての要素型の仮説のプロパティを示しています。

例: プロパティにアクセスする前にヌル仮説を確認する

単純要素またはGroup要素の仮説のプロパティにアクセスする前に、アクセスしようとしている仮説がヌル仮説ではないことを確認してください (IsNullプロパティを確認します) 。ヌル仮説のプロパティにアクセスすると (これは要素が検出されなかったことを示します) 、エラーが発生します。 プログラムのCD-ROMに収録されている Sample 1 のプロジェクトを使用する例を見てみましょう。 文書上にバーコード形式の識別子があり、バーコードの値が1556897142240である文書にのみ FlexiLayout をマッチさせたいとします。 バーコードのプロパティと検索条件を記述する要素 (Sample 1 の要素IdentityNumber) のAdvanced post-search relationsセクションに、次のコードを記述します。
Apply または Check をクリックします。コンパイラでは構文エラーは検出されず、コードに問題はないように見えます。しかし、Sample 1 の任意のページで FlexiLayout のマッチングを実行しようとすると、次のエラーメッセージが表示されます: Error in element “MainGroup.IdentityNumber”, Advanced relations section: Attempt to access undefined hypothesis MainGroup.IdentityNumber. エラーの原因は次のとおりです。FlexiLayout Studio はまず、バーコード要素の仮説を見つけます。次に、バーコードの値をコードで指定された値と比較します。値が異なる場合、Quality: 0; というコードによって、その仮説の値が 0 にリセットされます。 その後、この要素に対してヌル仮説が生成され、FlexiLayout Studio はそのヌル仮説に対しても value != "1556897142240" という条件をチェックします。ヌル仮説の value にアクセスすることはできないため (このプロパティを持たないため) 、FlexiLayout Studio は “…undefined hypothesis…” というエラーメッセージを表示します。 そのため、コードを次のように調整してください:
前述のコードは、必須要素に対してのみ動作します。 オプション要素の場合は、コードを次のように調整してください。
そうでない場合、0 にリセットされるのは実際の仮説の Quality だけです。すると FlexiLayout Studio はヌル仮説を生成しますが、この仮説に対しては if not IsNull 条件は実行されません。 そのため、最終的な (ヌル) 仮説の Quality は要素の Properties で指定された値のままになります (デフォルト値のままであれば 0.97) 。その結果、指定された要素がなくても、FlexiLayout Studio は FlexiLayout のマッチングを続行します。 コードに else {Quality: 0;} を追加すると、この文はすべての仮説 (ヌル仮説を含む) に対して実行されます。さらに、この要素で仮説チェーン全体も 0 にリセットされるため、FlexiLayout のマッチングは停止します。

Region() メソッドと SimplifiedRegion() メソッドの比較

Region Region() メソッドと Region SimplifiedRegion() メソッドは、どちらも要素の領域を返しますが、Region Region() メソッドが返すのは正確な領域です。
検出されたオブジェクトの境界に沿った、ABBYY FlexiLayout Studio で Region() メソッドにより返される正確な仮説領域のスクリーンショット。
Region SimplifiedRegion() メソッドは、境界座標に基づいて作成されたRectangleを返します。
境界座標に基づく、ABBYY FlexiLayout Studio で SimplifiedRegion() メソッドにより返される単純化されたRectangleの仮説領域のスクリーンショット。