Подтвердить что ты не робот

Лучший инструмент для извлечения текста из PDF в Python 3.4

Я использую Python 3.4 и вам нужно извлечь весь текст из PDF, а затем использовать его для обработки текста.

Все ответы, которые я видел, предлагают варианты для Python 2.7.

Мне нужно что-то в Python 3.4.

Бонсон

4b9b3361

Ответ 1

Вам нужно установить модуль PyPDF2 для работы с PDF файлами в Python 3.4. PyPDF2 не может извлекать изображения, диаграммы или другие носители, но он может извлекать текст и возвращать его как строку Python. Чтобы установить его, запустите pip install PyPDF2 из командной строки. Это имя модуля чувствительно к регистру, поэтому обязательно введите "y" в нижнем регистре, а все остальные символы - в верхнем регистре.

>>> import PyPDF2
>>> pdfFileObj = open('my_file.pdf','rb')     #'rb' for read binary mode
>>> pdfReader = PyPDF2.PdfFileReader(pdfFileObj)
>>> pdfReader.numPages
56
>>> pageObj = pdfReader.getPage(9)          #'9' is the page number
>>> pageObj.extractText()

последний оператор возвращает весь текст, доступный на странице 9 документа 'my_file.pdf'.

Ответ 2

pdfminer.six(https://github.com/pdfminer/pdfminer.six) также был рекомендован в другом месте и предназначен для поддержки Python 3. Хотя я не могу лично за это поручиться, поскольку он не удался во время установки MacOS. (Есть открытая проблема для этого, и это, кажется, недавняя проблема, поэтому может быть быстрое решение.)

Ответ 3

Дополняю ответ Сары. PDFMiner - довольно хороший выбор. Я использую его довольно давно, и до сих пор он довольно неплохо работает при извлечении текстового содержимого из PDF. Что я сделал, так это создал функцию, которая использует CLI-клиент из pdfminer, а затем сохраняет результат в переменную (которую я могу использовать позже где-нибудь еще). Я использую версию Python 3.6, и функция работает довольно хорошо и выполняет необходимую работу, так что, возможно, это может работать для вас:

def pdf_to_text(filepath):
    print('Getting text content for {}...'.format(filepath))
    output = subprocess.Popen(['pdf2txt.py', filepath], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    stdout, stderr = output.communicate()

    if not stderr:
        return stdout.decode('utf-8')
    else:
        raise OSError('Executing the command for {0} caused an error: {1}'.format(filepath, stderr))

Конечно, вам придется импортировать модуль подпроцесса: import subprocess