Reconocer mediante programación el texto de las exploraciones en un archivo PDF [cerrado]
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?
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:
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
Uso:
using XpdfNet;
var pdfHelper = new XpdfHelper();
string content = pdfHelper.ToText("./pathToFile.pdf");