Cuando el elemento fecha no puede detectar una fecha
FlexiLayout Studio ofrece un elemento especial fecha que se utiliza para detectar fechas. Sin embargo, al crear un FlexiLayout, puede que este elemento no sea suficiente. Esto puede ocurrir cuando la fecha de los documentos no coincide con ninguno de los formatos disponibles en el elemento fecha. Por ejemplo, FlexiLayout Studio permite usar los siguientes idiomas para especificar el mes en el campo de fecha: English, Czech, Danish, Dutch, Estonian, Finnish, French, German, Greek, Hungarian, Italian, Latvian, Lithuanian, Norwegian, Polish, Portuguese, Russian, Spanish, Swedish, Turkish. Si el mes está escrito con palabras en un idioma distinto de los enumerados, la fecha no coincide con ninguno de los formatos disponibles, por lo que no puede detectarse mediante un elemento fecha. También pueden producirse errores en la búsqueda de fechas si la imagen contiene elementos que no pueden eliminarse. Por ejemplo, la fecha puede estar subrayada y no haber un espacio visible entre la fecha y el subrayado, puede estar tachada o escrita en celdas de caracteres con separadores negros (marcos, peines). Las motas en el área de búsqueda o el hecho de que la fecha no esté mecanografiada, sino escrita a mano, también pueden hacer que el elemento fecha no pueda utilizarse para buscar fechas.El proyecto de ejemplo SearchOfDate.fsp
La mejor manera de organizar la búsqueda de un campo de fecha se describe en el proyecto de ejemploSearchOfDate.fsp (carpeta %public%\ABBYY\FlexiCapture\12.0\Samples\FLS\Tips and Tricks\Date).
El proyecto contiene cinco páginas:
El objetivo es encontrar la fecha en todas las imágenes, incluidas aquellas en las que el formato de fecha no es compatible con el elemento fecha.
Buscar formatos de fecha compatibles con el elemento fecha
Todos los elementos que describen el campo de fecha se agrupan en un elemento DateGroup. En primer lugar, este grupo contiene un elemento que busca el nombre del campo de fecha. En el proyecto de ejemplo, se trata de un elemento de tipo texto estático llamado DateHeader con el único valor Date:.Configurar las restricciones de búsqueda para todos los elementos en la sección Relations no es difícil y, por lo tanto, no se describe aquí. Puede consultarlo directamente en el proyecto.
Buscar otros formatos de fecha con un elemento de cadena de caracteres
Para buscar fechas en las demás páginas, el proyecto utiliza un elemento de cadena de caracteres llamado DateAsString. Este elemento usa un alfabeto para representar todos los caracteres que probablemente aparezcan en las imágenes.Si el contenido de un campo de datos puede estructurarse y tiene un formato que el elemento fecha no admite, es aconsejable describir ese formato con una expresión regular en lugar de especificar un alfabeto.No obstante, debe asegurarse de que las imágenes procesadas sean de alta calidad, ya que una expresión regular presupone una coincidencia del 100 % entre el campo y la estructura descrita (los alfabetos, en cambio, permiten un cierto porcentaje de errores, que se especifica en las propiedades del elemento). Por lo tanto, los alfabetos son una herramienta más flexible en los casos en que no se puede garantizar la exactitud del reconocimiento.Si sabe que el mes de la fecha se escribirá como una palabra en el mismo idioma que el idioma de prerreconocimiento, puede ser aconsejable dividir el campo de fecha en tres secciones (día, mes y año) y buscar el campo del mes por separado mediante un elemento de tipo texto estático.Dicho elemento de texto estático debe describir todas las variaciones posibles del mes (por ejemplo, los nombres completos y abreviados del mes en el idioma correspondiente). Los campos de día y año pueden encontrarse entonces a la derecha y a la izquierda del mes mediante elementos de cadena de caracteres.

Capturar fechas parcialmente reconocidas con un elemento de colección de objetos
Sin embargo, en la página 4, la cadena detectada contiene solo una parte del campo de fecha. Si consulta los resultados del prerreconocimiento del campo de fecha (haciendo clic en Show Raw Objects en la Toolbar), el motivo de la detección parcial queda claro. El área de búsqueda contiene no solo objetos de texto, sino también otros tipos de objetos: Imagen y signo de puntuación. Esta situación es típica en imágenes de baja calidad: los objetos de texto no siempre se reconocen durante el prerreconocimiento.
La condición
if (DateAsString.IsNull == FALSE) then Dontfind() no puede añadirse a las Propiedades avanzadas del elemento DateAsObjectCollection porque, como muestra el ejemplo, la cadena detectada puede contener solo una parte de la fecha.Definir la región del bloque fecha a partir de AlternativeDateGroup
En este punto, el conjunto de elementos que describen las restricciones de búsqueda de los campos de fecha está completo. El elemento de grupoSearchElements.DateGroup.AlternativeDateGroup, que consta de los elementos DateField, DateAsString y DateAsObjectCollection, se especifica en el árbol del proyecto como Source element para el bloque fecha.
Como se utilizó el método Dontfind() para describir las propiedades de los elementos DateAsString y DateAsObjectCollection, la región real del bloque detectado coincidirá bien con la región encontrada por la hipótesis para el elemento fecha, bien con la combinación de las regiones de los elementos DateAsObjectCollection y DateAsString.
En este último caso, se espera que la región del elemento DateAsString forme parte de la región del elemento DateAsObjectCollection, por lo que la región resultante será la del elemento DateAsObjectCollection.
En este caso, puede especificar el elemento de grupo
SearchElements.DateGroup.AlternativeDateGroup como Source element porque la situación es relativamente simple. La región del grupo es una combinación de las regiones de sus subelementos detectados.El método Dontfind() permite omitir la búsqueda de algunos subelementos. Por lo tanto, la región del elemento de grupo SearchElements.DateGroup.AlternativeDateGroup coincidirá con la región del subelemento. En el ejemplo dado, el método Dontfind() no solo ayuda a optimizar el emparejamiento de FlexiLayout, sino que también simplifica la descripción de los bloques.
Usar un elemento de cadena de caracteres para buscar un campo de fecha, sin definir el formato de la cadena ni usar un elemento de colección de objetos, como en el ejemplo proporcionado, puede dar buenos resultados si el área de búsqueda del campo de fecha puede definirse claramente.Sin embargo, si hay varias cadenas de caracteres en el área de búsqueda, el formato de la cadena debe describirse mediante una expresión regular o un alfabeto más restringido. De lo contrario, la hipótesis final puede no ser satisfactoria.Con un elemento de cadena de caracteres, puede limitar el número de caracteres de una cadena, el número de finales de palabra y la longitud de los espacios para descartar hipótesis incorrectas. Si se usa un elemento de colección de objetos, la hipótesis incluirá todos los objetos de la imagen que se encuentren dentro del área de búsqueda y cumplan las restricciones sobre el tamaño del objeto.
