Riconoscimento programmatico del testo dalle scansioni in un file PDF [chiuso]

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

  •  03-07-2019
  •  | 
  •  

Domanda

Ho un file PDF, che contiene i dati che dobbiamo importare in un database. I file sembrano essere scansioni pdf di testo alfanumerico stampato. Sembra 10 pt. Times New Roman.

Esistono strumenti o componenti che possono permettermi di riconoscere e analizzare questo testo?

È stato utile?

Soluzione

Ho usato pdftohtml per rimuovere correttamente le tabelle dal PDF in CSV. È basato su Xpdf , che è uno strumento più generico, che include pdftotext . L'ho appena racchiuso in una Process.Start chiamata da C #.

Se stai cercando qualcosa di un po 'più fai-da-te, c'è la iTextSharp - una porta di Java iText - e PDFBox (sì, dice Java - ma hanno una versione .NET tramite IKVM.NET ). Ecco alcuni articoli di CodeProject sull'uso di iTextSharp e PDFBox da C #.

E, se sei davvero un masochista, puoi chiamare PDF IFilter con interoperabilità COM. Le Specifiche IFilter sono piuttosto semplici, ma immagino che l'interoperabilità ambientale sarebbe significativo.

Modifica: dopo aver riletto la domanda e le successive risposte, diventa chiaro che l'OP ha a che fare con immagini nel suo PDF. In tal caso, dovrai estrarre le immagini (le librerie PDF sopra sono in grado di farlo abbastanza facilmente) ed eseguirle attraverso un motore OCR.

Ho usato MODI in modo interattivo prima, con risultati decenti. È COM, quindi chiamarlo da C # tramite interop è anche fattibile e piuttosto semplice :

' 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

Altri come Tesseract , ma ne ho un'esperienza diretta. Ho sentito cose sia positive che negative, quindi immagino che dipenda molto dalla qualità della tua fonte.

Altri suggerimenti

Non è possibile estrarre il testo acquisito da un PDF. È necessario il software OCR. La buona notizia è che ci sono alcune applicazioni open source che puoi provare e il percorso OCR sarà molto più facile rispetto all'utilizzo di una libreria PDF per estrarre il testo. Dai un'occhiata a Tesseract e GOCR.

Ho pubblicato informazioni sull'analisi dei pdf in uno dei miei blog. Premi questo link:

http://devpinoy.org/blogs/marl/archive/2008/03/04/pdf-to-text-using-open-source-library-pdfbox -another-sample-for-grade-1-pupils.aspx

Modifica: il collegamento non funziona più a lungo. Di seguito citato da 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

  

Bene, quanto segue si basa su esempi popolari disponibili sul web.   Quello che fa è "leggere". il file pdf e l'output come testo nel file   controllo casella di testo RTF nel modulo. La libreria PDFBox per .NET può essere   scaricato da sourceforge.

     

Devi aggiungere un riferimento a IKVM.GNU.Classpath & amp; PDFBox-0.7.3. E   inoltre, è necessario aggiungere FontBox-0.1.0-dev.dll e PDFBox-0.7.3.dll   la cartella bin dell'applicazione. Per qualche motivo non ricordo   (forse viene da uno dei tutorial), ho anche aggiunto al cestino   IKVM.GNU.Classpath.dll.

     

Nella nota a margine, ho appena ricevuto la mia copia di " Head First C # " (su Keith's   suggerimento) da Amazon. Il libro è fantastico! È davvero scritto per   principianti. Questa edizione copre VS2008 e il framework 3.5.

     

Ecco qua ...

/* 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));
        }

     }
}

In un'azienda per cui lavoravo, abbiamo usato il toolkit ActivePDF con un certo successo:

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

Penso che avresti bisogno almeno della versione Standard o Pro ma hanno delle prove in modo da poter vedere se farà quello che vuoi.

Una rapida ricerca su Google mostra questo risultato promettente. http://www.pdftron.com/net/index.html

Puoi usare un modulo come PDF di perl il testo. E usa un altro strumento per importare le informazioni pertinenti nel database.

Sono sicuro che ci sono componenti PDF per .NET, ma non ne ho provato nessuno, quindi non so cosa sia buono.

Se il PDF è una scansione del testo stampato, sarà difficile (coinvolge l'elaborazione delle immagini, il riconoscimento dei caratteri ecc.) farlo da soli. Il PDF generalmente memorizzerà i documenti scansionati come JPEG internamente. È meglio utilizzare uno strumento di terze parti (strumento OCR) che esegua ciò.

Di recente ho trovato ReportLab per Python.

Se ho capito bene, sheebz sta chiedendo come estrarre i campi PDF e caricare i dati in un database. Hai visto iTextSharp? - http://sourceforge.net/projects/itextsharp/

Sulla base della risposta di Mark Brackett, ho creato un pacchetto Nuget per avvolgere pdftotext .

È open source , destinato a .net standard 1.6 e .net framework 4.5 .

Utilizzo:

using XpdfNet;

var pdfHelper = new XpdfHelper();

string content = pdfHelper.ToText("./pathToFile.pdf");
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top