Cela fonctionne en mai 2020 en utilisant PDFminer six dans Python3.
Installation du package
$ pip install pdfminer.six
Importer le package
from pdfminer.high_level import extract_text
Utilisation d'un PDF enregistré sur disque
text = extract_text('report.pdf')
Ou bien:
with open('report.pdf','rb') as f:
text = extract_text(open('report.pdf','rb'))
Utilisation de PDF déjà en mémoire
Si le PDF est déjà en mémoire, par exemple s'il est récupéré sur le Web avec la bibliothèque de requêtes, il peut être converti en flux à l'aide de la io
bibliothèque:
import io
response = requests.get(url)
text = extract_text(io.BytesIO(response.content))
Performances et fiabilité par rapport à PyPDF2
PDFminer.six fonctionne de manière plus fiable que PyPDF2 (qui échoue avec certains types de PDF), en particulier PDF version 1.7
Cependant, l'extraction de texte avec PDFminer.six est nettement plus lente que PyPDF2 d'un facteur 6.
J'ai chronométré l'extraction de texte avec timeit
un MBP de 15 "(2018), en chronométrant uniquement la fonction d'extraction (pas d'ouverture de fichier, etc.) avec un PDF de 10 pages et j'ai obtenu les résultats suivants:
PDFminer.six: 2.88 sec
PyPDF2: 0.45 sec
pdfminer.six a également une empreinte énorme, nécessitant pycryptodome qui a besoin de GCC et d'autres éléments installés poussant une image docker d'installation minimale sur Alpine Linux de 80 Mo à 350 Mo. PyPDF2 n'a pas d'impact notable sur le stockage.