Вопрос-Ответ

How to extract text from a PDF file?

Как извлечь текст из PDF-файла?

Я пытаюсь извлечь текст, включенный в этот PDF-файл, используя Python.

Я использую пакет PyPDF2 (версия 1.27.2), и у меня есть следующий скрипт:

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)

Когда я запускаю код, я получаю следующий вывод, который отличается от того, что включен в PDF-документ:

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

Как я могу извлечь текст в том виде, в каком он есть в PDF-документе?

Переведено автоматически
Ответ 1

Я искал простое решение для использования в python 3.x и Windows. Похоже, что у textract нет поддержки, что вызывает сожаление, но если вы ищете простое решение для Windows / python 3, воспользуйтесь пакетом tika, который действительно удобен для чтения PDF-файлов.


Tika-Python - это привязка Python к службам Apache Tika ™ REST, позволяющая изначально вызывать Tika в сообществе Python.


from tika import parser # pip install tika

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

Обратите внимание, что Tika написан на Java, поэтому вам потребуется установленная среда выполнения Java.

Ответ 2

недавно pypdf был значительно улучшен. В зависимости от данных, он на уровне или лучше, чем pdfminer.six.

pymupdf / tika / PDFium лучше, чем pypdf, но разница стала довольно небольшой - (в основном при установке новой строки). Суть в том, что они намного быстрее. Но они не на чистом Python, что может означать, что вы не сможете его выполнить. И у некоторых могут быть слишком ограничительные лицензии, так что вы не сможете его использовать.

Взгляните на бенчмарк. Этот бенчмарк в основном рассматривает тексты на английском, но также и на немецком. Он не включает:


  • Что-нибудь особенное относительно таблиц (только то, что там есть текст, не о форматировании)

  • Тест на арабском языке (RTL-языки)

  • Математические формулы.

Это означает, что если для вашего варианта использования требуются эти пункты, вы можете воспринимать качество по-другому.

Сказав это, результаты за ноябрь 2022 г.:

Качество

Скорость

pypdf

Я стал сопровождающим pypdf и PyPDF2 в 2022 году! 😁 Сообщество значительно улучшило извлечение текста в 2022 году. Попробуйте :-)

from pypdf import PdfReader

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

Пожалуйста, обратите внимание, что эти пакеты не поддерживаются:


  • PyPDF2, PyPDF3, PyPDF4

  • pdfminer (без .six)

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)

Другие библиотеки PDF


  • pikepdf не поддерживает извлечение текста (исходный код)

Ответ 3

Используйте textract.

Он поддерживает множество типов файлов, включая PDF-файлы

import textract
text = textract.process("path/to/file.extension")
Ответ 4

Посмотрите на этот код для PyPDF2<=1.26.0:

import PyPDF2
pdf_file = open('sample.pdf', 'rb')
read_pdf = PyPDF2.PdfFileReader(pdf_file)
page = read_pdf.getPage(0)
page_content = page.extractText()
print page_content.encode('utf-8')

На выходе получается:

!"#$%#$%&%$&'()*%+,-%./01'*23%4
5'%1$#26%3/%7/))/8%&)/26%8#3"
%3"*%313/9#&)
%

Использование того же кода для чтения PDF из 201308FCR.pdf
.Вывод нормальный.

Его документация объясняет, почему:

def extractText(self):
"""
Locate all text drawing commands, in the order they are provided in the
content stream, and extract the text. This works well for some PDF
files, but poorly for others, depending on the generator used. This will
be refined in the future. Do not rely on the order of text coming out of
this function, as it will change if this function is made more
sophisticated.
:return: a unicode string object.
"""

2024-01-01 19:23 python