Reconocer mediante programación el texto de las exploraciones en un archivo PDF [cerrado]

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

  •  03-07-2019
  •  | 
  •  

Pregunta

Tengo un archivo PDF, que contiene datos que necesitamos importar a una base de datos. Los archivos parecen ser exploraciones en pdf de texto alfanumérico impreso. Parece que 10 pt. Times New Roman.

¿Existen herramientas o componentes que me permitan reconocer y analizar este texto?

¿Fue útil?

Solución

He usado pdftohtml para eliminar tablas de PDF y convertirlas en CSV. Se basa en Xpdf , que es una herramienta de propósito más general, que incluye pdftotext . Simplemente lo envuelvo como una llamada Process.Start desde C #.

Si estás buscando algo un poco más de bricolaje, está la biblioteca iTextSharp : un puerto de Java iText - y PDFBox (sí, dice Java, pero tienen una versión .NET a través de IKVM.NET ). Aquí hay algunos artículos de CodeProject sobre el uso de iTextSharp y PDFBox de C #.

Y, si usted es realmente un masoquista, puede llamar a PDF IFilter con interoperabilidad COM. El especificaciones de IFilter es bastante simple, pero creo que la sobrecarga de interoperabilidad Sería significativo.

Editar: Después de volver a leer la pregunta y las respuestas subsiguientes, queda claro que el OP está tratando con imágenes en su PDF. En ese caso, deberá extraer las imágenes (las bibliotecas de PDF anteriores pueden hacerlo con bastante facilidad) y ejecutarlo a través de un motor de OCR.

He usado MODI antes, con resultados decentes. Es COM, por lo que llamarlo desde C # a través de interoperabilidad también es factible y bastante 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

Otros como Tesseract , pero tengo experiencia directa con esto. He escuchado cosas buenas y malas al respecto, por lo que imagino que depende en gran medida de la calidad de su fuente.

Otros consejos

No puede extraer texto escaneado de un PDF. Necesitas el software OCR. La buena noticia es que hay algunas aplicaciones de código abierto que puede probar y la ruta OCR probablemente será más fácil que usar una biblioteca PDF para extraer texto. Echa un vistazo a Tesseract y GOCR.

He publicado sobre el análisis de PDF en uno de mis blogs. Haz clic en este enlace:

http://devpinoy.org/blogs/marl/archive/2008/03/04/pdf-to-text-using-open-source-library-pdfbox -otra-muestra-para-grado-1-pupils.aspx

Editar: Enlace no funciona mucho tiempo. Abajo, citado en 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

  

Bueno, lo siguiente se basa en ejemplos populares disponibles en la web.   Lo que esto hace es " leer " el archivo pdf y su salida como un texto en el   Control de cuadro de texto enriquecido en el formulario. El PDFBox para la biblioteca .NET puede ser   descargado de sourceforge.

     

Debe agregar una referencia a IKVM.GNU.Classpath & amp; PDFBox-0.7.3. Y   además, es necesario agregar FontBox-0.1.0-dev.dll y PDFBox-0.7.3.dll en   La carpeta bin de tu aplicación. Por alguna razón no puedo recordar   (tal vez sea de uno de los tutoriales), también lo agregué a la papelera   IKVM.GNU.Classpath.dll.

     

En la nota al margen, acabo de recibir mi copia de " Head First C # " (en la de Keith   sugerencia) de Amazon. ¡El libro es genial! Está realmente escrito para   principiantes Esta edición cubre VS2008 y el marco 3.5.

     

Aquí tienes ...

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

     }
}

En una empresa para la que solía trabajar, utilizamos el kit de herramientas ActivePDF con cierto éxito:

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

Creo que necesitarías al menos la versión Estándar o Pro, pero tienen pruebas para que puedas ver si hará lo que quieres.

Una búsqueda rápida en Google muestra este resultado prometedor. http://www.pdftron.com/net/index.html

Puede utilizar un módulo como PDF de perl para extraer el texto. Y use otra herramienta para importar la información pertinente a la base de datos.

Estoy seguro de que hay componentes PDF para .NET, pero no he probado ninguno, así que no sé qué es lo bueno.

Si el PDF es un escaneo de texto impreso, será difícil (implica procesamiento de imágenes, reconocimiento de caracteres, etc.) hacerlo usted mismo. El PDF generalmente almacenará los documentos escaneados como archivos JPEG internamente. Es mejor utilizar una herramienta de terceros (herramienta OCR) que hace esto.

Recientemente he encontrado ReportLab para Python.

Si lo hago bien, sheebz pregunta cómo extraer los campos PDF y cargar los datos en una base de datos. ¿Has mirado en iTextSharp? - http://sourceforge.net/projects/itextsharp/

Basándome en la respuesta de Mark Brackett, creé un paquete Nuget para envolver pdftotext .

Es fuente abierta , dirigida a .net standard 1.6 y .net framework 4.5 .

Uso:

using XpdfNet;

var pdfHelper = new XpdfHelper();

string content = pdfHelper.ToText("./pathToFile.pdf");
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top