Это работает в мае 2020 года с использованием PDFminer six на Python3.
Установка пакета
$ pip install pdfminer.six
Импорт пакета
from pdfminer.high_level import extract_text
Использование PDF-файла, сохраненного на диске
text = extract_text('report.pdf')
Или альтернативно:
with open('report.pdf','rb') as f:
text = extract_text(open('report.pdf','rb'))
Использование PDF уже в памяти
Если PDF-файл уже находится в памяти, например, если он получен из Интернета с помощью библиотеки запросов, его можно преобразовать в поток с помощью io
библиотеки:
import io
response = requests.get(url)
text = extract_text(io.BytesIO(response.content))
Производительность и надежность по сравнению с PyPDF2
PDFminer.six работает более надежно, чем PyPDF2 (который не работает с некоторыми типами PDF-файлов), в частности PDF версии 1.7.
Однако извлечение текста с помощью PDFminer.six значительно медленнее, чем PyPDF2, в 6 раз.
Я рассчитал время извлечения текста с timeit
помощью 15-дюймового MBP (2018 г.), синхронизируя только функцию извлечения (без открытия файла и т. Д.) С 10-страничным PDF-файлом и получил следующие результаты:
PDFminer.six: 2.88 sec
PyPDF2: 0.45 sec
pdfminer.six также занимает огромную площадь, требуя pycryptodome, для которого требуется установка GCC и других вещей, для чего минимальный установочный образ докера в Alpine Linux составляет от 80 МБ до 350 МБ. PyPDF2 не оказывает заметного влияния на хранилище.