web-dev-qa-db-fra.com

Extraire du texte à partir de PDF en C #

Très simplement, je dois extraire le texte de plusieurs PDF (beaucoup en fait) pour analyser le contenu avant de le coller dans une base de données 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.

Existe-t-il un moyen facile de le faire que j'ignore complètement (assez 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?

21
Duncan Tait

Vous pouvez jeter un oeil à cet article . Il est basé sur l'excellent iTextSharp library.

9
Darin Dimitrov

Il peut y avoir quelques difficultés à le faire de manière fiable. Le problème est que PDF est un format presentation qui attache de l'importance à une bonne typographie. Supposons que vous vouliez simplement sortir un seul mot: Tapez 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")

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

20
Tarydon

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'analyseur 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 inconvénient de 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

14
David Hammond

Vous pouvez essayer Toxy, un framework d’extraction de texte/données dans .NET. Dans Toxy 1.0, PDF sera pris en charge. Pour plus de détails, veuillez visiter http://toxy.codeplex.com

3
Tony Qu

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

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

1
Bobrovsky

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 .

0
Jussi Palo

Si vous traitez PDF fichiers dans le but d’importer des données dans une base de données, 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 objets texte

AVERTISSEMENT: je suis affilié à ByteScout

0
Eugene