¿Cómo extraer texto de un archivo PDF?

Resuelto Simplicity asked hace 8 años • 0 respuestas

Estoy intentando extraer el texto incluido en este archivo PDF usando Python.

Estoy usando el paquete PyPDF2 (versión 1.27.2) y tengo el siguiente script:

import PyPDF2

with open("sample.pdf", "rb") as pdf_file:
    read_pdf = PyPDF2.PdfFileReader(pdf_file)
    number_of_pages = read_pdf.getNumPages()
    page = read_pdf.pages[0]
    page_content = page.extractText()
print(page_content)

Cuando ejecuto el código, obtengo el siguiente resultado, que es diferente del incluido en el documento PDF:

 ! " # $ % # $ % &% $ &' ( ) * % + , - % . / 0 1 ' * 2 3% 4
5
 ' % 1 $ # 2 6 % 3/ % 7 / ) ) / 8 % &) / 2 6 % 8 # 3" % 3" * % 31 3/ 9 # &)
%

¿Cómo puedo extraer el texto tal cual está en el documento PDF?

Simplicity avatar Jan 17 '16 18:01 Simplicity
Aceptado

Estaba buscando una solución simple para usar en Python 3.x y Windows. No parece haber soporte de texttract , lo cual es desafortunado, pero si está buscando una solución simple para Windows/python 3, consulte el paquete tika , que es realmente sencillo para leer archivos PDF.

Tika-Python es un enlace de Python a los servicios REST de Apache Tika™ que permite llamar a Tika de forma nativa en la comunidad de Python.

from tika import parser # pip install tika

raw = parser.from_file('sample.pdf')
print(raw['content'])

Tenga en cuenta que Tika está escrito en Java, por lo que necesitará tener instalado un tiempo de ejecución de Java.

DJK avatar Feb 07 '2018 21:02 DJK

pypdf ha mejorado mucho recientemente. Dependiendo de los datos, está a la par o mejor que pdfminer.six.

pymupdf / tika / PDFium son mejores que pypdf, pero la diferencia se volvió bastante pequeña (principalmente cuando establecer una nueva línea). La parte principal es que son mucho más rápidos. Pero no son Python puro, lo que puede significar que no puedes ejecutarlo. Y es posible que algunos tengan licencias demasiado restrictivas para que no puedas usarlos.

Eche un vistazo al punto de referencia . Este punto de referencia considera principalmente textos en inglés, pero también en alemán. No incluye:

  • Cualquier cosa especial con respecto a las tablas (solo que el texto esté ahí, no sobre el formato)
  • Prueba de árabe (idiomas RTL)
  • Fórmulas matemáticas.

Eso significa que si su caso de uso requiere esos puntos, es posible que perciba la calidad de manera diferente.

Dicho esto, los resultados de noviembre de 2022:

Calidad

Velocidad

pypdf

¡Me convertí en el mantenedor de pypdf y PyPDF2 en 2022! 😁 La comunidad mejoró mucho la extracción de texto en 2022. Pruébalo :-)

from pypdf import PdfReader

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

Tenga en cuenta que esos paquetes no se mantienen:

  • PyPDF2, PyPDF3, PyPDF4
  • pdfminer(sin .seis)

pymupdf

import fitz # install using: pip install PyMuPDF

with fitz.open("my.pdf") as doc:
    text = ""
    for page in doc:
        text += page.get_text()

print(text)

Otras bibliotecas de PDF

  • pikepdf no admite la extracción de texto ( fuente )
Martin Thoma avatar Aug 21 '2020 07:08 Martin Thoma

Utilice extracto de texto.

  • http://textract.readthedocs.io/en/latest/
  • https://github.com/deanmalmgren/textract

Admite muchos tipos de archivos, incluidos PDF

import textract
text = textract.process("path/to/file.extension")
Jakobovski avatar Nov 12 '2016 10:11 Jakobovski