Skip to main content
Para detectar campos de una sola línea, FlexiLayout Studio dispone de un elemento especial de cadena de caracteres. Si el campo tiene un formato conocido, puede describirse en las propiedades del elemento correspondiente, en la pestaña cadena de caracteres, en el campo Regular expression. Sin embargo, el uso de una expresión regular exige documentos impresos y buena calidad de imagen, porque una expresión regular no admite errores en el campo; de lo contrario, el elemento simplemente no se detectará. Tampoco deben utilizarse expresiones regulares si el documento está rellenado a mano, incluso si su diseño puede describirse. No obstante, ese campo sí puede detectarse.

El proyecto de ejemplo StructuredStrings.fsp

El proyecto de ejemplo StructuredStrings.fsp muestra cómo buscar un campo Número de factura de una sola línea con un formato similar en todas las páginas (carpeta %public%\ABBYY\FlexiCapture\12.0\Samples\FLS\Tips and Tricks\Structured strings). El proyecto tiene cuatro páginas:
  • Páginas 1 y 2 – El campo Número de factura está impreso con buena calidad.
  • Página 3 – El campo Número de factura está impreso, pero la imagen tiene ruido.
  • Página 4 – La calidad de imagen es buena, pero el campo Número de factura está rellenado a mano.

Describir el número de factura con una expresión regular

La búsqueda del campo Número de factura se basa en el nombre del campo. Primero, se necesita un elemento que describa las restricciones de búsqueda del nombre del campo. En el proyecto, es un elemento de texto estático llamado InvoiceNumberHeader con el valor InvoiceN:. El campo Número de factura es un campo de una sola línea. Para detectarlo, el proyecto utiliza un elemento de cadena de caracteres llamado NumAsRegularExpression. Como puede verse en las páginas del proyecto, el formato del campo Número de factura puede describirse con la siguiente expresión regular:
o bien (que es lo mismo)
Esto significa que el número es una secuencia de “cuatro dígitos - dos dígitos - una letra latina mayúscula/dos dígitos”. Como puede verse en el proyecto, después de ejecutar el procedimiento de emparejamiento de FlexiLayout seleccionando el comando Match, se generaron hipótesis nulas para el elemento NumAsRegularExpression en las páginas 3 y 4; es decir, el elemento no se detectó. En la página 3, el ruido provocó que el campo no coincidiera con la expresión regular. Si abre la página 3 y hace clic en L (Show Recognized Lines) en la Toolbar, el prerreconocimiento del número de factura en la página tiene el aspecto de 10&0-20-A/04. En la página 4, el número de factura está rellenado a mano. El resultado del prerreconocimiento (Z.OOO-41-C/03) tampoco coincide con el formato descrito.

Agregue un elemento de cadena de caracteres de respaldo con un alfabeto

La solución recomendada es la siguiente: cree otro elemento de cadena de caracteres y asígnele el nombre NumAsAlphabet. Especifique para él las mismas restricciones de búsqueda que para el elemento NumAsRegularExpression. Luego, agrupe ambos elementos en un elemento de grupo, InvoiceNumber. Sin embargo, describa el elemento NumAsAlphabet no como una expresión regular, sino como una lista de todos los caracteres válidos.
Captura de pantalla del cuadro de diálogo Edit Alphabet de ABBYY FlexiLayout Studio en la que se enumeran todos los caracteres válidos del elemento NumAsAlphabet.
El siguiente código debe escribirse en el campo relación avanzada de prebúsqueda:
Esto significa que la búsqueda de una cadena con un formato desconocido, descrita por el elemento NumAsAlphabet, solo se intentará si FlexiLayout Studio no consigue detectarla mediante el elemento NumAsRegularExpression, que describe una cadena de formato fijo.
Al especificar restricciones de búsqueda para el elemento NumAsAlphabet, puede usar arrastrar y soltar para copiar la configuración de la sección Relations del elemento NumAsRegularExpression en la misma sección del elemento actual. Como alternativa, puede escribirse el siguiente código en el campo de relación avanzada de prebúsqueda:
Este código significa que la búsqueda del elemento NumAsAlphabet solo se intentará si la estructura del número de factura no coincide con el formato especificado; es decir, si FlexiLayout Studio no consigue detectar el elemento NumAsRegularExpression. En ese caso, el elemento NumAsAlphabet se buscará en la misma área en la que no se encontró el elemento NumAsRegularExpression. Ahora ejecute de nuevo el procedimiento de emparejamiento de FlexiLayout en todas las páginas. Como muestra el proyecto, el campo Número de factura ahora se encuentra correctamente en cada una de las páginas. El árbol del proyecto contiene un bloque de texto denominado InvoiceNum. El grupo SearchElements.InvoiceNumber se especifica como su Source element. En esta fase, el FlexiLayout para detectar campos de Número de factura está completo.
Si, por alguna razón, el método descrito anteriormente no es suficiente para detectar el campo de datos (tanto si su formato es conocido como si no), se puede crear un elemento más (del tipo colección de objetos) en el grupo. En este proyecto, es un elemento de colección de objetos denominado NumAsObjectCollection.En realidad, no es necesario dada la buena calidad de las imágenes de este proyecto y solo se muestra como ejemplo (para él se especifica el comando Disable).Puede ser necesario un elemento adicional de colección de objetos cuando resulte difícil predecir los resultados del prerreconocimiento en distintas páginas, pero el área de búsqueda pueda describirse con precisión, evitando que información no deseada entre en las hipótesis.

Por qué la expresión regular mejora la fiabilidad

Puede surgir la siguiente pregunta: ¿por qué se necesita una expresión regular si a veces el campo puede detectarse sin ella? La respuesta es que el uso de una expresión regular hace que la búsqueda sea más fiable. Si se encuentra este elemento, puede estar seguro de que ha encontrado exactamente la línea que necesita. Después, esta información puede utilizarse con seguridad para detectar otros elementos y sus relaciones. Cuando las restricciones de búsqueda son poco estrictas, no puede estar totalmente seguro de haber encontrado exactamente lo que necesita. Esto puede ocurrir si la imagen tiene mucho ruido. En esos casos, el uso de un elemento de cadena de caracteres con un alfabeto especificado puede dar lugar a un porcentaje excesivo de errores (el parámetro Percentage of non-alphabet characters). Como resultado, el elemento no se detectará en absoluto o solo se detectará parcialmente. En la imagen siguiente se muestra un ejemplo de esta situación.
Captura de pantalla en ABBYY FlexiLayout Studio de una imagen con mucho ruido en la que un elemento de cadena de caracteres con un alfabeto especificado detecta el campo de número de factura solo parcialmente debido al porcentaje excesivo de caracteres no pertenecientes al alfabeto.