¿Existe una biblioteca Python fácil de usar para leer un archivo PDF y extraer su texto?

Python tiene muchas bibliotecas para extraer PDF, muchas de ellas se han discutido a continuación.

Me gustaría agregar PDFMiner y Slate a la cola

PDFMiner

PDFMiner es una herramienta para extraer información de documentos PDF. A diferencia de otras herramientas relacionadas con PDF, se centra completamente en obtener y analizar datos de texto.

PDFMiner permite obtener la ubicación exacta del texto en una página, así como otra información como fuentes o líneas. Incluye un convertidor de PDF que puede transformar archivos PDF en otros formatos de texto (como HTML). Tiene un analizador de PDF extensible que se puede usar para otros fines que el análisis de texto.

Caracteristicas

  • Escrito completamente en Python. (para la versión 2.4 o posterior)
  • Analiza, analiza y convierte documentos PDF.
  • Soporte de especificación PDF-1.7. (bueno, casi)
  • Soporte de lenguajes CJK y scripts de escritura vertical.
  • Compatibilidad con varios tipos de fuente (Type1, TrueType, Type3 y CID).
  • Soporte de cifrado básico (RC4).
  • Conversión de PDF a HTML (con una aplicación web de convertidor de muestra).
  • Esquema (TOC) extracción.
  • Extracción de contenidos etiquetados.
  • Reconstruya el diseño original agrupando fragmentos de texto.

Distribución de fuente:
http://pypi.python.org/pypi/pdfm…

github:
https://github.com/euske/pdfminer/

Demostración en línea:

(pdf -> aplicación web de conversión html)
http://pdf2html.tabesugi.net:8080/

Comunidad

El tutor que se encuentra debajo de la lista de correo es para usuarios que desean hacer preguntas.

http://groups.google.com/group/p…

Pizarra 0.5.2

Slate es un paquete de Python que simplifica el proceso de extracción de texto de archivos PDF. Depende del paquete PDFMiner.

Aunque PDFminer es simple, tiene sus propios inconvenientes

  1. Hacer cosas simples, como extraer el texto, es bastante complejo. El programa no está diseñado para devolver objetos de Python, lo que hace que las cosas de la interfaz sean irritantes.
  2. Es un conjunto de herramientas extremadamente completo, con curvas de aprendizaje múltiples y moderadamente empinadas.
  3. No está escrito teniendo en cuenta la piratería.

Slate ofrece una clase, PDF. PDF toma un objeto similar a un archivo y extraerá todo el texto del documento, presentando cada página como una cadena de texto

>>> con open (‘example.pdf’) como f:
… Doc = pizarra.PDF (f)

>>> doc
[…, …, …]
>>> doc [1]
‘Texto de la página 2 …’

Si su pdf está protegido con contraseña, pase la contraseña como segundo argumento

>>> con open (‘secrets.pdf’) como f:
… Doc = slate.PDF (f, ‘contraseña’)

>>> doc [0]
“Mi madre no sabe esto, pero …”

  • Autor: Tim McNamara
  • Página de inicio: http://github.com/timClicks/slate

Fuente de Quora:

euske / pdfminer

http://github.com/timClicks/slate

Happy Learning Python 🙂

¡Salud!

la respuesta es pdfminer como han dicho otros, pero si las bibliotecas no funcionan para usted, es probable que espere demasiado de ellas. Debe comprender cómo funciona el formato de archivo pdf, en lugar de cómo funciona el formato de texto.

Específicamente, todos esperamos poder usar una biblioteca para analizar algún formato de archivo para texto y poder iterar a través del texto línea por línea, pero ¿qué pasa si el texto no tiene caracteres de línea?

¿Cómo sabría la biblioteca qué constituye una línea? La mayoría de las bibliotecas no tratarán de adivinar eso, y sinceramente no nos gustaría que lo hicieran, porque si la línea no está representada por un carácter de línea, entonces el concepto de línea no es realmente parte del texto (¿es ?) y estamos usando la biblioteca para extraer * texto *.

En pdf, el texto se presenta, lo que significa que un objeto de texto en particular se muestra en una posición x, y particular en la página. Entonces, lo que podría pensar como 3 líneas en realidad serían 3 objetos de texto, mostrados en (x, y), (x, y-20), (x, y-40) respectivamente, por lo que una biblioteca de extracción de texto simplemente se extraería el texto, pero no tendría datos de línea. (IRRC pdfminer le entrega String como salida, solo una String grande, no una (línea) iterable, fue porque PDFMiner no funcionó para mí que tuve que estudiar y aprender un poco sobre pdf para obtener lo que quería de Los archivos).

Lo bueno es esto: finalmente tienes la oportunidad de ‘rodar el tuyo’.

Afortunadamente, extraer el texto de un pdf está muy bien definido y es un objetivo simple. Y afortunadamente, PDF es un formato de archivo muy bien documentado y muy bien entendido, por lo que Google será muy útil. Si se trata de empujar, la parte de representación de texto de la especificación es inferior a 200 páginas, pero no tendrá que ir allí.

Comience aquí: Introducción a PDF

Luego lea el artículo de Wikipedia que está súper bien escrito. Luego, tendrá que abrir el archivo en el editor de texto y estudiarlo, lo que no será difícil si solo le interesa el texto. Use esto como una herramienta para comprender los operadores de escritura de secuencias: Adobe Portable Document Format

La respuesta aceptada al siguiente SO le dice lo que necesita investigar para comprender cómo se codifica el texto dentro del pdf: Extraiga el texto de un archivo PDF de forma progresiva (a mano): falta algún texto

Busca en Google todo lo que desees entender y serás llevado a sitios geniales como planetpdf, donde tienen excelentes artículos.

Debería llevarte uno o dos días escribir tu analizador a mano y aprenderás mucho en el proceso sobre algo bastante común. Las bibliotecas deben ser generales, por lo que serán limitadas.

(tal vez irrelevante, los archivos PDF con los que estaba trabajando están linealizados, vea las referencias vinculadas, lo que hizo que estudiar el texto en el archivo PDF y mapear el diseño en la pantalla fuera muy simple, no estudié archivos no linealizados porque no tiene que hacerlo, pero si esto dificulta las cosas, hay una gran cantidad de código para linealizar un pdf, pero no hay mucho que pueda ir al revés)

Dado que Python está diseñado como un lenguaje para procesar datos de varios tipos, es natural pensar en usar el extracto de Python y manipular datos de texto en el formato ubicuo PDF.

Para leer archivos PDF, puede usar el módulo PyPDF (consulte el Capítulo 13 – Trabajar con documentos PDF y Word).

Para escribir archivos PDF, recomendaría usar la biblioteca ReportLab, que parece ser bastante madura y se ha implementado en muchos sistemas (Windows, Linux, etc.). Ver aquí: Soluciones de contenido a PDF.

Si.

Textract es muy fácil de usar. Se basa en un par de diferentes soluciones subyacentes posibles: pdf2text y pdfminer. No he usado las herramientas subyacentes directamente, pero Textract es tan simple como parece.

Otra gran solución es Apache Tika. Tika ejecuta un servidor Java en segundo plano. Es una especie de ingesta de texto de Rosetta Stone (lee documentos, imágenes, etc.), por lo que puede ser excesivo si solo le importa el PDF. Aún así, es de calidad de producción, extremadamente rápido, y hay una interfaz Python fácil de usar.

Aquí hay un ejemplo de Textract:

del proceso de importación de textract
texto = proceso (‘/ tmp / mydocument.pdf’)

Y, el mismo ejemplo usando Tika:

del analizador de importación tika
text = parser.from_file (‘/ tmp / mydocument.pdf’)

Ambas son buenas soluciones. El que elijas dependerá de cómo lo vas a usar.

Esto puede sorprenderle, pero el PDF nunca fue pensado como un formato para una fácil extracción de texto. De hecho, su objetivo principal es asegurarse de que todo lo que esté en el documento se muestre de manera consistente en múltiples plataformas, así como imprimir de forma idéntica (tanto como sea posible) en todas partes. Esto se logra de muchas maneras diferentes, y a veces va tan lejos como para decir literalmente “esta carta va aquí, esta carta va aquí y esta carta va aquí” en su idioma interno.

Entonces, sí, las bibliotecas para extraer texto de PDF son increíblemente complicadas por necesidad, y a veces ni siquiera funcionan correctamente, porque PDF no está destinado a eso .

PyPDF2 tiene una función extractText () es muy fácil de usar. Como han señalado otras personas, es más difícil de lo que parece obtener texto de un PDF y se sabe que extractText no funciona en todos los PDF, especialmente si está formateado de una manera complicada (por ejemplo, imágenes con subtítulos, columnas). He oído que también tiene problemas con archivos PDF que no están en inglés, pero no lo he probado.

Dicho esto, me ha funcionado bien en el pasado en archivos PDF simples, y solo necesita unas pocas líneas de código para que funcione (aunque la cadena resultante probablemente necesitará un poco de masaje de expresiones regulares después). Puede valer la pena intentarlo en su caso. Aquí hay un buen tutorial: Capítulo 13 – Trabajar con documentos PDF y Word

Ejemplo:

def get_pdf_content (pdf_path, page_nums = [0]):
contenido = ”
p = archivo (pdf_path, “rb”)
pdf = pyPdf2.PdfFileReader (p)
para page_num en page_nums:
contenido + = pdf.getPage (page_num) .extractText ()
devolver contenido

Las bibliotecas fáciles de usar tendrán dificultades para extraer información de un PDF.

Por lo general, encontrará caracteres de espacio al azar en el texto, o lo que parece una línea son en realidad dos líneas una encima de la otra (por lo que si el pdf dice “Hola Mundo”, su biblioteca podría leerlo como “H l W rd \ n el oo l “).

Sin embargo, los chicos y chicas de https://www.gini.net/ tienen un servicio que puedes integrar fácilmente en un programa de Python que extraerá información del pdf (también funciona en imágenes, etc.).