Я пытаюсь извлечь текст, включенный в этот файл PDF, используя Python
.
Я использую модуль PyPDF2 , и у меня есть следующий скрипт:
import PyPDF2
pdf_file = open('sample.pdf')
read_pdf = PyPDF2.PdfFileReader(pdf_file)
number_of_pages = read_pdf.getNumPages()
page = read_pdf.getPage(0)
page_content = page.extractText()
print page_content
Когда я запускаю код, я получаю следующий вывод, который отличается от того, который включен в документ PDF:
!"#$%#$%&%$&'()*%+,-%./01'*23%4
5'%1$#26%3/%7/))/8%&)/26%8#3"%3"*%313/9#&)
%
Как извлечь текст, как в документе PDF?
pdf_file = open('sample.pdf', 'rb')
?Ответы:
Я искал простое решение для использования для Python 3.x и Windows. Там , кажется, не будет поддержки со стороны Textract , что прискорбно, но если вы ищете простое решение для окон / питон 3 оформление покупок ТИКА пакета, действительно прямо вперед для чтения PDF - файлов.
Обратите внимание, что Tika написана на Java, поэтому вам потребуется установленная среда исполнения Java
источник
Используйте textract.
Он поддерживает много типов файлов, включая PDF-файлы
источник
textract
является оберткой дляPoppler:pdftotext
(среди прочих).Посмотрите на этот код:
Выход:
Использование того же кода для чтения PDF из 201308FCR.pdf . Вывод нормальный.
Его документация объясняет, почему:
источник
После попытки textract (который, казалось, имел слишком много зависимостей) и pypdf2 (который не мог извлечь текст из pdf-файлов, с которыми я тестировал) и tika (который был слишком медленным), я в итоге использовал
pdftotext
из xpdf (как уже предлагалось в другом ответе) и только что вызвал двоичный файл из python напрямую (вам может понадобиться адаптировать путь к pdftotext):Существует pdftotext, который делает в основном то же самое, но подразумевает pdftotext в / usr / local / bin, тогда как я использую его в AWS lambda и хотел использовать его из текущего каталога.
Кстати: для использования этого в лямбда-выражении вам нужно поместить бинарный файл и зависимость
libstdc++.so
в вашу лямбда-функцию. Мне лично нужно было скомпилировать xpdf. Поскольку инструкции для этого взорвут этот ответ, я разместил их в своем личном блоге .источник
Возможно, вы захотите использовать проверенный временем xPDF и производные инструменты для извлечения текста, так как pyPDF2, похоже, по-прежнему имеет различные проблемы с извлечением текста.
Длинный ответ заключается в том, что существует множество вариантов того, как текст кодируется внутри PDF, и что для этого может потребоваться расшифровка самой строки PDF, затем может потребоваться сопоставление с CMAP, а затем, возможно, потребуется проанализировать расстояние между словами и буквами и т. Д.
В случае, если PDF поврежден (то есть отображает правильный текст, но при копировании он дает мусор), и вам действительно нужно извлечь текст, тогда вы можете рассмотреть возможность преобразования PDF в изображение (используя ImageMagik ), а затем использовать Tesseract для получения текста из изображения используя OCR.
источник
Я пробовал много конвертеров Python PDF, и мне нравится обновлять этот обзор. Тика одна из лучших. Но PyMuPDF - хорошая новость от пользователя @ehsaneha.
Я сделал код для их сравнения: https://github.com/erfelipe/PDFtextExtraction Я надеюсь помочь вам.
источник
.encode('utf-8', errors='ignore')
Приведенный ниже код является решением вопроса в Python 3 . Перед запуском кода убедитесь, что
PyPDF2
в вашей среде установлена библиотека. Если он не установлен, откройте командную строку и выполните следующую команду:Код решения:
источник
PyPDF2 в некоторых случаях игнорирует пробелы и делает текст результата беспорядочным, но я использую PyMuPDF, и я действительно рад, что вы можете использовать эту ссылку для получения дополнительной информации
источник
pip install pymupdf==1.16.16
. Используя эту конкретную версию, потому что сегодня новейшая версия (17) не работает. Я выбрал pymupdf, потому что он извлекает поля переноса текста в новой строке char\n
. Поэтому я извлекаю текст из pdf в строку с помощью pymupdf, а затем использую его,my_extracted_text.splitlines()
чтобы разбить текст на строки в списке.pdftotext самый лучший и самый простой! pdftotext также сохраняет структуру.
Я пробовал PyPDF2, PDFMiner и несколько других, но ни один из них не дал удовлетворительного результата.
источник
Collecting PDFMiner (from pdf2text)
поэтому я не понимаю этот ответ сейчас.Вы можете использовать PDFtoText https://github.com/jalan/pdftotext
PDF к тексту сохраняет отступы в текстовом формате, не имеет значения, есть ли у вас таблицы.
источник
Многостраничный pdf может быть извлечен в виде текста на одном отрезке вместо того, чтобы указывать отдельный номер страницы в качестве аргумента, используя приведенный ниже код
источник
Вот самый простой код для извлечения текста
код:
источник
Я нашел решение здесь PDFLayoutTextStripper
Это хорошо, потому что он может сохранить макет оригинального PDF .
Он написан на Java, но я добавил шлюз для поддержки Python.
Образец кода:
Пример вывода из PDFLayoutTextStripper :
Вы можете увидеть больше деталей здесь Stripper with Python
источник
У меня есть лучшая работа вокруг, чем OCR и для поддержания выравнивания страницы при извлечении текста из PDF. Должно быть полезно:
источник
codec
arg . Я исправил это, удалив его, т.е.device = TextConverter(rsrcmgr, retstr, laparams=laparams)
Для извлечения текста из PDF используйте код ниже
источник
Я добавляю код для выполнения этого: он работает нормально для меня:
источник
Вы можете скачать tika-app-xxx.jar (последнюю версию) здесь .
Затем поместите этот файл .jar в ту же папку, что и файл скрипта Python.
затем вставьте следующий код в скрипт:
Преимущество этого метода:
меньше зависимости. Отдельный файл .jar проще в управлении, чем пакет python.
мультиформатная поддержка. Позиция
source_pdf
может быть каталогом любого вида документа. (.doc, .html, .odt и т. д.)до настоящего времени. tika-app.jar всегда выпускается раньше, чем соответствующая версия пакета tika python.
стабильный. Он гораздо более стабилен и поддерживается (поддерживается Apache), чем PyPDF.
недостаток:
Jre-безголовый необходим.
источник
Если вы попробуете это в Anaconda в Windows, PyPDF2 может не обрабатывать некоторые PDF-файлы с нестандартной структурой или символами Юникода. Я рекомендую использовать следующий код, если вам нужно открыть и прочитать много файлов PDF - текст всех файлов PDF в папке с относительным путем
.//pdfs//
будет сохранен в спискеpdf_text_list
.источник
PyPDF2 работает, но результаты могут отличаться. Я вижу довольно противоречивые выводы из его результатов извлечения.
источник