El proyecto de ejemplo StructuredStrings.fsp
El proyecto de ejemploStructuredStrings.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 valorInvoiceN:.
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:
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.
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:
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.




