Skip to main content
Al crear un FlexiLayout, no siempre es posible definir las áreas de búsqueda únicamente en función de la posición relativa, como encima de, debajo, a la izquierda de o a la derecha de otro objeto. Esto es especialmente cierto cuando el área de búsqueda contiene objetos no deseados, por ejemplo, objetos que pueden haberse introducido durante el escaneo. Estos objetos no deben incluirse en el bloque de reconocimiento, por lo que deben excluirse al crear el elemento correspondiente. El campo de dirección en las figuras siguientes es un buen ejemplo. Observe las posiciones relativas de los nombres de campo Address: y (Address) (que deben excluirse del reconocimiento) y la propia dirección (que debe reconocerse).

Cómo la función Exclude elimina regiones de un área de búsqueda

La función Exclude excluye una región del área de búsqueda de un elemento. La región que se va a excluir se especifica al llamar a la función. La región excluida puede ser cualquiera de las siguientes:
  • La región de una hipótesis (detectada o no)
  • Un rectángulo o un array de rectángulos de los elementos encontrados
  • Una región creada a partir de las regiones de objetos que forman parte de una hipótesis encontrada (consulte el método ExcludeSet)
Diagrama de dos campos de dirección de ejemplo que muestran los nombres de campo Company, Address y (Address) junto al texto de la dirección que se debe reconocer.

El proyecto de ejemplo Exclude.fsp

El proyecto Exclude.fsp (carpeta %public%\ABBYY\FlexiCapture\12.0\Samples\FLS\Tips and Tricks\Exclude) muestra cómo funciona la función Exclude. El proyecto tiene cuatro páginas:
  • Página 1 – el campo de dirección está escrito en varias líneas. El nombre Address: está en la primera línea, por lo que no podemos decir que el campo de datos buscado esté a la derecha o debajo del nombre del campo. Sin embargo, el nombre debe excluirse del reconocimiento.
  • Página 2 – el campo de dirección no tiene nombre.
  • Páginas 3 y 4 – la línea (Address) se encuentra dentro del campo de datos. Sin embargo, debe excluirse del reconocimiento.
En todas las páginas, el campo de dirección está debajo del campo con el nombre de la empresa.

Cree elementos para los nombres de los campos y el campo de dirección

Primero, cree un elemento de texto estático, asígnele el nombre CompanyHeader y especifique su valor. Este elemento se utiliza para detectar el nombre del campo. A continuación, cree un elemento de texto estático y asígnele el nombre AddressHeader. Este elemento se utiliza para detectar el nombre del campo. Especifique los siguientes valores de texto estático: Address:|(Address); es decir, enumere todas las variantes de esta línea que deban detectarse y luego excluirse del reconocimiento en el campo de dirección. Describa las restricciones de búsqueda de estas líneas en el campo Relations y especifique que deben buscarse debajo (Below) del elemento CompanyHeader.
El elemento del nombre debe crearse antes que el elemento del campo de dirección, porque la función Exclude solo permite hacer referencia a elementos que estén más arriba en el árbol de FlexiLayout que el elemento actual.
Inicie el procedimiento de emparejamiento de FlexiLayout (Match FlexiLayout) para asegurarse de que el nombre del campo de dirección se encuentre en todas las páginas en las que aparece. Como el campo de dirección de este ejemplo tiene varias líneas, cree un elemento de párrafo para buscarlo. Asígnele el nombre Address y, como en el ejemplo anterior, especifique que debe buscarse debajo (Below) del elemento CompanyHeader. Una vez que haya ejecutado el procedimiento de emparejamiento de FlexiLayout, verá que en las páginas 1, 3 y 4 la línea con el nombre también se ha incluido en el campo de dirección.
Captura de pantalla de los resultados del emparejamiento de FlexiLayout en ABBYY FlexiLayout Studio para el proyecto Exclude.fsp, que muestra el nombre del campo de dirección incluido incorrectamente en el campo Address detectado en las páginas 1, 3 y 4.

Excluir el nombre del campo del área de búsqueda de Address

Ahora vuelva al cuadro de diálogo de Propiedades del elemento Address y haga clic en la pestaña Restricciones de búsqueda. Haga clic en Add… junto a la sección Exclude regions of elements y elija el elemento AddressHeader de la lista. Después de guardar las propiedades del elemento, ejecute de nuevo el procedimiento de emparejamiento de FlexiLayout. Verá que la región del bloque correspondiente al campo de dirección adquiere una forma no rectangular, porque se ha recortado de ella la región del nombre.
Captura de pantalla de los resultados del emparejamiento de FlexiLayout en ABBYY FlexiLayout Studio después de excluir la región AddressHeader, que muestra el bloque de dirección con una forma no rectangular porque se ha recortado de ella el nombre del campo.
La sección Exclude regions of elements le permite excluir del área de búsqueda del elemento actual la región de una hipótesis encontrada para otro elemento. Para excluir un área geométricamente más compleja, o para detectar primero una región y luego excluirla del proceso de reconocimiento, use las funciones Exclude, ExcludeRect, y ExcludeSet en el campo relación avanzada de prebúsqueda.
La región de un bloque, por definición, consta de rectángulos colocados uno sobre otro, de modo que cualquier línea horizontal puede cruzar la región solo una vez; es decir, no puede haber “dientes” verticales que sobresalgan.Por lo tanto, si la línea que se debe excluir y la información requerida están situadas al mismo nivel o aproximadamente al mismo nivel, el nombre no puede excluirse en la etapa de creación de FlexiLayout. En ese caso, el nombre puede excluirse después del reconocimiento en FlexiCapture mediante la regla Sustituir de la lista.