Pregunta

Tengo una muy grande de archivos PDF (200.000 KB o más) que contiene una serie de páginas que contienen nada más que tablas. Me gustaría analizar de alguna manera esta información usando Ruby, e importar los datos resultantes en una base de datos MySQL.

¿Alguien sabe de ningún método para tirar estos datos fuera del PDF? Los datos se formatea de la siguiente manera:

Nombre | dirección | Informó de caja | Informó año | Nombre del titular de

A veces, el campo Nombre desborda en el campo de dirección, en cuyo caso las columnas restantes se muestran en la siguiente línea.

Debido al formato irregular, he estado pegado en calcular esto. Por lo menos, yo pude punto cualquiera a una biblioteca PDF Rubí para esta tarea?

ACTUALIZACIÓN: he proporcionado información incorrecta accidentalmente! El tamaño real del archivo es de 300 MB, o 300.000 KB. Hice el mismo cambio para reflejar esto.

¿Fue útil?

Solución

Asumo que puede Copy'n'Paste fragmentos de texto sin problemas cuando el PDF se abre en Acrobat Reader o cualquier otro visor de PDF?

Antes de intentar analizar y extraer texto de este tipo de archivos mediante programación monstruo (incluso si es de 200 Mbytes única - para texto simple en las tablas que hay huuuuge, a menos que tenga 200000 páginas ...), yo procedería así:

  1. Intenta desinfectar el archivo por primera vez por volver a destilar a él.
  2. Pruebe con diferentes herramientas de la CLI para extraer el texto en un archivo .txt.

Esto es una cuestión de minutos. Escribiendo un programa de Ruby a hacer esto sin duda es una cuestión de horas, días o semanas (dependiendo de su conocimiento sobre el funcionamiento interno PDF FileFormat ... sospecho que no tiene mucha experiencia de eso todavía).

Si "2." Works, puede ser a mitad de camino ya se ha realizado. Si funciona, usted también sabe que hacerlo mediante programación con Ruby es un trabajo que puede en principio ser resuelto. Si "2." no funciona, usted sabe que puede ser extremadamente difícil de lograr mediante programación.

desinfectar el 'Monster.pdf':

Es mejor utilizar Ghostscript . También puede utilizar Adobe Acrobat Distiller si tiene acceso a la misma.

gswin32c.exe ^
  -o Monster-PDF-sanitized ^
  -sDEVICE=pdfwrite ^
  -f Monster.pdf

(soy curioso lo mucho que solo comando hará que su encogimiento PDF de salida si se compara con la entrada.)

Extrae el texto de PDF:

Le sugiero al primer intento pdftotext.exe ( de la gente Xpdf ). Hay otra, un poco más incómodo métodos disponibles también, pero esto podría hacer el trabajo ya:

pdftotext.exe ^
   -f 1 ^
   -l 10 ^
   -layout ^
   -eol dos ^
   -enc Latin1 ^
   -nopgbrk ^
   Monster-PDF-sanitized.pdf ^
   first-10-pages-from-Monster-PDF-sanitized.txt

Esto no va a extraer todas las páginas, pero sólo 1-10 (para prueba de concepto, para ver si funciona en absoluto). Para extraer de cada página, acaba de salir fuera del parámetro -f 1 -l 10. Es posible que tenga que ajustar la codificación cambiando el parámetro a -enc ASCII7 (o UTF-8, UCS-2).

Si esto no funciona de la manera quick'n'easy (porque, como sucede a veces, alguna fuente en los usos originales del pdf "codificación personalizada vector") que debe hacer una nueva pregunta, que describe los detalles de sus hallazgos hasta lejos. Luego hay que recurrir calibres más grandes para derribar el problema.

Otros consejos

A, podría apuntar a nadie menos me a una biblioteca de PDF para este Rubí tarea?

Si no lo ha hecho, usted debe comprobar fuera de las dos preguntas anteriores: " Ruby: Lectura Los archivos PDF " y " rubí pdf análisis gema / biblioteca." PDF :: Lector , PDF :: Toolkit y Docsplit son algunas de las bibliotecas sugeridas relativamente populares. Hay incluso una sugerencia de usar JRuby y algunos de Java PDF Library analizador .

No estoy seguro de si alguna de estas soluciones es realmente adecuado para su problema, sobre todo que se trata de tan enormes archivos PDF. Así que a menos que alguien ofrece una respuesta más informativo, tal vez hay que seleccionar una biblioteca o dos y llevarlos a una unidad de prueba.

Esta será una tarea difícil, ya que los archivos PDF prestados no tienen un concepto de diseño tabular, sólo líneas y texto en lugares predeterminados. Puede que no sea posible determinar cuáles son las filas y cuáles son las columnas, pero puede depender del propio PDF.

Las bibliotecas de Java son los más robustos, y puede hacer algo más que extraer texto. Así que me gustaría ver en JRuby y iText o PDFBox.

Comprobar si existe algún contenido estructurado en el PDF. Escribí un artículo en el blog explicando esto en http://www.jpedal.org/PDFblog/? p = 410

Si no es así, tendrá que construirlo.

Tal vez la biblioteca de gambas rubí? enlace de texto

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top