Reconnaître par programme le texte des numérisations dans un fichier PDF [fermé]

StackOverflow https://stackoverflow.com/questions/158479

  •  03-07-2019
  •  | 
  •  

Question

J'ai un fichier PDF contenant des données à importer dans une base de données. Les fichiers semblent être des scans pdf de texte alphanumérique imprimé. On dirait que 10 pt. Times New Roman.

Existe-t-il des outils ou des composants qui me permettent de reconnaître et d’analyser ce texte?

Était-ce utile?

La solution

J'ai utilisé pdftohtml pour supprimer avec succès des tableaux de PDF au format CSV. Il est basé sur Xpdf , un outil plus général qui comprend pdftotext . Je viens de l'envelopper comme un appel Process.Start à partir de C #.

Si vous recherchez quelque chose de plus artisanal, vous trouverez la bibliothèque iTextSharp - un portage de Java. iText - et PDFBox (oui, cela dit Java - mais ils ont une version .NET par IKVM.NET ). Voici quelques articles de CodeProject sur l’utilisation de iTextSharp et PDFBox à partir de C #.

Et si vous êtes vraiment masochiste, vous pouvez faire appel au site Web d'Adobe PDF IFilter avec COM interop. Les spécifications IFilter sont assez simples, mais je suppose que les frais généraux d'interopérabilité serait significatif.

Modifier: après avoir relu la question et les réponses suivantes, il est devenu évident que le PO traite de images dans son PDF. Dans ce cas, vous devrez extraire les images (les bibliothèques PDF ci-dessus peuvent le faire assez facilement) et l'exécuter via un moteur OCR.

J'ai déjà utilisé MODI de manière interactive avec des résultats corrects. C’est COM, c’est pourquoi faisable et joli simple :

' lifted from http://en.wikipedia.org/wiki/Microsoft_Office_Document_Imaging
Dim inputFile As String = "C:\test\multipage.tif"
Dim strRecText As String = ""
Dim Doc1 As MODI.Document

Doc1 = New MODI.Document
Doc1.Create(inputFile)
Doc1.OCR()  ' this will ocr all pages of a multi-page tiff file
Doc1.Save() ' this will save the deskewed reoriented images, and the OCR text, back to the inputFile

For imageCounter As Integer = 0 To (Doc1.Images.Count - 1) ' work your way through each page of results
   strRecText &= Doc1.Images(imageCounter).Layout.Text    ' this puts the ocr results into a string
Next

File.AppendAllText("C:\test\testmodi.txt", strRecText)     ' write the OCR file out to disk

Doc1.Close() ' clean up
Doc1 = Nothing

D'autres comme Tesseract , mais j'en ai une expérience directe. J'ai entendu des bonnes et des mauvaises choses à ce sujet. J'imagine que cela dépend donc beaucoup de la qualité de votre source.

Autres conseils

Vous ne pouvez pas extraire le texte numérisé d'un fichier PDF. Vous avez besoin d'un logiciel OCR. La bonne nouvelle est qu'il existe quelques applications open source que vous pouvez essayer et la route d'OCR sera probablement plus facile que d'utiliser une bibliothèque PDF pour extraire du texte. Découvrez Tesseract et GOCR.

J'ai publié un article sur l'analyse de fichiers PDF dans l'un de mes blogs. Cliquez sur ce lien:

http://devpinoy.org/blogs/marl/archive/2008/03/04/pdf-to-text-using-open-source-library-pdfbox -un-autre-échantillon-pour-1ère-classe.aspx

Modifier: le lien ne fonctionne plus. Ci-dessous, cité de http://web.archive.org/web/20130507084207/http://devpinoy.org /blogs/marl/archive/2008/03/04/pdf-to-text-using-open-source-library-pdfbox-another-sample-for-grade-1-pupils.aspx

  

Eh bien, ce qui suit est basé sur des exemples populaires disponibles sur le Web.   Ce que cela fait est "lire". le fichier pdf et le sortir sous forme de texte dans le   contrôle de zone de texte enrichi dans le formulaire. La bibliothèque PDFBox for .NET peut être   téléchargé de sourceforge.

     

Vous devez ajouter une référence à IKVM.GNU.Classpath & amp; PDFBox-0.7.3. Et   de plus, FontBox-0.1.0-dev.dll et PDFBox-0.7.3.dll doivent être ajoutés à   le dossier bin de votre application. Pour une raison quelconque, je ne me souviens pas   (c’est peut-être à partir d’un des tutoriels), j’ai aussi ajouté   IKVM.GNU.Classpath.dll.

     

Sur la note de côté, je viens de recevoir ma copie de "Head First C #". (sur Keith's   suggestion) d'Amazon. Le livre est cool! C'est vraiment écrit pour   débutants. Cette édition couvre VS2008 et le framework 3.5.

     

Ici vous allez ...

/* Marlon Ribunal
 * Convert PDF To Text
 * *******************/

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using System.Drawing.Printing;
using System.IO;
using System.Text;
using System.ComponentModel.Design;
using System.ComponentModel;
using org.pdfbox.pdmodel;
using org.pdfbox.util;

namespace MarlonRibunal.iPdfToText
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent(); 
        }

        void Button1Click(object sender, EventArgs e)    
        {    
            PDDocument doc = PDDocument.load("C:\\pdftoText\\myPdfTest.pdf");
            PDFTextStripper stripper = new PDFTextStripper();
            richTextBox1.Text=(stripper.getText(doc));
        }

     }
}

Dans une entreprise pour laquelle je travaillais, nous avons utilisé la boîte à outils ActivePDF avec un certain succès:

http://www.activepdf.com/products/serverproducts/toolkit /index.cfm

Je pense que vous auriez au moins besoin de la version Standard ou Pro, mais ils ont des essais pour vous permettre de voir si elle fera ce que vous voulez.

Une recherche rapide sur Google montre ce résultat prometteur. http://www.pdftron.com/net/index.html

Vous pouvez utiliser un module tel que PDF de Perl pour extraire le texte. Et utilisez un autre outil pour importer les informations pertinentes dans la base de données.

Je suis sûr qu'il existe des composants PDF pour .NET, mais je n'en ai pas essayé. Je ne sais donc pas ce qui est bon.

Si le PDF est une numérisation de texte imprimé, il sera difficile (implique le traitement de l'image, la reconnaissance des caractères, etc.) de le faire vous-même. PDF stockera généralement les documents numérisés au format JPEG en interne. Mieux vaut utiliser un outil tiers (outil de ROC) qui effectue cette opération.

J'ai récemment trouvé un ReportLab pour Python.

Si je comprends bien, sheebz demande comment extraire les champs PDF et charger les données dans une base de données. Avez-vous regardé iTextSharp? - http://sourceforge.net/projects/itextsharp/

Sur la base de la réponse de Mark Brackett, j'ai créé un paquet Nuget pour envelopper pdftotext .

Il s'agit de source ouverte , ciblant .net standard 1.6 et .net framework 4.5 .

Utilisation:

using XpdfNet;

var pdfHelper = new XpdfHelper();

string content = pdfHelper.ToText("./pathToFile.pdf");
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top