2010-01-22 3 views
20

Simplement, j'ai besoin d'extraire du texte de plusieurs fichiers PDF (beaucoup en fait) afin d'analyser le contenu avant de le coller dans une base de données SQL. J'ai trouvé quelques librairies C# libres qui fonctionnent (la meilleure utilise iTextSharp), mais il y a énormément d'erreurs de formatage et certains caractères sont brouillés et beaucoup de fois il y a des espaces ('') PARTOUT - à l'intérieur des mots, entre chaque lettre, d'énormes blocs occupant plusieurs lignes, tout cela semble un peu aléatoire.Extraction de texte à partir de fichiers PDF en C#

Existe-t-il un moyen facile de le faire que je suis complètement négligent (très probable!) Ou est-ce une tâche un peu ardu qui implique la conversion des valeurs d'octets extraites en lettres fiables?

Cheers,

Duncan

+0

Voir aussi http://stackoverflow.com/q/10982156/292060 – goodeye

Répondre

9

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

+0

Ouais c'est le celui que j'utilisais, c'était plutôt bien mais pas incroyablement fiable. Cependant, en regardant la réponse de Tarydon ci-dessous explique pourquoi, et en fait c'est probablement le meilleur que je vais trouver! Bravo –

+1

Alors que la bibliothèque iTextSharp est une excellente bibliothèque, elle n'est pas gratuite à des fins commerciales. Ne pas oublier de lire les petits caractères https://sourceforge.net/p/itextsharp/itextsharp/ci/ed0d02ecca2a17b028b1f40b885efac41886b7ed/tree/src/notice.txt –

17

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

Un moteur de rendu PDF pourrait le résultat sous forme de 2 appels distincts, comme indiqué dans ce pseudo-code:

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

Cela serait fait, car la valeur par défaut crénage (espacement entre les lettres) entre les lettres T et a peuvent ne pas être acceptables pour le moteur de rendu, ou il peut s'agir d'ajouter ou de supprimer du micro-espace entre les caractères pour obtenir une ligne entièrement justifiée. Ce qui en résulte finalement, c'est que les fragments de texte réels trouvés en PDF sont très souvent pas des mots complets, mais des morceaux d'entre eux.

+1

Excellente description des difficultés potentielles dans l'extraction de texte à partir de PDF. – Lunatik

1

Vous pouvez essayer Docotic.Pdf library (avertissement: je travaille pour Bit Miracle) pour extraire du texte à partir de fichiers PDF. La bibliothèque utilise des heuristiques pour extraire du texte agréable sans espaces indésirables entre les lettres des mots.

S'il vous plaît jeter un oeil à un échantillon qui montre how to extract text from PDF.

2

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, s'il vous plaît visitez http://toxy.codeplex.com

+0

-1 Cela n'a rien à voir avec les fichiers PDF (pour le moment). Vous pourriez aussi bien nous dire de visiter http://www.websitethatplansonhavingcodetoexactacttextfrompdfsoneday.com –

+1

J'ai dit que ce sera. Quoi qu'il en soit, vous le verrez bientôt. Je vais le rendre disponible avant juin. –

+1

Toxy 1.0 est ici. Il prend en charge PDF maintenant –

0

Si vous cherchez une alternative "gratuite", consultez PDF Clown. Personnellement, j'ai utilisé l'approche basée sur iFilter, et cela semble fonctionner correctement au cas où vous auriez besoin de supporter facilement d'autres types de fichiers. Exemple de code here.

9

Jetez un oeil à Tika sur DotNet, disponible par le biais Nuget: https://www.nuget.org/packages/TikaOnDotnet.TextExtractor/

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

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

Si vous traitez des fichiers PDF dans le but de l'importation de données dans une base de données alors je suggère de considérer ByteScout PDF Extractor SDK. Certaines fonctions utiles incluses sont

  • détection de table;
  • extraction de texte au format CSV, XML ou texte formaté (avec la restauration optionnelle de la mise en page);
  • recherche de texte avec prise en charge des expressions régulières;
  • API de bas niveau pour accéder aux objets texte

DISCLAIMER: Je suis affilié à ByteScout

Questions connexes