Blog de développement

Extracteurs et OCR en ligne de commande

Dernière Modification le :
2024-01-13

Les PDF ne sont pas un format d'entrée de données comme un éditeur de texte, c'est un format de sortie qui produit des documents avec précision. Les fichiers PDF sont un mauvais format pour l'extraction de texte, peu adapté à la commnication de supply chain.
Il peut être visualisé sur un PC dans n'importe quel environnement sans rupture de l'affichage du texte et des images. Toutefois, si vous essayez de copier des données textuelles à partir d'un PDF, il se peut que vous ne puissiez pas les sélectionner correctement ou que le contenu du texte soit incorrect.. Factur-X (et son cousin Order-X), format hybride, en est la preuve. Je ne comprend pas l'obstination des gens à vous fournir une information cruciale (ex. un numéro de commande) sous ce format si complexe, sans vous fournir la version texte! C'est dommage, mais c'est comme cela...

La principale source de difficulté est la grande variété de formats typographiques dans lesquels les documents sont publiés.

Concevoir un extracteur ou un OCR n'est pas trivial! Leur utilisation, elle, est aujourd'hui très simple. Pour en prendre la mesure de cette compléxité, on pourra lire l'excellent article de T. Allison : Bref aperçu du format PDF et les défis pour l'extraction de texte Lire →
Le billet : "Qu'est-ce qui est si difficile dans l'extraction du texte des PDF ?" (https://filingdb.com/b/pdf-text-extraction) a disparu et a été archivé... Il est discuté ici et j'en ai mis une archive dans le ZIP de ressources. Lire → Suivre la discussion → Reddit →

L'extraction n'est pas l'OCR

Une recherche Google pour l'extraction de texte à partir de PDF fournit d'innombrables résultats. La variété est déroutante et il ne semble pas y avoir de vainqueur incontestable. La plupart des outils ne précisent pas pour quels aspects sont réellement utiles.

L'OCR(Optical Character Recognition) s'applique à une image, typiquement issue d'un scanner. L'extraction, elle, s'applique uniquement à un PDF généré à partir d'instructions digitales, typiquement d'un logiciel de texte.

Dans les applications de e-commerce B2B, nous devons extraire l'information et l'entrer dans une base de données: c'est du Doc-to-DB, typiquement le Bon de Commande.

Les Extracteurs en Ligne de Commande

J'explore les solutions gratuites. En fait, il y a un marché énorme avec des gains de productivité phénomenaux à la clé: Les solutions payantes ont leur place! (voir une discussion ici) Mes sources pour trouver des extracteurs sont:

  • Traitement et analyse des PDF avec des outils open-source (voir aussi la discussion des lecteurs) Lire → Suivre la discussion →
  • Un comparatif (benchmark) de logiciels d'extraction de texte ... (Dretec & al.) Lire →
  • Un comparatif (benchmark) et une évaluation pour l'extraction de texte à partir de PDF Lire →
  • Tableau sur WikiPedia Lire →

Les OCR et combinaisons

Pour le choix des OCR, on peut se referer à l'article universitaire de P. Jain "Quel ensemble d'outils d'OCR est bon et pourquoi ? Une étude comparative" Lire →
Et à cette liste Optical Character Recognition (OCR) @ Université de Pittsburg Lire →

Depuis que Google y a mis la main, à la suite d'HP, on dispose d'un OCR performant, en OpenSource, gratuit: Tesseract. Son challenger principal semble être Abbyy FineReader, dont je ne trouve pas de version gratuite de la CLI. Le reste ne convient pas à mon projet. Il faut peut-être s'intéresser aux services en mode REST API de Google ou d'Amazon.

Pour les développeurs, DocToText propose un SDK original et pratique: leur version 5 combine leur extracteur de texte, de la version 4, et un OCR (Tesseract) pour une lecture d'un seul trait. L'extracteur est disponible en Ligne de Commande.

Logiciel Type Site Manuel Telechargement
pdftotext Extract. Site →
pdftoHTML Extract. Site →
PDFBox Extract. Site →
DocToText V4 Extract. Site → ?
Tesseract OCR Site → Lnx:
DocToText V5 Ex. + OCR Site →
K2pdfopt OCRs Site → (*)
TopOCR Pipe OCR Site →

I would like to test : pdftotext (which I currently use) DoctoText (Versions 4 and 5) Tika Tabular Tesseract (OCR)

Les Extracteurs traitent directement les PDF générés par logiciel mais pas les PDF de scans. Les OCR, dont le prédominant est Tesseract, traitent les 2! Au prix de transformations et optimisations préalables d'images, temps de programmation et d'exécution.

TopOCR est un tunnel (pipe), succession préprogrammée et paramétrable, d'outils, qui pemet de dérouler toute une séquence, du PDF au texte, en passant par ghostscript, machin, bidule, Tesseract... en une seule ligne de commande. Son prix n'est que de ... 5 euros et la version de démo n'a pas de limite de temps ni de fonctionnalités nous concernant. L'interface graphique, minimaliste et gratuite, permet de jouer avec différents paramètres pour en voir l'effet. Voir le billet de Peter Meijer. Lire →

K2pdfopt est un tunnel (pipe) pour permettant d'opter pour Tesseract, GOCR, et MuOCR. Pour la version 2.54, je prends la version "Old CPU".

					    

					    
				    

Préparation de l'image: redressement angulaire (OCR)

image

Le prétraitement de l'image est un élément essentiel de tout système d'OCR. Plus l'image d'entrée que vous présentez au moteur d'OCR est de bonne qualité, meilleur sera le résultat de l'OCR. Pour réussir l'OCR, vous devez passer en revue l'étape de prétraitement sans doute la plus importante : l'orientation et le redressement du texte.

Lire →

Le redressement angulaire, pour un angle pas trop élevé, est un problème fréquent et différent de l'erreur d'orientation (exemple haut-en-bas). Vous pouvez utiliser Python pour redresser automatiquement des images scannées inclinées. On utilise alors OpenCV pour détecter l'inclinaison de l'image et la corriger en fonction de l'angle détecté. La transformée de Hough d'OpenCV détecte l'orientation moyenne d'un texte légèrement désorienté...

Pour une image mal posée sur un scanner, il y aura un biseau 'parasite', par exemple en bas de page. Le redressement va aussi, nécessairement, créer un biseau parasite, par exemple sur le côté

Le script devra donc inclure 2 opérations de rognage, selon une marge prédéfinie (ou à définir), avant et après le redressement. Pour bien faire, on pourrait calculer la marge, ou corriger le biseau en fonction de l'angle. Pour l'instant, je prend juste une marge fixe, pour rogner avant la correction angulaire, puis la même, divisée par 2 pour une feuille A4, pour rogner après la correction angulaire. Les résultats sont bons!

image

I use tesseract-ocr a lot, and in my experience only 2 things improve its performance, the source image being in tiff format, and the physical size of the text in the image. Consequently I run it against the image, and against the image resized 200%, 400% and 800%. For each of the texts produced I count the number of words flagged as misspelled and choose accordingly.

XXX

Integrating Automated Invoice Processing OCR Into Your Business Instantly

https://www.width.ai/post/integrating-automated-invoice-processing-ocr

09/04/2023, 04:55 The Best Ways To Extract Text From Images Without Tesseract
https://www.width.ai/post/the-best-ways-to-extract-text-from-images-without-tesseract-python