仮説とは、検出されたオブジェクトが特定の要素に対応している、つまりその要素に指定されたプロパティと検索条件を満たしているとプログラムが見なすことです。
要素の検索領域内に、その要素に対応するオブジェクトまたはオブジェクトの集合が複数存在することがあります。この場合、プログラムは検出された各オブジェクトに対して仮説を立てます。
仮説は、その品質によって特徴付けられます。
仮説の品質は、検出されたオブジェクトが対応する要素の記述にどの程度一致しているかを表すもので、0 から 1 までの数値です。
仮説の品質は [ Pre-search quality ]*[ Post-search quality ] として計算されます。ここで、
- Pre-search quality は、Properties ダイアログおよび Advanced pre-search relations field で行った設定の品質です
- Post-search quality は、Advanced post-search relations field で指定した条件を適用した結果です。
Group element の仮説の品質は、それを構成するすべての要素の仮説の品質を掛け合わせて計算されます。
optional elements については、プログラムはヌル仮説を立てます。
ヌル仮説とは、検索領域内で optional element に対応するオブジェクトが何も検出されなかった場合に、プログラムが立てる仮説です。
つまり、プログラムが optional element に対応するオブジェクトを 1 つも見つけられなかった場合でも、FlexiLayout のマッチングを停止するのではなく、ヌル仮説を立て、optional element の作成時にユーザーが設定した品質をそれに割り当てます。
便宜上、ここでは特定の仮説に含まれるオブジェクトの集合を 仮説 という用語で表します。
画像上の 2 つの静的テキストを見つけるために使用する 2 つの要素を作成するとします。1 つ目の静的テキストは「mother」、2 つ目の静的テキストは「father」で、さらに「father」というテキストは常に「mother」というテキストの下にあることがわかっているとします。最初の Static Text 要素 StaticText1 は「mother」というテキストを探すために使用し、2 つ目の Static Text 要素 StaticText2 は「father」というテキストを探すために使用します。また、両方の要素はオプションで、それぞれのヌル仮説の品質は 0.97 に設定されているものとします。
StaticText1 の検索領域には制約を設定しません。「father」というテキストは常に「mother」というテキストの下にあることがわかっているため、StaticText2 は常に StaticText1 の下に配置されなければならないと指定できます。これを行うには、StaticText2 要素の Properties ダイアログの Relations タブで、対応する制約 Below: SearchElements.StaticText1; を入力します。
次の図は、「mother」という単語が 2 回 (「father」という単語の上と下に) 現れ、さらに「father」という単語の上にある「mother」という単語に OCR エラーが 1 つ含まれている画像に対する FlexiLayout のマッチング結果を示しています。
FlexiLayout のマッチングにより、StaticText1 要素について 2 つの仮説が生成されました。1 つ目の仮説は、OCR エラーを 1 つ含み、「father」という単語の上にある「mother」という単語に対応しており、品質は 0.98 です。2 つ目の仮説は、「father」という単語の下にある「mother」という単語に対応しており、品質は 1 です。
この段階では、各チェーンの品質は対応する仮説の品質と同じです。したがって、最良のチェーンは品質 1 の仮説で構成されます。
プログラムには StaticText1 要素の下で StaticText2 を探すように指示してあり、さらに StaticText1 要素について 2 つの仮説が生成されているため、プログラムは現在、2 つの検索領域で必要な静的テキストを探しています。プログラムが、品質 1 の 2 つ目の仮説、つまり「father」という単語の下にある「mother」という単語を見つけた仮説を採用すると、StaticText1 要素の下にある StaticText2 要素を見つけることができず、その結果、品質 0.97 のヌル仮説を生成します。結果として得られる仮説チェーンの品質は 1x0.97=0.97 になります
プログラムが、品質 0.98 の 1 つ目の仮説、つまり「father」という単語の上にある「mother」という単語を見つけた仮説を採用すると、StaticText1 要素の下にある StaticText2 要素を正常に検出し、品質 1 の仮説を生成します。結果として得られる仮説チェーンの品質は 0.98x1=0.98 になります。
その結果、プログラムは全体の品質が 0.98 のチェーンを選択します。