Extraire du texte à partir de PDF en C #

Très simplement, je dois extraire le texte de plusieurs fichiers PDF (beaucoup en fait) pour parsingr le contenu avant de le coller dans une firebase database SQL.

J’ai trouvé quelques bibliothèques assez rares et gratuites en C # qui fonctionnent (la meilleure utilise iTextSharp), mais il y a énormément d’erreurs de formatage et certains caractères sont brouillés et il y a souvent des espaces (”) PARTOUT – à l’intérieur des mots, entre chaque lettre, d’énormes blocs prenant plusieurs lignes, tout semble un peu aléatoire.

Y a-t-il un moyen facile de le faire que j’ignore complètement (très probablement!) Ou s’agit-il d’une tâche ardue qui implique de convertir les valeurs d’octet extraites en lettres de manière fiable?

Vous pouvez jeter un oeil à cet article . Il est basé sur l’excellente bibliothèque iTextSharp .

Il peut y avoir quelques difficultés à le faire de manière fiable. Le problème est que le format PDF est un format de présentation qui attache de l’importance à une bonne typographie. Supposons que vous vouliez simplement sortir un seul mot: appuyez sur .

Un moteur de rendu PDF peut générer 2 appels distincts, comme indiqué dans ce pseudo-code:

moveto (x1, y); output ("T") moveto (x2, y); output ("ap") 

Cela est possible car le crénage par défaut (espacement entre les lettres) entre les lettres T et un peut ne pas être acceptable pour le moteur de rendu, ou bien il peut s’agir d’append ou de supprimer un micro-espace entre les caractères pour obtenir une ligne entièrement justifiée. Cela aboutit finalement au fait que les fragments de texte trouvés dans les fichiers PDF ne sont très souvent pas des mots entiers, mais des morceaux de ceux-ci.

Jetez un coup d’œil à Tika sur DotNet, disponible via Nuget: https://www.nuget.org/packages/TikaOnDotnet.TextExtractor/

C’est un wrapper autour de la très bonne bibliothèque java Tika, utilisant IKVM. Très facile à utiliser, il gère une grande variété de types de fichiers autres que les fichiers PDF, y compris les anciens et les nouveaux formats de bureau. Il sélectionnera automatiquement l’parsingur en fonction de l’extension de fichier, de sorte que c’est aussi simple que:

 var text = new TextExtractor().Extract(file.FullName).Text; 

Mise à jour: Un avertissement avec cette solution est que le développement sur IKVM est terminé. Je ne suis pas sûr de ce que cela signifiera à long terme. http://weblog.ikvm.net/2017/04/21/TheEndOfIKVMNET.aspx

Vous pouvez essayer Toxy, un framework d’extraction de texte / données dans .NET. Dans Toxy 1.0, le format PDF sera pris en charge. Pour plus de détails, s’il vous plaît visitez http://toxy.codeplex.com

Vous pouvez essayer la bibliothèque Docotic.Pdf (disclaimer: je travaille pour Bit Miracle) pour extraire du texte à partir de fichiers PDF. La bibliothèque utilise des méthodes heuristiques pour extraire un texte agréable sans espaces non désirés entre les lettres.

Veuillez regarder un exemple qui montre comment extraire du texte à partir de PDF .

Si vous recherchez une alternative “gratuite”, consultez PDF Clown . J’ai personnellement utilisé l’approche basée sur iFilter, et elle semble bien fonctionner au cas où vous auriez besoin de prendre en charge facilement d’autres types de fichiers. Exemple de code ici .

Si vous traitez des fichiers PDF dans le but d’importer des données dans une firebase database, nous vous conseillons d’ envisager ByteScout PDF Extractor SDK . Certaines fonctions utiles incluses sont

  • détection de table;
  • extraction de texte au format CSV, XML ou texte mis en forme (avec la restauration de la présentation facultative);
  • recherche de texte avec prise en charge des expressions régulières;
  • API de bas niveau pour accéder aux objects texte

AVERTISSEMENT: je suis affilié à ByteScout