Как я могу извлечь текст в том виде, в каком он есть в 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 не поддерживает извлечение текста (исходный код)
defextractText(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. """