Módulo de Python para convertir PDF a texto

¿Hay algún módulo de Python para convertir archivos PDF en texto? Probé una pieza de código ( mirror ) que se encuentra en Activestate que usa pypdf pero el texto generado no tenía espacio entre ellos y no sirvió de nada.


Esta pregunta fue publicada originalmente en el desbordamiento de pila por cnu pero se cerró.

Actualización: PyPDF2 hoy obtuvo una mejora masiva: pypdf2.readthedocs.io/en/latest/user/extract-text.html
@MartinThoma ¡Gracias, es genial saberlo!

Respuestas (9)

Las bibliotecas python pdfminer2 o pdfminer3k / pdfminer.six para python 3 pueden extraer el texto de los archivos pdf que contienen texto (tenga en cuenta que los documentos escaneados almacenados como pdf no contendrán texto o un intento de OCR).

Incluye la pdf2txt.pyutilidad de línea de comandos para permitir un uso conveniente en la terminal.

Actualización noviembre 2020

Sin embargo, puede encontrar que vale la pena mirar pdf-scraper-with-ocr que proporciona una GUI que le permite seleccionar las regiones de un documento escaneado para convertir, las páginas para omitir, etc. luego las genera como imágenes y usa Tesseract para OCR las imágenes en campos con nombre para usted.

Dado que se basa en Python y Tesseract, ambos multiplataforma, debería funcionar en casi cualquier plataforma.

La forma más fácil de administrar pdf en python es PyPDF2 , también puede extraer texto y otra información como páginas, autor, creador ...

Dijiste que lo intentaste pypdfpero es una versión desactualizada y este problema podría resolverse. Tal vez su problema sea con un archivo específico. Si PyPDF2no resuelve su problema, ¿viste el comando Unix pdftotext? ¿Te da una salida correcta?

He trabajado con dos módulos PDF: PyPDF2ypdfminer.six

PDFminer.six es más confiable que PyPDF2 pero 6 veces más lento (temporizado).

Aquí hay un ejemplo de código de trabajo para PDFminer.six, la documentación es un poco escasa: https://stackoverflow.com/a/61857301/7483211

PyPDF2 obtuvo una gran mejora hoy. Es posible que desee intentarlo de nuevo :-)

La única solución que me funcionó para contenido UTF-8: Apache Tika

from tika import parser
parsed = parser.from_file('/path/to/file.pdf')
print(parsed["content"])

PyPDF2 se mantiene nuevamente y recibió una mejora masiva de extracción de texto con PyPDF2==2.1.0.

Uso

Instalarlo:pip install PyPDF2 --upgrade

from PyPDF2 import PdfReader

reader = PdfReader("example.pdf")

text = ""
for page in reader.pages:
    text += page.extract_text() + "\n"

print(text)

Más en los documentos

Punto de referencia

Mi punto de referencia muestra que Tika / MuPDF / PDFium aún tienen una mejor calidad de extracción. Sin embargo, hay dos cosas importantes a considerar:

  1. PyPDF2 es un paquete de Python puro sin dependencias. Esto hace que sea mucho más fácil de instalar.
  2. PyPDF2 es un software gratuito y de código abierto (usando la licencia BSD de 3 cláusulas).

Puede usar GroupDocs.Conversion Cloud SDK for Python para convertir PDF a texto. También puede convertir otros formatos de archivo comunes a texto. Su plan de paquete gratuito proporciona 50 créditos gratis por mes.

Soy evangelista de desarrolladores en Aspose.

https://github.com/kermitt2/grobid + https://github.com/kermitt2/grobid-client-python :

  • extraer información de documentos académicos
  • los dos repositorios son Apache-2.0
  • Extracción y estructuración de texto completo a partir de artículos PDF, incluido un modelo para la segmentación general del documento y modelos para la estructuración del cuerpo del texto (párrafo, títulos de sección, leyenda de referencia, figura, tabla, etc.).

  • grobid está en Java y se puede llamar como un servicio a través de Python con https://github.com/kermitt2/grobid-client-python

https://github.com/allenai/spv2 :

  • ya no se mantiene
  • sin licencia
  • se enfoca en artículos académicos

https://github.com/allenai/science-parse :