web-dev-qa-db-fra.com

Extraire le texte d'un fichier PDF à l'aide de PDFMiner en python?

Python Version 2.7

Je cherche de la documentation o exemples sur la façon d'extraire le texte d'un fichier PDF à l'aide de PDFMiner avec Python.

Il semble que PDFMiner ait mis à jour son API et que tous les exemples pertinents que j'ai trouvés contiennent du code obsolète (les classes et les méthodes ont été modifiées). Les bibliothèques que j'ai trouvées et qui facilitent l'extraction de texte à partir d'un fichier PDF utilisent l'ancienne syntaxe PDFMiner. Je ne sais donc pas comment procéder.

Dans l'état actuel des choses, j'examine le code source pour voir si je peux le comprendre.

70
DuckPuncher

Voici un exemple pratique d'extraction de texte d'un fichier PDF à l'aide de la version actuelle de PDFMiner (septembre 2016).

from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from io import StringIO

def convert_pdf_to_txt(path):
    rsrcmgr = PDFResourceManager()
    retstr = StringIO()
    codec = 'utf-8'
    laparams = LAParams()
    device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
    fp = open(path, 'rb')
    interpreter = PDFPageInterpreter(rsrcmgr, device)
    password = ""
    maxpages = 0
    caching = True
    pagenos=set()

    for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, password=password,caching=caching, check_extractable=True):
        interpreter.process_page(page)

    text = retstr.getvalue()

    fp.close()
    device.close()
    retstr.close()
    return text

La structure de PDFMiner a récemment changé. Cela devrait donc fonctionner pour extraire du texte à partir des fichiers PDF.

Edit: Fonctionne toujours au 7 juin 2018. Vérifié en Python Version 3.x

155
DuckPuncher

super réponse de DuckPuncher, pour Python3, assurez-vous d'installer pdfminer2 et faites:

import io

from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage


def convert_pdf_to_txt(path):
    rsrcmgr = PDFResourceManager()
    retstr = io.StringIO()
    codec = 'utf-8'
    laparams = LAParams()
    device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
    fp = open(path, 'rb')
    interpreter = PDFPageInterpreter(rsrcmgr, device)
    password = ""
    maxpages = 0
    caching = True
    pagenos = set()

    for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages,
                                  password=password,
                                  caching=caching,
                                  check_extractable=True):
        interpreter.process_page(page)

    text = retstr.getvalue()

    fp.close()
    device.close()
    retstr.close()
    return text
23
juan Isaza