Pour détecter différents titres de documents, de tableaux, de champs ou tout autre texte présent sur la totalité ou la plupart des images d’un document, FlexiLayout Studio utilise un élément spécial, Static Text. Si des images différentes, qui doivent être traitées à l’aide du même FlexiLayout, comportent plusieurs variantes d’un seul et même nom (par exemple, le champ ‘Numéro de facture’ a pour variantes ‘Invoice’, ‘Invoice:’, ‘Invoice No.’, etc.), vous devez spécifier toutes les valeurs possibles du texte statique, même si elles ne diffèrent que par la ponctuation.
Cela est nécessaire pour les raisons suivantes :
- Pour générer une hypothèse correspondant à la valeur spécifiée. Par exemple, si nous ne spécifions pas la variante ‘Invoice:’ mais uniquement la variante ‘Invoice’, les deux-points ne seront pas inclus dans l’hypothèse correspondant au nom du champ. Ils pourront alors être inclus dans la zone de recherche du numéro de facture, que le programme recherchera à droite du nom. Si la recherche du numéro autorise des caractères non numériques ou non spécifiés, les deux-points risquent alors de se retrouver dans l’hypothèse de l’élément qui décrit le numéro de facture.
- Pour éviter qu’une hypothèse soit pénalisée à cause de caractères non spécifiés dans la fenêtre Search text. Par exemple, si la valeur ‘Invoice:’ est spécifiée dans la section Search text et que le nom ‘Invoice#’ apparaît également sur les images traitées, une hypothèse sera tout de même générée, à condition que certaines erreurs soient autorisées pour l’élément, mais sa qualité sera pénalisée (dans cet exemple, le FlexiLayout autorise au moins 1 erreur).
- Si plusieurs hypothèses variantes sont disponibles, par exemple ‘Invoice|Invoice:’, le programme attribuera à l’hypothèse la plus longue une qualité légèrement supérieure, de sorte que l’hypothèse ‘Invoice:’ sera privilégiée. Si une variante avec ’:’ est spécifiée, alors celle sans ’:’ sera pénalisée de 0.001, car la chaîne ‘Invoice’ est une sous-chaîne de ‘Invoice:’. En pénalisant la chaîne de nom la plus courte, qui est une sous-chaîne de l’autre, on fait de l’hypothèse la plus longue l’hypothèse gagnante.
Utilisons le projet exemple StaticText.fsp (dossier %public%\ABBYY\FlexiCapture\12.0\Samples\FLS\Tips and Tricks\Variants of StaticText) pour voir comment la définition des valeurs d’un élément Static Text permet de détecter le nom du champ ‘Numéro de facture’ ainsi que le champ lui-même.
Le projet comporte 5 pages :
- Page 1 - le champ “Numéro de facture” porte le nom “INVOICE” ;
- Page 2 – le champ “Numéro de facture” porte le nom “Invoice:” ;
- Page 3 – le champ “Numéro de facture” porte le nom “Invoice #:” ;
- Page 4 – le champ “Numéro de facture” porte le nom “Invoice -” ;
- Page 5 – le champ “Numéro de facture” porte le nom “Invoice:”, mais la page comporte aussi un champ “Date de la facture”, dans lequel le mot “Invoice” est présent.
Dans la boîte de dialogue Propriétés de l’élément Static Text nommé InvoiceHeader, nous avons spécifié tous les noms possibles du champ susceptibles d’apparaître sur les documents traités. Dans ce cas, il s’agit des valeurs mentionnées ci-dessus. La casse n’a pas d’importance pour la recherche : Invoice|Invoice:|Invoice#:|Invoice-.
Pour accélérer la recherche de l’élément, toutes les variantes sont écrites sans espaces. La présence ou l’absence d’espaces n’influence pas la qualité d’une hypothèse.
Pour simplifier, supposons que le numéro de facture se trouve toujours à droite du nom. Pour rechercher le numéro de facture, un élément Character String nommé InvoiceNumber a été créé. Son alphabet et ses contraintes de recherche sont spécifiés dans le champ Relations. Ces paramètres sont très simples et ne sont pas décrits ici. Vous pouvez les consulter directement dans le projet.
Un bloc de texte Invoice a été créé dans l’arborescence FlexiLayout. L’élément InvoiceNumber a été spécifié comme élément source du bloc.
Comme vous pouvez le constater après avoir exécuté la procédure d’analyse, le nom du champ et le numéro de facture peuvent être détectés correctement sur toutes les pages.
Essayez maintenant de supprimer temporairement toutes les valeurs de texte statique, sauf la première (Invoice), de l’élément InvoiceHeader, puis réessayez d’effectuer la mise en correspondance du FlexiLayout avec toutes les pages. Vous verrez que le nom et le numéro de facture n’ont été détectés avec succès que sur la page 1, car le nom qui s’y trouve correspond entièrement à la valeur spécifiée (Invoice). Sur les pages 2 à 4, une partie du nom s’est retrouvée dans le numéro de facture. Sur la page 5, une erreur s’est produite lors de la localisation du champ du numéro.
Rétablissons maintenant les valeurs supprimées. Examinez les résultats de l’analyse à la page 5, où le mot Invoice apparaît deux fois. Comme on peut le voir, le programme a généré 5 hypothèses pour l’élément InvoiceHeader. La qualité la plus élevée (Chain quality = 1, qui, dans ce cas, est égale à la Pre-search quality) est attribuée à l’hypothèse correspondant au nom « Invoice: ». Des hypothèses ont également été générées pour les valeurs « Invoice » et « Invoice d », car ces chaînes dérivent des valeurs spécifiées pour l’élément InvoiceHeader, pour lesquelles un certain pourcentage d’erreurs est autorisé. Ces hypothèses ont été pénalisées (cf. les arguments ci-dessus en faveur de l’énumération de toutes les valeurs possibles de Static Text) ; leur qualité finale est donc inférieure.
