Zum Hauptinhalt springen
Suchen Sie das Feld TotalAmount sowohl rechts von seinem Namen als auch darunter. So erstellen Sie das Element TotalAmount:
  1. Erstellen Sie im Element SumGroup ein Element vom Typ Zeichenkette und nennen Sie es TotalAmount.
  2. Klicken Sie auf die Registerkarte Zeichenkette.
  3. Geben Sie das Alphabet an: ’,-.0123456789OSZosz
  4. Setzen Sie den Wert für Percentage der nicht im Alphabet enthaltenen Zeichen auf 30 %.
  5. Geben Sie im Feld Character count das folgende Fuzzy-Intervall {-1, 1, 20, INF} an, das die Länge der Zeichenkette bewertet. Gehen Sie davon aus, dass alle möglichen Werte in das Intervall von 1 bis 20 Zeichen fallen. Jede Hypothese außerhalb dieses Intervalls wird abgewertet.
  6. Legen Sie keine zusätzlichen Einschränkungen fest und behalten Sie die Standardeinstellungen bei.
  7. Klicken Sie auf die Registerkarte Suchbedingungen und schließen Sie die Region der Hypothese für das Element kwTotal aus dem Suchbereich aus.
  8. Klicken Sie auf die Registerkarte Advanced.
  9. Geben Sie unter Advanced pre-search relations zusätzliche Suchbedingungen an: Wenn der Feldname kwTotal erkannt wurde, geben Sie den Suchbereich als Array von Rechtecken an: ein Rechteck rechts vom Feldnamen und ein Rechteck unterhalb des Feldnamens mit einem gewissen Versatz. Andernfalls suchen Sie nicht nach dem Bildobjekt. In der FlexiLayout language kann diese Bedingung wie folgt geschrieben werden:
    If not kwTotal.IsNull Then
    // Wenn der Feldname kwTotal erkannt wurde
    {
    WholeWordMOde: true;
    MaxGapInLine: 30dt;
    RectArray DataRegion;
    Let r1= Rect (kwTotal.Rect.Right, kwTotal.Rect.Top -20dt, kwTotal.Rect.Right + 1800dt, kwTotal.Rect.Bottom + 50dt);
    // Begrenzt den Suchbereich auf ein Rechteck rechts vom Feldnamen.
    Let r2 = Rect (kwTotal.Rect.Left - 100dt, kwTotal.Rect.Bottom, kwTotal.Rect.Right + 100dt, kwTotal.Rect.Bottom + 200dt);
    // Begrenzt den Suchbereich auf ein Rechteck unterhalb des Feldnamens.
    DataRegion = RectArray (r1);
    DataRegion.Add (r2);
    RestrictSearchArea (DataRegion);
    }
    else Dontfind();
    // Andernfalls nicht nach dem Objekt suchen.
    
  10. Der Suchbereich des Feldwerts ist auf zwei Rechtecke begrenzt, eines rechts und das andere unterhalb des Feldnamens. Wenn sich der Feldwert rechts vom Feldnamen befindet, steht auf den meisten Bildern unter dem Feldnamen noch weiterer Text. Da dieser redundante Text auf den meisten Bildern in den Suchbereich des Feldes TotalAmount einbezogen wird, erstellt das Programm eine Hypothese für diesen Text. Um die Qualität dieser Hypothese zu beeinflussen (das heißt, sie zu verringern), geben Sie unter Advanced Nachsuchbeziehungen eine zusätzliche Prüfung an: Je weiter sich der Feldwert unter dem Feldnamen befindet, desto größer ist die Strafe. In der FlexiLayout language kann diese Prüfung wie folgt geschrieben werden:
    If not IsNull then
    {FuzzyQuality: 400dt - width, {-50000,0,0, 50000}*dt;
    // Hypothesen für Elemente mit einer 400 Dots breiten Region haben die maximale Qualität
    if width < 50dt then Quality: 0;
    // Elemente mit weniger als 50 Dots werden nicht berücksichtigt
    if Top > kwTotal.Rect.Top then
    { FuzzyQuality: Top - kwTotal.Rect.Top, {0,0,0, 20000}*dt;
    }
    }
    // Diese Prüfung bedeutet: Je größer die Differenz, desto größer die Strafe.
    
    Zur Beschreibung der Positionen von Objekten auf der Seite und der Abstände zwischen ihnen wird ein 2D-Koordinatensystem verwendet. Der Punkt (0, 0) befindet sich in der oberen linken Ecke des Bildes. Die horizontale Achse verläuft von links nach rechts, die vertikale Achse von oben nach unten.
  11. Gleichen Sie das FlexiLayout mit den Bildern ab, um sicherzustellen, dass das Programm das Element auf allen Bildern, auf denen es vorkommt, zuverlässig erkennen kann.
  12. Geben Sie die Position des Blocks TotalAmount als rechteckige Region des Elements TotalAmount an, die vertikal und horizontal um 5 Dots erweitert wird. Wählen Sie dazu Expression aus und geben Sie den folgenden Ausdruck an:
    Rect outputRect;
    outputRect = SumGroup.TotalAmount.Rect;
    IsNull = SumGroup.TotalAmount.IsNull;
    OutputRegion = outputRect;
    OutputRegion.Inflate (5dt, 5dt);