Blog de développement

Reconnaissance automatique du Numéro de Commande

Dernière Modification le :
2024-01-13

Reconnaissance et Lecture Automatique des Documents

Maintenant que nous avons mis la boite mail sous écoute, nous devons apprendre à les reconnaitre et à flécher le mail vers le bon gestionnaire. On repère un Candidat 'mail de commande' avec des mots clés, dans le titre ou mail de commande. La démarche est bien décrite sur nanonets Lire →.

Nous maitrisons maintenant l'OCR... Avant de trouver le Numero de commande, nous devons éliminer des données les informations superflues ou non pertinentes, telles que les banalités ou informations connues (ex. SIRET, téléphones), la ponctuation et d'autres caractères non textuels.
De sorte à retirer le maximum de ce qui est connu, on place la recherche du numero de commande en dernier... A noter qu'il n'y a pas moyen de valider un numero de commande... Ici, une démarche par IA peut devenir necessaire...
Dans un premier temps, celui de la mise au point, les candidats sont pré-traités puis validés 'à la main' pour partir ensuite dans le module de saisie.

La lecture de contenu peut se faire selon deux méthodes : l’extraction sémantique qui travaille sans modélisation sur le contenu textuel de la facture selon des règles, qui peut être complétée par l’extraction semi-zonée qui utilise un processus d’apprentissage ou de modélisation des factures pour les fournisseurs récurrents.

Ce mail est-il une commande ?

Veuillez trouver ci joint notre commande CF20230987 (avec le PDF en PJ) : ceci est un mail de commande! Où en est notre commande CF20230987 ? (avec ou sans le dite commande en PJ) : n'est pas un mail de commande.

Il faut aussi savoir identifier la commande sans bon de commande: le bon pour accord, qu'il ne faut pas confondre avec d'autres échanges, inévitables, concernant un devis.

Nous validons votre offre G1234 : est un mail de commande
Veuillez actualiser votre offre en PJ: ce n'est pas un mail de commande!

La clientèle a un comportement assez constant, bien que non-obligatoire: le mail de commande a TOUJOURS une pièce jointe. Toujours... C'est comme ça... Un Candidat "Mail de Commande" sans pièce jointe ? Vous pouvez l'éliminer sans risque.

Un bon pour accord est TOUJOURS accompagné d'un SCAN.

On peut améliorer la spécificité de la détermination en imposant une boite mail de réception... Mais bon... Pas sûr que cela soit bien suivi.

Le Challenge du Numéro de Commande

Le plus simple à trouver dans un bon de commande ? Le Numéro de TVA: il a un entête, deux systèmes de checksum (celui de la TVA et celui du SIREN qui est dedans), deux! Sa taille est fixe... Et en plus, vous avez une base de données publique pour le vérifier (SIRENE). On ne peux pas se rater!

Le plus difficile ? Le numéro de commande: pas de norme, pas de taille fixe, pas d'entête, pas de checksum, pas de base de données... Ce qui le distingue, c'est sa proximité (horizontale ou verticale) avec des mots clés (ex: commande, purchase order): il faut connaître la position relative! Or, c'est possible!

	

	

Expression Régulière, Zonage, Challenge

Le tableau reprend ce qu'il nous faut reconnaître, avec en orange ce qui est optionnel. SIRET (14 chiffres) et SIREN (9 chiffres) peuvent être déterminés à parir du Numero de TVA, qui est primordial et obligatoire.

Donnée RegExp CheckSum Zonage Base Données
No TVA   
SIRET   
SIREN
No Commande
Code Service
Total HT
N° devis

Le Numero de Commande, que votre client souhaite obligatoirement que vous le reprenniez, ne suit formellement aucune règle de nommage. Il faudra s'aider de la position, relative à des mots clés, d'où l'importance de conserver une certaine disposition lors de l'extraction de Texte/OCR.

Expressions régulières et règles informelles

SAP (IBM) suit un schéma: 2 lettres d'entête (ex. PO) suivi de chiffres pour un total de 10; leur logiciel complète (par des zéro ? ) pour arriver à 10 caractères. Dès que le nombre de zéro excède 3, la lecture devient difficile pour un humain, voire pour un OCR! Lire →.
Ce Schéma à entête et chiffres est suivi par environ 10% des Bons de Commandes que je reçois. Je mets une liste de 2500 numéros dans le ZIP de ressources. ZIP →.

En pratique, les numéros de commandes suivent quelques règles:

  1. Les lettres sont TOUJOURS en majuscule
  2. Il comporte TOUJOURS une séquence de 4 chiffres (au moins)
  3. Les caractères non-alphanumériques sont : - et / . Plutôt rarement, le point . et _
  4. L'espace blanc délimite le début et la fin. Il est parfois intercallé entre le prefixe et le reste du numero.
  5. Il est parfois suivi d'un suffixe

Dans 95 % des cas, Il se trouve sur la même ligne que le mot clé. Dans les autres cas, il est juste en dessous, mais l'extracteur/OCR peut le positionner 2 à 5 lignes plus bas.

Espace blanc ou pas ?

Dans la présentation du numéro de TVA, il est courant de mettre un blanc entre l'entête et le numéro. Même le VIES le fait dans son rendu de résultat, même s'il ne l'accepte pas dans son expression régulière d'entrée (input)! Le blanc entre l'entête et le corps du numéro n'est pas bien difficile à gérer. Le risque d'attraper des numéros autres que celui de la commande (TVA, Siret, Code postal...) ne devient-il pas plus élévé si on autorise le blanc dans le numéro et/ou dans les 4 (ou 3 chiffres consécutifs).

Un blanc peut aussi être introduit de façon fortuite par l'OCR. Ce risque est-il moindre lorsqu'on peut utiliser l'extraction de texte ?

Une Expression regulière de pêche devrait être permissive à ces erreurs, mais le risque d'attraper des segments superflux est à surveiller de près.

Lors de l'enregistrement du numéro de commande on conservera le blanc intentionnel eventuel, entre le prefixe et le corps. Mais Quid des autres ?

Jeu d'entrainement

Notre jeu d'entrainement est consitué de 2500 commandes, sous format PDF avec, en regard, les numéros de commandes saisis par un humain. On transforme chaque PDF en texte, avec une combinaison Extraction et/ou OCR. Notre combinaison initiale est pdftoHTML, avec en alternative pour les PDF scannés, Tesseract.

Plusieurs Expressions régulières

Environ 15 % des numéros de commandes sont sous un schéma proche de celui proposé par IBM/SAP ou par VosFactures.fr Lire →. , c'est à dire avec une entête. On aurait tort de s'en priver!

Les entêtes que je vois sont: "CF" , "BC" , "BDC" , "4000" , "PO" , "ZINV" , "CDA" , "CO" , "CDE" , "4500" , "CA" , "EJ", "P.O." , "PO", ...

On vérifie sur un tableau de la nomenclature des numéros de TVA des pays de l’union européenne: la liste est: DE, ATU, BE, BG, CY, HR, DK, ES, EE, FI, FR, EL, HU, IE, IT, LV, LT, LU, MT, NL, PL, PT, CZ, SK, GB, RO, SI, SE.

https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3541865/

Upper-case letter T and upper-case letter I Numeral 5 and numeral 3 Upper-case letter D and upper-case letter O Numeral 7 and numeral 1 Upper-case letter E and upper-case letter F Upper-case letter Z and numeral 2 Upper-case letter O and numeral 0 Upper-case letter B and numeral 8 Upper-case letter D and numeral 0 Upper-case letter S and numeral 5 Upper-case letter S and numeral 8 Upper-case letter Z and numeral 7 Upper-case letter T and numeral 7 Numeral 5 and numeral 8 The letters l (el) and 1, O and 0, Z and 2, and 1 and 7 accounted for more than 50% of the errors. Eviter L et I.

A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z.

Le suffixe et préconditionnement

Il facilite la comprehension, par le client de l'origine du bon de commande: il reprend les initiales de l'emetteur, un numero d'avenant/version. Il est distinct du numero de commande et est le plus souvent précédé d'un blanc ou d'une ponctuation telle que / ou -

Voici des exemples de ce que l'on rencontre: PMn ou Pm ou PM. (on appelle ici P = Ponctuation, M = majuscule, m = minuscule). Le CNRS met parfois l'UMR et son numero en suffixe.

Il y a parfois sont equivalent à l'avant (faux-prefixe) , c'est à dire une Minuscule suivie ou non d'une ponctuation : mP

On procède donc à une préparation du texte en séparant tout suffixe (ou faux-prefixe) du reste avec un espace blanc, qui est notre delimitateur de bloc

L'Expression Régulière

L'expression regulière qui valide strictement un numéro de commande est:

(CF|BC|BDC|4000|PO|ZINV|CDA|CO|CDE|4500|CA|EJ|L |P.O.)?([-_ /\.]*)([0-9A-Z-_/\.]*)([0-9]{4})([0-9A-Z-_/\.]*)

Un premier bloc est constitué du prefixe. On notera le présence du L (seul ou avec un blanc) qui est une présentation du CNRS. Le deuxième bloc permet la ponctuation post-prefixe, dont le blanc. Ici on impose 4 chiffres consécutifs.

Une expression régulière de pêche pourra être plus large, en particuler en cas d'OCR, en permettant par exemple le blanc dans les blocs 3 et 5.

https://www.group-edt.fr/order-x-une-nouvelle-norme-de-commandes-electroniques-accessible-a-tous/

Checkmark icon by Icons8