L’exemple de projet StructuredStrings.fsp
L’exemple de projetStructuredStrings.fsp montre comment rechercher un champ Numéro de facture sur une seule ligne avec un format similaire sur toutes les pages (dossier %public%\ABBYY\FlexiCapture\12.0\Samples\FLS\Tips and Tricks\Structured strings).
Le projet comporte quatre pages :
- Pages 1 et 2 – Le champ Numéro de facture est imprimé avec une bonne qualité.
- Page 3 – Le champ Numéro de facture est imprimé, mais l’image est bruitée.
- Page 4 – La qualité de l’image est bonne, mais le champ Numéro de facture est rempli à la main.
Décrire le numéro de facture à l’aide d’une expression régulière
La recherche du champ Numéro de facture s’appuie sur le nom du champ. Il faut d’abord un élément décrivant les contraintes de recherche du nom du champ. Dans le projet, il s’agit d’un élément Static Text, nommé InvoiceNumberHeader, qui a pour valeurInvoiceN:.
Le champ Numéro de facture est un champ sur une seule ligne. Pour le détecter, le projet utilise un élément de type Character String, nommé NumAsRegularExpression. Comme on peut le voir sur les pages du projet, le format du champ Numéro de facture peut être décrit à l’aide de l’expression régulière suivante :
10&0-20-A/04.
À la page 4, le numéro de facture est rempli à la main. Le résultat de la pré-reconnaissance (Z.OOO-41-C/03) ne correspond pas non plus au format décrit.
Ajouter un élément Character String de secours avec un alphabet
La solution recommandée est la suivante : créez un élément Character String supplémentaire et nommez-le NumAsAlphabet. Appliquez-lui les mêmes contraintes de recherche qu’à l’élément NumAsRegularExpression. Regroupez ensuite les deux éléments dans un élément Group, InvoiceNumber. Cependant, décrivez l’élément NumAsAlphabet non pas comme une expression régulière, mais comme une liste de tous les caractères valides.
Lors de la définition des contraintes de recherche pour l’élément NumAsAlphabet, vous pouvez utiliser le glisser-déposer pour copier les paramètres de la section Relations de l’élément NumAsRegularExpression dans la même section de l’élément actuel. Vous pouvez également écrire le code suivant dans le champ relations avancées de pré-recherche :
SearchElements.InvoiceNumber est spécifié comme élément source. À ce stade, le FlexiLayout permettant de détecter les champs Numéro de facture est terminé.
Si, pour une raison quelconque, la méthode décrite plus haut ne suffit pas à détecter le champ de données (que son format soit connu ou inconnu), un élément supplémentaire (de type Object Collection) peut être créé dans le groupe. Dans ce projet, il s’agit d’un élément Object Collection nommé NumAsObjectCollection.Il n’est en réalité pas nécessaire, compte tenu de la bonne qualité des images de ce projet, et n’est présenté qu’à titre d’exemple (la commande Disable lui est appliquée).Un élément Object Collection supplémentaire peut être nécessaire lorsqu’il est difficile de prévoir les résultats de pré-reconnaissance sur différentes pages, mais que la zone de recherche peut être décrite avec précision, ce qui empêche des informations indésirables d’être prises en compte dans les hypothèses.
Pourquoi l’expression régulière améliore la fiabilité
La question suivante peut se poser : pourquoi une expression régulière est-elle nécessaire si le champ peut parfois être détecté sans elle ? La réponse est que l’utilisation d’une expression régulière rend la recherche plus fiable. Si cet élément est trouvé, vous pouvez alors être certain d’avoir trouvé exactement la ligne recherchée. Cette information peut ensuite être utilisée en toute sécurité pour détecter d’autres éléments et leurs relations. Lorsque les contraintes de recherche sont souples, vous ne pouvez pas être absolument certain d’avoir trouvé exactement ce dont vous avez besoin. Cela peut se produire si l’image est très bruitée. Dans ce cas, l’utilisation d’un élément de type Character String avec un alphabet spécifié peut entraîner un pourcentage d’erreurs excessif (le paramètre Percentage of non-alphabet characters). Par conséquent, l’élément ne sera soit pas détecté du tout, soit détecté seulement partiellement. La figure suivante montre un exemple d’une telle situation.




