Saltar al contenido principal
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.
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.

El proyecto de ejemplo GO.fsp

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.
No importan las mayúsculas y minúsculas del nombre en la sección Texto a buscar.

Por qué la generación de hipótesis se detiene en una cadena de calidad 1

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.
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.
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.
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.
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.

Ancle el nombre al borde derecho de la página con Nearest

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.

Penalización de hipótesis numéricas distantes con FuzzyQuality

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:
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.
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.
Consulte Búsqueda de elementos con Nearest y FuzzyQuality para obtener más información sobre el uso de estas funciones.
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.
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.