> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Optimizar la búsqueda de elementos de grupo

> Optimice la búsqueda del elemento grupo en FlexiLayout Studio: las cadenas con calidad 1 detienen la generación de hipótesis, por lo que debe aplicar penalizaciones de FuzzyQuality para una detección correcta.

Si todas las hipótesis de la cadena de elementos del **elemento de grupo** tienen un valor de calidad de 1, no se analizarán las demás hipótesis de estos elementos.

<Note>
  Esto se hace para optimizar el FlexiLayout, acelerar el procedimiento de emparejamiento y evitar la "ramificación" no deseada del árbol de hipótesis. Sin embargo, una hipótesis que es óptima para FlexiLayout Studio no necesariamente corresponde al objeto buscado en la imagen.

  Esto puede ocurrir si las restricciones de búsqueda del elemento no son lo bastante estrictas. Cuando se produce una situación así, analice primero los parámetros establecidos para la búsqueda del elemento.
</Note>

<div id="the-gofsp-sample-project">
  ## El proyecto de ejemplo `GO.fsp`
</div>

Considere el proyecto `GO.fsp` (carpeta `%public%\ABBYY\FlexiCapture\12.0\Samples\FLS\Tips and Tricks\GO\1`), cuyo objetivo es encontrar el campo "Número de factura".

El proyecto tiene dos páginas:

* **Página 1** – La calidad de la imagen es buena.
* **Página 2** – El nombre del campo buscado presenta ruido.

El proyecto contiene el grupo **InvoiceGroup**, que contiene el elemento utilizado para buscar el nombre del campo: un elemento de **texto estático** llamado **InvoiceHeader** con el valor "INVOICE".

Para buscar el propio campo "Número de factura", el proyecto utiliza un elemento de **cadena de caracteres** llamado **InvoiceNumber**. Las restricciones de búsqueda del campo con respecto al nombre se especifican en la sección **Relations** del elemento **InvoiceNumber**.

<Note>
  No importan las mayúsculas y minúsculas del nombre en la sección **Texto a buscar**.
</Note>

<div id="why-hypothesis-generation-stops-at-a-quality-1-chain">
  ## Por qué la generación de hipótesis se detiene en una cadena de calidad 1
</div>

Tenga en cuenta que la cadena "Invoice" especificada como valor para el elemento **InvoiceHeader** aparece en las imágenes tres veces: como nombre del campo **Número de factura**, como subcadena en el nombre **Fecha de la factura** y, en la parte inferior de la factura, como subcadena en las condiciones de pago "La **factura** actual es…".

Por lo tanto, puede anticipar que habrá tres hipótesis después del procedimiento de emparejamiento.

Después de ejecutar el procedimiento de emparejamiento de FlexiLayout seleccionando el comando **Match**, puede ver que el árbol de hipótesis en el elemento **grupo** **InvoiceGroup** tiene solo una cadena completa en lugar de las tres esperadas, y que esa única cadena no corresponde al nombre detectado.

<Frame>
  <img src="https://mintcdn.com/abbyy/lqYknuOmCa79141v/images/flexi-capture/fls/group_optimization.png?fit=max&auto=format&n=lqYknuOmCa79141v&q=85&s=fe7179e295b9d50a821074fc6465eccf" alt="Captura de pantalla del árbol de hipótesis en ABBYY FlexiLayout Studio para el proyecto GO.fsp, que muestra InvoiceGroup con solo una cadena completa de calidad 1 que no corresponde al nombre detectado." width="557" height="478" data-path="images/flexi-capture/fls/group_optimization.png" />
</Frame>

Si observa las propiedades de cada uno de los elementos de la cadena generada, verá que la **Chain quality** de cada hipótesis es 1, lo que activó la optimización: cuando FlexiLayout Studio detecta una cadena ideal en términos de calidad (es decir, una cadena con calidad 1), deja de generar hipótesis.

<Note>
  Para ver el árbol de hipótesis del grupo, haga doble clic en el nombre del elemento **grupo** en el árbol de hipótesis, pulse **Enter** o seleccione **Mostrar detalles** en el menú contextual.
</Note>

El algoritmo de FlexiLayout Studio determina qué objeto de la imagen tiene prioridad sobre los demás durante la generación de hipótesis.

Dado que los resultados del emparejamiento de FlexiLayout no son satisfactorios, es necesario analizar las causas del problema para decidir cómo resolverlo.

En primer lugar, el área de búsqueda del elemento **InvoiceHeader** no está limitada. En segundo lugar, la descripción del elemento **InvoiceNumber** especifica que la cadena de dígitos puede tener cualquier longitud (porque no se conoce la longitud posible del número de factura). También especifica que la cadena debe buscarse a la derecha del nombre, aproximadamente en el mismo nivel horizontal.

Como puede ver, las tres instancias de la palabra "Invoice" cumplen estas condiciones. Por eso, la detección incorrecta del nombre provocó automáticamente la detección incorrecta del campo **Número de factura**. Debe añadir algunas restricciones para que, al final, la hipótesis correcta sea la mejor y el FlexiLayout sea óptimo no solo en términos de velocidad de emparejamiento.

<div id="anchor-the-name-to-the-right-page-edge-with-nearest">
  ## Ancle el nombre al borde derecho de la página con Nearest
</div>

Si se supone que la disposición de los campos es idéntica en todas las páginas del proyecto, la forma más sencilla es "decirle" a FlexiLayout Studio que la cadena requerida "Invoice" es el elemento más próximo al borde derecho de la página. Para ello, escriba el siguiente código en la sección **Relación avanzada de prebúsqueda** del elemento **InvoiceHeader**: `Nearest: PageRight;`.

Esto funciona porque el nombre del campo buscado "Número de factura" es el *único* elemento más próximo al borde derecho de la página. Si no fuera así, o si el documento no tuviera un formato estandarizado, la función `Nearest` no podría resolver el problema.

<div id="penalize-distant-number-hypotheses-with-fuzzyquality">
  ## Penalización de hipótesis numéricas distantes con FuzzyQuality
</div>

En el proyecto **GO.fsp** (carpeta **GO\2**) se muestran formas alternativas de realizar esta tarea, incluido el caso de un documento semiestructurado.

Como puede ver en las imágenes, la distancia entre la cadena de dígitos y la palabra "invoice" es la menor en el campo buscado "Número de factura".

Esto se cumple en todas las páginas, lo que nos permite influir en los valores de calidad de las hipótesis generadas introduciendo el siguiente código en la sección **Relaciones avanzadas de posbúsqueda** del elemento **InvoiceNumber**:

```text theme={null}
if (not InvoiceHeader.IsNull) and (not IsNull) then
{ FuzzyQuality: Rect.Left - InvoiceHeader.Rect.Right, {0, 0, 0, 10000}*dt; }
```

Esto significa que, si se detectan ambos elementos, se calcula la distancia entre ellos para la hipótesis del elemento **InvoiceNumber**, y FlexiLayout Studio comprueba si pertenece al intervalo `{0, 0, 0, 10000}*dt`.

Esta descripción del intervalo muestra la dependencia lineal entre la calidad de la hipótesis y la distancia entre los elementos: cuanto mayor sea la distancia, mayor será la penalización (la función `FuzzyQuality` devuelve la calidad de posbúsqueda de la hipótesis, que puede verse en la ventana **Propiedades** de la hipótesis).

El valor del límite derecho del intervalo (10000dt) se determinó experimentalmente. Al elegir este valor, debe tener en cuenta la distancia entre los objetos correspondientes en las imágenes de prueba.

Como muestra la figura siguiente, con las propiedades del intervalo especificadas, la penalización máxima (1) corresponderá a una distancia de 10000dt. En consecuencia, una distancia de 1000dt dará una penalización de 0,1; una distancia de 100dt, una penalización de 0,01; etc.

Así, para distancias reales de aproximadamente 100-300 puntos, que pueden verse en las imágenes, el coeficiente de penalización será de 0,99 a 0,97.

<Frame>
  <img src="https://mintcdn.com/abbyy/lqYknuOmCa79141v/images/flexi-capture/fls/graf3.gif?s=370e5748794e51a9f8d90579f07265b1" alt="Diagrama de la curva de penalización de FuzzyQuality, que muestra la penalización máxima de 1 a una distancia de 10000dt, una penalización de 0,1 a 1000dt y 0,01 a 100dt." width="584" height="532" data-path="images/flexi-capture/fls/graf3.gif" />
</Frame>

<Note>
  Consulte [Búsqueda de elementos con Nearest y FuzzyQuality](/es/flexi-capture/fls/tips-tricks/date9) para obtener más información sobre el uso de estas funciones.
</Note>

Para las imágenes de este lote, la hipótesis correspondiente al campo no deseado "Número de factura" con el valor "2005" recibió la penalización máxima, mientras que la hipótesis correspondiente al campo buscado recibió la penalización mínima.

Dado que la penalización hizo que la **calidad de posbúsqueda** de todas las hipótesis fuera distinta de 1, ahora se analizarán todas las hipótesis de ambos elementos del elemento **grupo** **InvoiceGroup**.

Tenga en cuenta que el campo "Número de factura" se detectó correctamente incluso en la página 2, donde el nombre "Invoice" tiene mucho ruido, lo que provocó un error de reconocimiento y, en consecuencia, penalizaciones adicionales para la hipótesis.

<Frame>
  <img src="https://mintcdn.com/abbyy/lqYknuOmCa79141v/images/flexi-capture/fls/group_optimization2.png?fit=max&auto=format&n=lqYknuOmCa79141v&q=85&s=0efb914c691858b1c7791edeb4a7a4ae" alt="Captura de pantalla de los resultados de emparejamiento de FlexiLayout en ABBYY FlexiLayout Studio después de agregar la penalización FuzzyQuality, que muestra el campo Número de factura detectado correctamente incluso en la ruidosa Página 2." width="557" height="478" data-path="images/flexi-capture/fls/group_optimization2.png" />
</Frame>
