¿Hay algún módulo de Python para convertir archivos PDF en texto? Probé una pieza de código que se encuentra en Activestate que utiliza pypdf pero el texto generado tenido ningún espacio entre y era de ninguna utilidad.
385
¿Hay algún módulo de Python para convertir archivos PDF en texto? Probé una pieza de código que se encuentra en Activestate que utiliza pypdf pero el texto generado tenido ningún espacio entre y era de ninguna utilidad.
Respuestas:
Prueba PDFMiner . Puede extraer texto de archivos PDF en formato HTML, SGML o "PDF etiquetado".
El formato PDF etiquetado parece ser el más limpio, y quitar las etiquetas XML deja solo el texto desnudo.
Una versión de Python 3 está disponible en:
fuente
El paquete PDFMiner ha cambiado desde que se publicó codeape .
EDITAR (nuevamente):
PDFMiner ha sido actualizado nuevamente en la versión
20100213
Puede verificar la versión que ha instalado con lo siguiente:
Aquí está la versión actualizada (con comentarios sobre lo que cambié / agregué):
Editar (una vez más):
Aquí es una actualización para la versión más reciente en PyPI ,
20100619p1
. En resumen He sustituidoLTTextItem
conLTChar
y pasé una instancia de LAParams al constructor CsvConverter.EDITAR (una vez más):
Actualizado para la versión
20110515
(¡gracias a Oeufcoque Penteano!):fuente
LTTextItem
aLTChar
. unixuser.org/~euske/python/pdfminer/index.html#changes20110515
según su comentario.Como ninguna de estas soluciones admite la última versión de PDFMiner, escribí una solución simple que devolverá el texto de un PDF usando PDFMiner. Esto funcionará para aquellos que reciben errores de importación con
process_pdf
Vea a continuación el código que funciona para Python 3:
fuente
python3
, además de los paréntesis obvios después delprint
comando, uno tiene que reemplazar elfile
comandoopen
e importarloStringIO
desde el paqueteio
Pdftotext Un programa de código abierto (parte de Xpdf) al que puede llamar desde python (no es lo que solicitó pero podría ser útil). Lo he usado sin problemas. Creo que Google lo usa en Google Desktop.
fuente
-layout
opción de mantener el texto en la misma posición que está en el PDF. Ahora, si solo pudiera descubrir cómo canalizar el contenido de un PDF.pdftotext
parece funcionar muy bien, pero necesita un segundo argumento que sea un guión, si desea ver los resultados en stdout.find . -iname "*.pdf" -exec pdftotext -enc UTF-8 -eol unix -raw {} \;
por defecto, los archivos generados toman el nombre original con la.txt
extensión.pyPDF funciona bien (suponiendo que esté trabajando con archivos PDF bien formados). Si todo lo que desea es el texto (con espacios), puede hacer lo siguiente:
También puede acceder fácilmente a los metadatos, datos de imágenes, etc.
Un comentario en las notas del código extractText:
Si esto es un problema o no depende de lo que esté haciendo con el texto (por ejemplo, si el orden no importa, está bien, o si el generador agrega texto a la secuencia en el orden en que se mostrará, está bien) . Tengo código de extracción pyPdf en uso diario, sin ningún problema.
fuente
También puede usar pdfminer con bastante facilidad como biblioteca. Tiene acceso al modelo de contenido del pdf y puede crear su propia extracción de texto. Hice esto para convertir contenido PDF a texto separado por punto y coma, usando el código a continuación.
La función simplemente ordena los objetos de contenido TextItem de acuerdo con sus coordenadas y y x, y genera elementos con la misma coordenada y como una línea de texto, separando los objetos en la misma línea con ';' caracteres.
Utilizando este enfoque, pude extraer texto de un pdf del que ninguna otra herramienta pudo extraer contenido adecuado para un análisis posterior. Otras herramientas que probé incluyen pdftotext, ps2ascii y la herramienta en línea pdftextonline.com.
pdfminer es una herramienta invaluable para el raspado de pdf.
ACTUALIZACIÓN :
El código anterior está escrito en una versión anterior de la API, vea mi comentario a continuación.
fuente
pdfminer
, nopdflib
). Sugiero que eche un vistazo a la fuentepdf2txt.py
en la fuente PDFminer, el código anterior se inspiró en la versión anterior de ese archivo.slate
es un proyecto que simplifica el uso de PDFMiner desde una biblioteca:fuente
Necesitaba convertir un PDF específico a texto plano dentro de un módulo de Python. Utilicé PDFMiner 20110515, después de leer su herramienta pdf2txt.py escribí este fragmento simple:
fuente
C:\Python27\Scripts\pdfminer\tools\pdf2txt.py
Reutilizando el código pdf2txt.py que viene con pdfminer; puede hacer una función que tome un camino hacia el pdf; opcionalmente, un tipo externo (txt | html | xml | tag) y opta por la línea de comandos pdf2txt {'-o': '/path/to/outfile.txt' ...}. Por defecto, puede llamar a:
Se creará un archivo de texto, un hermano en el sistema de archivos para el pdf original.
fuente
PDFminer me dio quizás una línea [página 1 de 7 ...] en cada página de un archivo pdf que probé con él.
La mejor respuesta que tengo hasta ahora es pdftoipe, o el código c ++ está basado en Xpdf.
vea mi pregunta sobre cómo se ve la salida de pdftoipe.
fuente
Además, hay PDFTextStream, que es una biblioteca comercial de Java que también se puede usar desde Python.
fuente
He utilizado
pdftohtml
con el-xml
argumento, lea el resultado consubprocess.Popen()
, que le dará x coord, y coord, ancho, alto y fuente, de cada fragmento de texto en el pdf. Creo que esto es lo que 'evince' probablemente también usa porque se escuchan los mismos mensajes de error.Si necesita procesar datos en columnas, se vuelve un poco más complicado ya que tiene que inventar un algoritmo que se adapte a su archivo pdf. El problema es que los programas que hacen archivos PDF realmente no necesariamente presentan el texto en ningún formato lógico. Puede probar algoritmos de clasificación simples y funciona a veces, pero puede haber pequeños 'rezagados' y 'extraviados', fragmentos de texto que no se colocan en el orden que pensaba. Entonces tienes que ser creativo.
Me llevó alrededor de 5 horas descubrir uno para los archivos PDF en los que estaba trabajando. Pero funciona bastante bien ahora. Buena suerte.
fuente
Encontré esa solución hoy. Funciona muy bien para mi. Incluso renderizando páginas PDF a imágenes PNG. http://www.swftools.org/gfx_tutorial.html
fuente