Blog de développement

L'historique des commandes comme jeu de test

Dernière Modification le :
2024-01-13

On dispose d'un historique de commandes sur une profondeur d'une vingtaine d'année. Chaque commande a été enregistrée manuellement, eet conservée au format PDF

Petit nettoyage

Une base de données spécifique à la mise au point de l'identification automatique est crée: les colonnes Numeros de commandes et PDF de commande de l'historique sont transférées à cette nouvelle base de données.

Un petit nettoyage est nécéssaire: certains PDF sont manquants. D'autres fichiers, présents dans l'archive ont des extensions non-PDF. Ceux que l'on a pu transformer en PDF l'on été et l'enregistrement dans la base de données modifié en conséquence.


Ce nettoyage élimine environ 0,4 % des fichiers.

Les PDF corrompus

Le petit programme en ligne de commande pdfinfo.exe, disponible avec Xpdf pdftotext, cherche à les infos contenues dans le PDF et l'exit code (return value) nous renseigne sur le PDF: si la réponse est autre que zero (La valeur de succès), alors le PDF n'a pas pu être lu... On ne cherche même pas à corriger: on marque que le PDF n'est pas valide dans la base de données.

Le nombre de pages

J. Winograd nous montre, en vidéo, PDFinfo, en ligne de commande. Il récupère les informations d'un PDF, y compris le nombre de pages, et isole le nombre de pages. Il permet les fichiers batch, programmes et scripts. Lire →

Il utilise un tuyau (pipe), ce qui est original, amusant et rapide. La même méthode sera utilisée pour isoler des données comme la réponse de validité du VIES (TVA).

					    ' // A personaliser. Ici, on a défini par ailleurs un RecordSet par une connection à la base de données.
' // La valeur par défaut dans la base de données est 9999. Pour les Record ayant cette valeur, le nombre de page n'a pas encore été documenté.
Set oShell = CreateObject("WScript.Shell")
Set regExNumerical = New RegExp
regExNumerical.Global = true	
regExNumerical.ignoreCase = true	
regExNumerical.Pattern = "[^0-9]"
sFileName = "MonFichier.txt"  ' // A personaliser
sDossier = "C:\Users\MonPC\Documents\MonDossier\"  ' // A personaliser
sDossierLogiciels = "C:\MesLogiciels\"  ' // A personaliser
sDossierPages = "C:\Users\MonPC\Documents\MonDossier\Pages\"  ' // A personaliser, c'est là qu'on met les résultats
sFilePath = sDossier & sFileName
sFileName_Bat = "MonFichierBat.bat"
sFilePath_Bat = sDossier & sFileName
sPagesFilePath = sDossierPages & sFileName
if RsNumeros("Pages").value = 9999 AND objFSO.FileExists(sPagesFilePath) then objFSO.DeleteFile sFilePath ' // Si un résultat ancien existe, on l'efface
if NOT objFSO.FileExists(sPagesFilePath) then 
	objFSO.CreateTextFile sPagesFilePath	' // On crée le fichier à l'avance,car le batch ne le fera pas...	
	sCommand = """" & sDossierLogiciels & "pdfinfo.exe""  " & sArgConfig & " """ & sFilePath & """ | Find /i ""Pages:"" > """ & sPagesFilePath  & """ "
		' // il faut passer par une commande bat
		' // voir : https://help.highbond.com/helpdocs/analytics/125/scripting-guide/en-us/Content/lang_ref/commands/r_execute.htm
	Set objFile = objFSO.OpenTextFile(sFilePath_Bat, ForWriting, true)	' // 2 = true, le fichier sera crée à la demande
	objFile.Write sCommand
	objFile.Close
	Set objFile = nothing
	sCommand_Bat = """" & sFilePath_Bat & """ " 				
	oShell.Run sCommand_Bat, 0, True
End If
if objFSO.FileExists(sPagesFilePath) then 
	' // on lit le fichier contenant le nombre de pages
	sPages = ""
	Set objOpen = objFSO.OpenTextFile(sPagesFilePath, ForReading,true)
	If NOT objOpen.AtEndOfStream then sPages = objOpen.ReadLine
	objOpen.Close
	Set objOpen = nothing
	sPages = trim(regExNumerical.Replace(sPages,""))	' // on ne conserve que la partie numerique de la réponse
	if sPages <> "" then
		if IsNumeric(sPages) then
			RsNumeros("Pages").value = CInt(sPages)
			RsNumeros.Update		' // Mise à jour de la base de données
		End If
	End If
End If
				    

Les bons pour accord

Les bons pour accord ne portent pas de numeros de commande: on les retire de notre Jeu de test

Ces nettoyages successifs retirent environ 9 % de nos commandes

Correction manuelle du Jeu d'entrainement.

1/3 des entrées ont un numéro conforme à notre expression régulière de référence et sont lus dans la version texte du PDF de commande (Extraction ou OCR)

Quand ce n'est pas conforme, plusieurs causes sont possibles:

  1. La saisie manuelle ne reflète pas fidèlement ce que le client a écrit sur la commande.
  2. La méthode d'extraction/OCR n'est pas assez performante et pourrait être améliorée.
  3. Le bon de commande n'entre pas dans le champs des cas automatisables. Par exemple un numero écrit à la main