Считать текст с pdf: Преобразовать PDF в текстовый файл — Конвертируйте PDF в текстовый файл онлайн

Содержание

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

Я добавляю код для этого:
Это прекрасно работает для меня:

# This works in python 3
# required python packages
# tabula-py==1.0.0
# PyPDF2==1.26.0
# Pillow==4.0.0
# pdfminer.six==20170720

import os
import shutil
import warnings
from io import StringIO

import requests
import tabula
from PIL import Image
from PyPDF2 import PdfFileWriter, PdfFileReader
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfpage import PDFPage

warnings.filterwarnings("ignore")


def download_file(url):
    local_filename = url.split('/')[-1]
    local_filename = local_filename.replace("%20", "_")
    r = requests.get(url, stream=True)
    print(r)
    with open(local_filename, 'wb') as f:
        shutil.copyfileobj(r.raw, f)

    return local_filename


class PDFExtractor():
    def __init__(self, url):
        self.url = url

    # Downloading File in local
    def break_pdf(self, filename, start_page=-1, end_page=-1):
        pdf_reader = PdfFileReader(open(filename, "rb"))
        # Reading each pdf one by one
        total_pages = pdf_reader.numPages
        if start_page == -1:
            start_page = 0
        elif start_page < 1 or start_page > total_pages:
            return "Start Page Selection Is Wrong"
        else:
            start_page = start_page - 1

        if end_page == -1:
            end_page = total_pages
        elif end_page < 1 or end_page > total_pages - 1:
            return "End Page Selection Is Wrong"
        else:
            end_page = end_page

        for i in range(start_page, end_page):
            output = PdfFileWriter()
            output.addPage(pdf_reader.getPage(i))
            with open(str(i + 1) + "_" + filename, "wb") as outputStream:
                output.write(outputStream)

    def extract_text_algo_1(self, file):
        pdf_reader = PdfFileReader(open(file, 'rb'))
        # creating a page object
        pageObj = pdf_reader.getPage(0)

        # extracting extract_text from page
        text = pageObj.extractText()
        text = text.replace("\n", "").replace("\t", "")
        return text

    def extract_text_algo_2(self, file):
        pdfResourceManager = PDFResourceManager()
        retstr = StringIO()
        la_params = LAParams()
        device = TextConverter(pdfResourceManager, retstr, codec='utf-8', laparams=la_params)
        fp = open(file, 'rb')
        interpreter = PDFPageInterpreter(pdfResourceManager, device)
        password = ""
        max_pages = 0
        caching = True
        page_num = set()

        for page in PDFPage.get_pages(fp, page_num, maxpages=max_pages, password=password, caching=caching,
                                      check_extractable=True):
            interpreter.process_page(page)

        text = retstr.getvalue()
        text = text.replace("\t", "").replace("\n", "")

        fp.close()
        device.close()
        retstr.close()
        return text

    def extract_text(self, file):
        text1 = self.extract_text_algo_1(file)
        text2 = self.extract_text_algo_2(file)

        if len(text2) > len(str(text1)):
            return text2
        else:
            return text1

    def extarct_table(self, file):

        # Read pdf into DataFrame
        try:
            df = tabula.read_pdf(file, output_format="csv")
        except:
            print("Error Reading Table")
            return

        print("\nPrinting Table Content: \n", df)
        print("\nDone Printing Table Content\n")

    def tiff_header_for_CCITT(self, width, height, img_size, CCITT_group=4):
        tiff_header_struct = '<' + '2s' + 'h' + 'l' + 'h' + 'hhll' * 8 + 'h'
        return struct.pack(tiff_header_struct,
                           b'II',  # Byte order indication: Little indian
                           42,  # Version number (always 42)
                           8,  # Offset to first IFD
                           8,  # Number of tags in IFD
                           256, 4, 1, width,  # ImageWidth, LONG, 1, width
                           257, 4, 1, height,  # ImageLength, LONG, 1, lenght
                           258, 3, 1, 1,  # BitsPerSample, SHORT, 1, 1
                           259, 3, 1, CCITT_group,  # Compression, SHORT, 1, 4 = CCITT Group 4 fax encoding
                           262, 3, 1, 0,  # Threshholding, SHORT, 1, 0 = WhiteIsZero
                           273, 4, 1, struct.calcsize(tiff_header_struct),  # StripOffsets, LONG, 1, len of header
                           278, 4, 1, height,  # RowsPerStrip, LONG, 1, lenght
                           279, 4, 1, img_size,  # StripByteCounts, LONG, 1, size of extract_image
                           0  # last IFD
                           )

    def extract_image(self, filename):
        number = 1
        pdf_reader = PdfFileReader(open(filename, 'rb'))

        for i in range(0, pdf_reader.numPages):

            page = pdf_reader.getPage(i)

            try:
                xObject = page['/Resources']['/XObject'].getObject()
            except:
                print("No XObject Found")
                return

            for obj in xObject:

                try:

                    if xObject[obj]['/Subtype'] == '/Image':
                        size = (xObject[obj]['/Width'], xObject[obj]['/Height'])
                        data = xObject[obj]._data
                        if xObject[obj]['/ColorSpace'] == '/DeviceRGB':
                            mode = "RGB"
                        else:
                            mode = "P"

                        image_name = filename.split(".")[0] + str(number)

                        print(xObject[obj]['/Filter'])

                        if xObject[obj]['/Filter'] == '/FlateDecode':
                            data = xObject[obj].getData()
                            img = Image.frombytes(mode, size, data)
                            img.save(image_name + "_Flate.png")
                            # save_to_s3(imagename + "_Flate.png")
                            print("Image_Saved")

                            number += 1
                        elif xObject[obj]['/Filter'] == '/DCTDecode':
                            img = open(image_name + "_DCT.jpg", "wb")
                            img.write(data)
                            # save_to_s3(imagename + "_DCT.jpg")
                            img.close()
                            number += 1
                        elif xObject[obj]['/Filter'] == '/JPXDecode':
                            img = open(image_name + "_JPX.jp2", "wb")
                            img.write(data)
                            # save_to_s3(imagename + "_JPX.jp2")
                            img.close()
                            number += 1
                        elif xObject[obj]['/Filter'] == '/CCITTFaxDecode':
                            if xObject[obj]['/DecodeParms']['/K'] == -1:
                                CCITT_group = 4
                            else:
                                CCITT_group = 3
                            width = xObject[obj]['/Width']
                            height = xObject[obj]['/Height']
                            data = xObject[obj]._data  # sorry, getData() does not work for CCITTFaxDecode
                            img_size = len(data)
                            tiff_header = self.tiff_header_for_CCITT(width, height, img_size, CCITT_group)
                            img_name = image_name + '_CCITT.tiff'
                            with open(img_name, 'wb') as img_file:
                                img_file.write(tiff_header + data)

                            # save_to_s3(img_name)
                            number += 1
                except:
                    continue

        return number

    def read_pages(self, start_page=-1, end_page=-1):

        # Downloading file locally
        downloaded_file = download_file(self.url)
        print(downloaded_file)

        # breaking PDF into number of pages in diff pdf files
        self.break_pdf(downloaded_file, start_page, end_page)

        # creating a pdf reader object
        pdf_reader = PdfFileReader(open(downloaded_file, 'rb'))

        # Reading each pdf one by one
        total_pages = pdf_reader.numPages

        if start_page == -1:
            start_page = 0
        elif start_page < 1 or start_page > total_pages:
            return "Start Page Selection Is Wrong"
        else:
            start_page = start_page - 1

        if end_page == -1:
            end_page = total_pages
        elif end_page < 1 or end_page > total_pages - 1:
            return "End Page Selection Is Wrong"
        else:
            end_page = end_page

        for i in range(start_page, end_page):
            # creating a page based filename
            file = str(i + 1) + "_" + downloaded_file

            print("\nStarting to Read Page: ", i + 1, "\n -----------===-------------")

            file_text = self.extract_text(file)
            print(file_text)
            self.extract_image(file)

            self.extarct_table(file)
            os.remove(file)
            print("Stopped Reading Page: ", i + 1, "\n -----------===-------------")

        os.remove(downloaded_file)


# I have tested on these 3 pdf files
# url = "http://s3.amazonaws.com/NLP_Project/Original_Documents/Healthcare-January-2017.pdf"
url = "http://s3.amazonaws.com/NLP_Project/Original_Documents/Sample_Test.pdf"
# url = "http://s3.amazonaws.com/NLP_Project/Original_Documents/Sazerac_FS_2017_06_30%20Annual.pdf"
# creating the instance of class
pdf_extractor = PDFExtractor(url)

# Getting desired data out
pdf_extractor.read_pages(15, 23)

Как бесплатно конвертировать рукописный текст в печатный-2 Самых простых способа

Существует ли программа для быстрого и эффективного преобразования рукописного текста в печатный (обновлено 2021)? Конечно: PDFelement позволяет конвертировать рукописи в печатный текст без каких-либо проблем, характерных для других программ. Так что если у вас есть PDFelement, вам не о чем беспокоиться. С помощью этой программы вы сможете сканировать рукописи и превращать их в текст, а также выполнять много других задач, которые существенно упростят процесс вашей работы с PDF-файлами.

Конвертирование рукописного текста в печатный с помощью PDFelement

Шаг 1. Загрузка PDF-документа

Для открытия файла перетащите PDF с рукописью в интерфейс программы. Это один из самых простых способов открыть файл.

Шаг 2. Включение функции распознавания текста

Как правило, рукописные документы обрабатываются в виде отсканированных файлов. После открытия отсканированного PDF-файла на экране появится уведомление с предложением выполнить распознавание текста. Нажмите кнопку «Иструмент»> «OCR», чтобы открыть диалоговое окно распознавания. Выберите режим «Редактируемый текст» и нажмите кнопку «Изменить язык», чтобы выбрать язык рукописного содержимого для выполнения распознавания текста.

Шаг 3. Конвертирование рукописного текста в печатный

После выполнения распознавания файл станет редактируемым. Таким образом, вы можете нажать «Конвертировать»> «В текст» для того, чтобы преобразовать файл на основе рукописного текста в файл с печатным текстом. При необходимости перед преобразованием вы также можете нажать кнопку «Редактировать», чтобы отредактировать содержимое вашего файла. Чтобы узнать больше о том, как редактировать PDF, нажмите здесь.

PDFelement — одна из лучших программ, делающих работу с PDF простой и безопасной. Приложение делает преобразование отсканированной рукописи очень простым процессом. Распознавание рукописей и превращение их в печатный текст — еще одна важная функция, реализованная в PDFelement. Работая в этой программе, вы можете быть уверены в отличном результате. Программа PDFelement отличается простотой использования и является одним из лучших способов выполнения различных задач. PDFelement оснащен множеством функций — от самых простых до продвинутых — которые позволяют существенно облегчить вашу жизнь.

Важно: Рукопись, которую вы собираетесь преобразовать в печатный текст, должна быть написана печатными буквами. Даже Adobe Acrobat не может преобразовывать рукописи в редактируемый текст. Если вам нужно преобразовать письменные буквы, попробуйте программное обеспечение ICR — Intelligent Character Recognition.

Вам также может понравиться:  Как конвертировать PNG в Word >>


Сканирование рукописного текста в печатный

Преобразование рукописных заметок в текст выглядит очень впечатляюще. Вы можете использовать эту программу, высоко оцененную пользователями со всего мира, для преобразования рукописей в печатный текст. PDFelement делает сложные процессы, связанные с PDF, простыми, надежными и безопасными. Лучшая часть PDFelement заключается в том, что данная программа не требует подключения к интернету для работы в отличие от других программ.

Шаг 1. Подключение сканера

После запуска PDFelement нажмите кнопку «Иструмент» на вкладке «OCR». Затем выберите сканер для подключения. Вы также можете выбрать необходимые настройки и нажать «Сканировать».

Шаг 2. Сканирование рукописного текста в печатный

Отсканированный PDF-файл будет открыт в PDFelement после завершения сканирования. Если в шаге 2 вы выбрали опцию «Распознать текст (OCR)», то текст созданного PDF-файле уже будет доступен для редактирования. Затем вы можете преобразовать файл в текстовый файл с помощью кнопки «В текст» на вкладке «Конвертирование». При необходимости перед преобразованием вы также можете нажать кнопку «Редактировать», чтобы отредактировать содержимое вашего файла. Чтобы узнать больше о том, как редактировать PDF, нажмите здесь.


Лучшая программа для конвертирования рукописного текста в печатный

PDFelement — несомненно, лучшая программа, которую можно использовать для преодоления проблем, возникающих при работе с PDF в других программах. С PDFelement обработка PDF перестает быть сложной задачей. PDFelement гарантирует потрясающие результаты работы. Это одна из лучших программ, представленных на рынке. PDFelement создан командой профессионалов, которые регулярно обновляют программу, поэтому работая в ней, вы можете быть уверены в отличном результате.

PDFelement — это программа, которая способна изменить ваше представление о работе с PDF-файлами. Загрузите программу, чтобы убедиться, что здесь отсутствуют все те сложности, которые возникают при использовании некачественных программ. Стоит однажды попробовать PDFelement, и она станет одной из ваших любимых программ. В случае возникновения каких-либо сложностей вы в любой момент можете связаться с командой разработчиков. Техническая поддержка 24/7 позволяет справиться с ними без труда. Все функции PDFelement доступны даже при загрузке бесплатной версии.

PDFelement обладает интуитивно понятным интерфейсом, поэтому подходит даже для новичков. В программу встроены сотни полезных функций для обработки PDF-файлов. PDFelement позволяет с легкостью открывать даже зашифрованные PDF-файлы. Вы также можете защитить свои файлы, чтобы они не были изменены или испорчены в результате несанкционированного доступа. С PDFelement ваши PDF-файлы всегда в безопасности. Сложно оставаться равнодушным к этой программе — она действительно потрясающая.

  • С помощью этой программы вы можете решать самые распространенные задачи. Среди них удобное открытие, сохранение и печать PDF-файлов.
  • Программу также можно использовать для работы с графическими элементами PDF-файлов: с ее помощью вы можете удалять, перемещать и поворачивать их.
  • Функция распознавания текста в данной программе не имеет аналогов по своему уровню. С ее помощью вы гарантированно сможете преобразовать изображения в редактируемый текст.
  • Данная программа будет особенно полезна для корпоративных пользователей. Приложение позволяет добавлять номера и элементы страниц, включая сквозную нумерацию.

Как отредактировать PDF на Mac и распознать текст на изображении

Вскоре после того, как я купил свой первый Mac, встал вопрос о приложении для редактирования PDF. Возможность открывать такие файлы для чтения с помощью встроенной утилиты «Просмотр» была приятным сюрпризом, но когда нужно было отредактировать текст, изображение или добавить подпись, приходилось искать сторонние решения. Apple вроде могла бы добавить мощный редактор PDF в macOS, но, увы, его там нет — и, скорее всего, появится он не раньше, чем приложение «Калькулятор» на iPad.

Годных редакторов PDF для Mac не так много

На ум сразу приходит решение от Adobe, и действительно оно весьма неплохое, но после пробного периода встает вопрос об оформлении подписки. А она стоит совсем недешево. Но скачивать какие-то непонятные программы тоже не хочется, поэтому оптимальный выход — найти альтернативу в Mac App Store. Все приложения, которые туда попадают, проходят тщательный отбор модераторами, так что в их качестве можно быть уверенным.

В итоге выбор остановился на PDFelement 7. Это приложение выполняет все задачи, которые требуются от редактора PDF: позволяет изменять текст и изображения, добавлять аннотации и водяные знаки, объединять несколько PDF-файлов в один и даже извлекать данные из PDF, который сделаны в виде изображения (как большинство сканов, например).

Интерфейс приложения напоминает продукты Microsoft Office, но основные элементы управления размещены слева и справа. Среди них быстрый доступ к редактированию текста, изображений, ссылок, форм и другим инструментам. Справа можно посмотреть оставленные закладки и, например, комментарии других пользователей.

Минималистичный интерфейс, похожий на Microsoft Word

Разобраться в приложении можно за несколько секунд, все довольно интуитивно

После недавнего обновления редактировать PDF стало еще удобнее — за пару кликов выделяем цветом интересующий текст, создаем пометки в виде всплывающего или встроенного текста, добавляем аннотации в виде геометрических фигур, линий или стрелок. Либо же вносим изменения в сам текст документа, воспользовавшись клавиатурой. Приложение также позволяет добавлять колонтитулы, номера страниц, водяные знаки и другие элементы оформления.

А вот это прям круто — распознавание картинок в любом PDF

Есть совместное редактирование, так что аннотации увидят все ваши коллеги с доступом к документу

Готовый файл можно экспортировать в один из популярных форматов (не только PDF, но и MS Office, текстовые документы или графические файлы).

Помимо этого, приложение умеет конвертировать файлы в PDF и обратно, создавать PDF из отсканированных изображений, распознавать текст для последующего редактирования. Например, если у вас отсканированная таблица в PDF, вы хотите ее немного подкорректировать и распечатать. Заходите в «Инструменты» и выбираете «Оптическое распознавания текста». И на выходе получаете документ, полностью готовый для редактирования.

Оптическое распознавание текста позволяет перевести любой скан в формат для редактирования

Позаботились разработчики и о конфиденциальности. Для обеспечения дополнительной защиты вы можете внести необходимые настройки доступа. Например, вы можете сами определять границы свободы для пользователей, у которых на компьютере окажется ваш файл, и запретить им редактировать или даже просматривать его при отсутствии необходимого пароля. Все это в дополнение к возможности оставить водяной знак. Инструменты защиты выделены в отдельное меню для удобства.

Защитить документ водяным знаком? Нет ничего проще

В специальном меню доступны опции для защиты и объединения PDF

Кстати, помимо настольной версии у PDFelement имеется и версия для iPhone и iPad, в которой тоже можно аннотировать PDF-документы, хотя и не поддерживается оптическое распознавание текста.

Чем удобно еще такое приложение, как PDFelement 7, так это гибкой системой подписок. Если вам нужны только основные функции, можно оформить стандартную подписку, а для доступа к профессиональным возможностям вроде распознавания текста предусмотрена профессиональная подписка. Но даже в простой подписке вы сможете добавлять аннотации и пометки к документам, объединять файлы в PDF, а также перемещать, удалять и добавлять страницы.  Тем же, кто желает максимально близко подружиться с форматом PDF, лучше оформить профессиональную подписку. Поскольку приложение доступно в Mac App Store, есть различные варианты доступа к программе — от подписки на 1, 3 или 12 месяцев до бессрочной лицензии. А если вы не уверены в покупке, вы всегда можете воспользоваться демо-версией, доступной по ссылке ниже.

Название: PDFelement 7
Издатель/разработчик: Wondershare
Цена: Бесплатно / Подписка
Совместимость: Windows, Mac
Ссылка: Установить

ТОП-4 программ для OCR распознавания рукописного текста


Оптическое распознавание символов (англ. Optical Character Recognition – OCR) это новейший метод механического перевода, который преобразует изображения рукописного текста в редактируемый текст на вашем компьютере. Например, он может сделать обычный PDF с отсканированного файла с помощью OCR или PDF на основе изображения, или преобразует рукописный текст в печатный. Технология была разработана в 1933 году, и с каждым годом развивалась. В настоящее время инструменты OCR способны выполнять огромную работу в преобразовании газет, писем, книг и любых других печатных или рукописных материалов в компьютерные редактируемые тексты.


Технология распознавания OCR рукописных текстов в настоящее время используется в больших масштабах, при этом уровень точности транскрипции растет день ото дня, и она уже близка к совершенству. В настоящее время, вы можете просто взять рецепт от врача и использовать технологию OCR, чтобы расшифровать его. Это невероятно!

Скачать бесплатно
Скачать бесплатно


Часть 1. Рекомендуемые программы для OCR распознавания рукописных текстов


Поиск лучших программ по OCR распознаванию рукописного текста может стать реальной проблемой, тем более, с тех пор как в Интернете появилось множество таких инструментов. Не беспокойтесь! Мы проанализировали рынок за вас, и выделили 3 лучших инструмента по OCR распознаванию рукописного ввода:


#1. PDFelement Pro


PDFelement ProPDFelement Pro- идеальный инструмент для OCR распознавания PDF-файлов. Он может автоматически распознавать отсканированные файлы PDF и делать их редактируемыми с помощью встроенных инструментов редактирования. Кроме этого, он поддерживает несколько языков OCR. Вы можете легко редактировать ваши PDF-тексты, изображения, ссылки и другие элементы. Также у вас есть возможность конвертировать PDF-файлы в другие форматы.


Основные функции данной PDF OCR программы:


  • Расширенная функция OCR позволяет легко конвертировать и редактировать отсканированные PDF-файлы.

  • Редактирование текстов PDF, изображений и ссылок – такое же простое, как и внесение изменений в Word.

  • С легкостью добавляйте подпись, пароль, водяные знаки, знаки, нарисованные от руки в PDF-файлы.

  • Размещайте комментарии и примечание, где вам необходимо.

  • Вы также можете просто создавать PDF из множества других форматов.

  • Кроме этого, у вас есть возможность конвертировать PDF в такие форматы, как Excel, MS Word и другие.


#2. OCR Desktop


Это OCR приложение для настольного компьютера включает в себя искусственный интеллект и нейронные сети для улучшения качества работы. Конвертер курсивного письма PDF в текст обучали более, чем четырём миллионам вариантов шрифтов, так что вы можете быть уверены, преобразованный текст будет точным насколько это вообще возможно. Он также владеет новейшей технологией OCR для решения любой задачи в распознавании почерка. А что, если мы добавим, что приложение является бесплатным для личного использования? Тем не менее, в нем есть реклама, но если вы хотите избавиться от нее, то необходимо получить зарегистрированную версию.



#3. SimpleOCR


SimpleOCR – одна из самых популярных бесплатных программ OCR доступных в сети. Она довольно проста, но в ее арсенале есть все основные функции сканирования и конвертации, которые важны при работе с OCR распознаванием рукописных текстов. Однако если вы хотите расширенные возможности, то тогда вам необходимо воспользоваться платной версией.



#4. TopOCR


Создатели TopOCR говорят, что они создали наиболее мощную систему распознавания, на основе нейронной сети, которая доступна на рынке, а также обещают пользователям лучшие результаты OCR распознавания данных, сделанных с помощью цифровой камеры. Поэтому, если у вас есть письмо, которое вы хотите оцифровать, сфотографируйте его и позвольте TopOCR выполнить свою работу. К сожалению, приложение было бесплатным некоторое время назад, но сегодня вам придется купить его, чтобы использовать. Но разработчики действительно используют сложные алгоритмы обработки изображений, чтобы гарантировать отличный результат!



Часть 2. Советы по распознаванию рукописного текста с помощью OCR


Применение OCR технологии:Технология OCR широко используется во многих сферах: от юристов и учителей до менеджеров и библиотекарей, любой, кто пишет во время своей работы или имеет дело с рукописями, письмами или подобными документами, считает эту технологию невероятной. Вы можете оцифровать любой рукописный документ быстро и просто, превратить его в редактируемый текст, с которым вы можете работать на вашем компьютере.


Советы: Чтобы улучшить использование OCR распознания рукописного текста, убедитесь, что ваши документы написаны четким почерком и чистые, то есть без помарок, а также используйте мощный сканер. Но главное — выберите профессиональную программу распознавания рукописного текста, которая может гарантировать точность редактируемого текста. Если вы решили использовать инструмент OCR на своем компьютере, вам просто нужно выбрать надежное программное обеспечение, доступное в интернете. Вы также можете попробовать использовать онлайн инструменты, но имейте в виду, что они, возможно, имеют довольно ограниченные функции.

Экспортируем данные из PDF при помощи Python

Существует много случаев, когда вам нужно извлечь данные из PDF и экспортировать их в другой формат при помощи Python. К сожалению, на сегодняшний день доступно не так уж много пакетов Python, которые выполняют извлечение лучшим образом. В данной статье мы рассмотрим различные пакеты, которые вы можете использовать для извлечения текста. Мы также научимся извлекать изображения из PDF. Так как в Python нет конкретного решения для этих задач, вам нужно уметь использовать эту информацию. После извлечения необходимых данных, мы рассмотрим, как мы можем взять эти данные и извлечь её в другом формате.

Есть вопросы по Python?

На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!

Telegram Чат & Канал

Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!

Паблик VK

Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!

Начнем с того, как извлекать текст!

Извлечение Текста с PDFMiner

Наверное, самым известным является пакет PDFMiner. Данный пакет существует, начиная с версии Python 2.4. Его изначальная задача заключалась в извлечение текста из PDF. В целом, PDFMiner может указать вам точное расположение текста на странице, а также родительскую информацию о шрифтах. Для версий Python 2.4 – 2.7, вы можете ссылаться на следующие сайты с дополнительной информацией о PDFMiner:

PDFMiner не совместим с Python 3. К счастью, существует вилка для PDFMiner под названием PDFMiner.six, которая работает аналогичным образом. Вы можете найти её здесь: https://github.com/pdfminer/pdfminer.six

Инструкции по установке PDFMiner как минимум можно назвать устаревшими. Вы можете использовать pip для проведения установки:

python -m pip install pdfminer

python -m pip install pdfminer

Если вам нужно установить PDFMiner в Python 3 (что вы, скорее всего, и пытаетесь сделать), то вам нужно провести установку следующим образом:

python -m pip install pdfminer.six

python -m pip install pdfminer.six

Документация PDFMiner достаточно скудная. По большей части вам понадобится гугл и StackOverflow, чтобы понять, как использовать PDFMiner эффективнее в случаях, не описанных в данной статье.

Извлекаем весь текст

Возможно, вам нужно будет извлечь весь текст из PDF. Пакет PDFMiner предоставляет несколько разных методов, которые позволяют это сделать. Мы рассмотрим несколько программных методов для начала. Попробуем считать весь текст из формы W9 для внутренних доходов. Копию вы можете найти здесь: https://www.irs.gov/pub/irs-pdf/fw9.pdf

После удачного сохранения PDF файла, мы можем взглянуть на код:

import io

from pdfminer.converter import TextConverter
from pdfminer.pdfinterp import PDFPageInterpreter
from pdfminer.pdfinterp import PDFResourceManager
from pdfminer.pdfpage import PDFPage

def extract_text_from_pdf(pdf_path):
resource_manager = PDFResourceManager()
fake_file_handle = io.StringIO()
converter = TextConverter(resource_manager, fake_file_handle)
page_interpreter = PDFPageInterpreter(resource_manager, converter)

with open(pdf_path, ‘rb’) as fh:
for page in PDFPage.get_pages(fh,
caching=True,
check_extractable=True):
page_interpreter.process_page(page)

text = fake_file_handle.getvalue()

# close open handles
converter.close()
fake_file_handle.close()

if text:
return text

if __name__ == ‘__main__’:
print(extract_text_from_pdf(‘w9.pdf’))

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

import io

from pdfminer.converter import TextConverter

from pdfminer.pdfinterp import PDFPageInterpreter

from pdfminer.pdfinterp import PDFResourceManager

from pdfminer.pdfpage import PDFPage

def extract_text_from_pdf(pdf_path):

    resource_manager = PDFResourceManager()

    fake_file_handle = io.StringIO()

    converter = TextConverter(resource_manager, fake_file_handle)

    page_interpreter = PDFPageInterpreter(resource_manager, converter)

    with open(pdf_path, ‘rb’) as fh:

        for page in PDFPage.get_pages(fh,

                                      caching=True,

                                      check_extractable=True):

            page_interpreter.process_page(page)

        text = fake_file_handle.getvalue()

    # close open handles

    converter.close()

    fake_file_handle.close()

    if text:

        return text

if __name__ == ‘__main__’:

    print(extract_text_from_pdf(‘w9.pdf’))

PDFMiner имеет тенденцию быть через чур подробным в тех или иных случаях, если вы работаете с ним напрямую. Здесь мы импортируем фрагменты из различных частей PDFMiner. Так как для этих классов нет документации, как и docstrings, углубляться в то, чем они являются, мы в этой статьей не будем. Вы можете ознакомиться с исходным кодом лично, если вам действительно любопытно. Однако, я думаю мы можем следовать примеру кода.

Первое, что мы делаем, это создаем экземпляр ресурсного менеджера. Далее, мы создаем файловый объект через модуль io в Python. Если вы работаете в Python 2, то вам может понадобиться модуль StringIO. Наш следующий шаг – создание конвертера. В данном случае, мы выберем TextConverter, однако вы можете также использовать HTMLConverter или XMLConverter, если захотите. Наконец, мы создаем объект интерпретаторв PDF, который использует наш диспетчер ресурсов, объекты конвертера и извлечет текст.

Последний шаг, это открыть PDF и ввести цикл через каждую страницу. В конце мы захватим весь текст, закроем несколько обработчиков и выведем текст в stdout.

Извлечение текста постранично

Честно говоря, брать весь текст из многостраничного документа далеко не всегда оказывается полезным. Как правило, вам может понадобиться работать с отдельными фрагментами документа. Давайте перепишем код таким образом, чтобы он извлекал текст постранично. Это позволит нам проверить текст (страница за раз):

# miner_text_generator.py

import io

from pdfminer.converter import TextConverter
from pdfminer.pdfinterp import PDFPageInterpreter
from pdfminer.pdfinterp import PDFResourceManager
from pdfminer.pdfpage import PDFPage

def extract_text_by_page(pdf_path):
with open(pdf_path, ‘rb’) as fh:
for page in PDFPage.get_pages(fh,
caching=True,
check_extractable=True):
resource_manager = PDFResourceManager()
fake_file_handle = io.StringIO()
converter = TextConverter(resource_manager, fake_file_handle)
page_interpreter = PDFPageInterpreter(resource_manager, converter)
page_interpreter.process_page(page)

text = fake_file_handle.getvalue()
yield text

# close open handles
converter.close()
fake_file_handle.close()

def extract_text(pdf_path):
for page in extract_text_by_page(pdf_path):
print(page)
print()

if __name__ == ‘__main__’:
print(extract_text(‘w9.pdf’))

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

# miner_text_generator.py

import io

from pdfminer.converter import TextConverter

from pdfminer.pdfinterp import PDFPageInterpreter

from pdfminer.pdfinterp import PDFResourceManager

from pdfminer.pdfpage import PDFPage

def extract_text_by_page(pdf_path):

    with open(pdf_path, ‘rb’) as fh:

        for page in PDFPage.get_pages(fh,

                                      caching=True,

                                      check_extractable=True):

            resource_manager = PDFResourceManager()

            fake_file_handle = io.StringIO()

            converter = TextConverter(resource_manager, fake_file_handle)

            page_interpreter = PDFPageInterpreter(resource_manager, converter)

            page_interpreter.process_page(page)

            text = fake_file_handle.getvalue()

            yield text

            # close open handles

            converter.close()

            fake_file_handle.close()

def extract_text(pdf_path):

    for page in extract_text_by_page(pdf_path):

        print(page)

        print()

if __name__ == ‘__main__’:

    print(extract_text(‘w9.pdf’))

В данном примере мы создали функцию генератора, который собирает текст с каждой страницы. Функция extract_text выводит текст каждой страницы. Здесь мы можем добавить немного логики синтаксического анализа для выполнения парсинга того, что нам нужно. Или мы можем просто сохранить текст (или HTML или XML) в качестве индивидуальных файлов для парсинга в будущем.

Обратите внимание на то, что текст может быть не в том порядке, который вы ожидаете. Так что вам определенно нужно выбрать лучший путь для парсинга нужного вам текста.

Хороший момент в работе с PDFMiner: вы можете сразу экспортировать PDF в формате текста, HTML или XML.

Вы также можете использовать инструменты командной строки PDFMiner, pdf2txt.py и dumppdf.py для проведения экспорта, если не хотите разбирать PDFMiner лично. Согласно с исходным кодом pdf2txt.py (https://github.com/euske/pdfminer/blob/master/tools/pdf2txt.py), его можно использовать для экспорта PDF в сплошной текст, html или xml.

Экспорт текста через pdf2txt.py

Инструмент командной строки pdf2txt.py, который идет вместе с PDFMiner может извлекать текст из файла PDF и выводить его на stdout по умолчанию. Он не будет распознавать текст из изображений, а PDFMiner не поддерживает оптическое распознавание символов. Давайте попробуем использовать простейший метод его использования, суть которого заключается в простой передаче пути к нашему PDF файлу. Мы используем наш w9.pdf Открываем терминал и ищем место, где вы сохранили этот файл, или обновляем указанную ниже команду, для наводки на этот файл:

Если вы запустите это команду, она выведет весь текст в stdout. Вы также можете сделать так, чтобы pdf2txt.py записывал текст в файл в качестве текста, HTML или XML. Формат XML даст много информации о PDF файле, так как хранит в себе расположение каждой буквы в документе, а также информацию о шрифтах.

HTML не рекомендуется, так как разметка, генерируемая pdf2txt, скорее всего будет выглядеть не очень хорошо. Посмотрим, как получить выдачу в различных форматах:

pdf2txt.py -o w9.html w9.pdf
pdf2txt.py -o w9.xml w9.pdf

pdf2txt.py -o w9.html w9.pdf

pdf2txt.py -o w9.xml w9.pdf

Первая команда создаст документ HTML, в то время как вторая создаст XML. Вот скриншот того, что я получил, воспользовавшись HTML конверсией:

Как вы видите, конец выглядит не лучшим образом, но бывало и хуже. Получаемый на выходе XML очень подробный, так что я не смогу выложить его здесь. Однако, есть сниппет, который даст вам понимание того, как это выглядит:

<pages>
<page bbox=»0.000,0.000,611.976,791.968″ rotate=»0″>
<textbox bbox=»36.000,732.312,100.106,761.160″>
<textline bbox=»36.000,732.312,100.106,761.160″>
<text font=»JYMPLA+HelveticaNeueLTStd-Roman» bbox=»36.000,736.334,40.018,744.496″ size=»8.162″>F</text>
<text font=»JYMPLA+HelveticaNeueLTStd-Roman» bbox=»40.018,736.334,44.036,744.496″ size=»8.162″>o</text>
<text font=»JYMPLA+HelveticaNeueLTStd-Roman» bbox=»44.036,736.334,46.367,744.496″ size=»8.162″>r</text>
<text font=»JYMPLA+HelveticaNeueLTStd-Roman» bbox=»46.367,736.334,52.338,744.496″ size=»8.162″>m</text>
<text font=»JYMPLA+HelveticaNeueLTStd-Roman» bbox=»52.338,736.334,54.284,744.496″ size=»8.162″> </text>
<text font=»JYMPLA+HelveticaNeueLTStd-Roman» bbox=»54.284,736.334,56.230,744.496″ size=»8.162″> </text>
<text font=»JYMPLA+HelveticaNeueLTStd-Roman» bbox=»56.230,736.334,58.176,744.496″ size=»8.162″> </text
><text font=»JYMPLA+HelveticaNeueLTStd-Roman» bbox=»58.176,736.334,60.122,744.496″ size=»8.162″> </text>
<text font=»ZWOHBU+HelveticaNeueLTStd-BlkCn» bbox=»60.122,732.312,78.794,761.160″ size=»28.848″>W</text>
<text font=»ZWOHBU+HelveticaNeueLTStd-BlkCn» bbox=»78.794,732.312,87.626,761.160″ size=»28.848″>-</text>
<text font=»ZWOHBU+HelveticaNeueLTStd-BlkCn» bbox=»87.626,732.312,100.106,761.160″ size=»28.848″>9</text>
<text></text>
</textline>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

<pages>

<page bbox=»0.000,0.000,611.976,791.968″ rotate=»0″>

<textbox bbox=»36.000,732.312,100.106,761.160″>

<textline bbox=»36.000,732.312,100.106,761.160″>

<text font=»JYMPLA+HelveticaNeueLTStd-Roman» bbox=»36.000,736.334,40.018,744.496″ size=»8.162″>F</text>

<text font=»JYMPLA+HelveticaNeueLTStd-Roman» bbox=»40.018,736.334,44.036,744.496″ size=»8.162″>o</text>

<text font=»JYMPLA+HelveticaNeueLTStd-Roman» bbox=»44.036,736.334,46.367,744.496″ size=»8.162″>r</text>

<text font=»JYMPLA+HelveticaNeueLTStd-Roman» bbox=»46.367,736.334,52.338,744.496″ size=»8.162″>m</text>

<text font=»JYMPLA+HelveticaNeueLTStd-Roman» bbox=»52.338,736.334,54.284,744.496″ size=»8.162″> </text>

<text font=»JYMPLA+HelveticaNeueLTStd-Roman» bbox=»54.284,736.334,56.230,744.496″ size=»8.162″> </text>

<text font=»JYMPLA+HelveticaNeueLTStd-Roman» bbox=»56.230,736.334,58.176,744.496″ size=»8.162″> </text

><text font=»JYMPLA+HelveticaNeueLTStd-Roman» bbox=»58.176,736.334,60.122,744.496″ size=»8.162″> </text>

<text font=»ZWOHBU+HelveticaNeueLTStd-BlkCn» bbox=»60.122,732.312,78.794,761.160″ size=»28.848″>W</text>

<text font=»ZWOHBU+HelveticaNeueLTStd-BlkCn» bbox=»78.794,732.312,87.626,761.160″ size=»28.848″>-</text>

<text font=»ZWOHBU+HelveticaNeueLTStd-BlkCn» bbox=»87.626,732.312,100.106,761.160″ size=»28.848″>9</text>

<text></text>

</textline>

Извлечение текста при помощи Slate

Тим МакНамара не очень впечатлен тем, почему PDFMiner такой сложный в использовании, так что он решил создать обертку вокруг него под названием slate, благодаря которой извлечение текста из PDF файлов может быть заметно проще. К сожалению, slate не поддерживается Python 3. Если хотите его попробовать, вам может понадобиться easy_install для установки пакета дистрибутива, вроде следующего:

У меня не вышло сделать так, чтобы pip устанавливал этот пакет правильно. После того, как вы его установите, вы, тем не менее, сможете установить slate через pip:

python -m pip install slate

python -m pip install slate

Обратите внимание на то, что последней версией является 0.5.2, так что pip может потянуть её, а может и не потянуть. Если не потянул, то вы можете установить slate прямо с Github:

python -m pip install git+https://github.com/timClicks/slate

python -m pip install git+https://github.com/timClicks/slate

Теперь мы готовы к тому, чтобы написать немного кода для извлечения текста из PDF:

# slate_text_extraction.py

import slate

def extract_text_from_pdf(pdf_path):
with open(pdf_path) as fh:
document = slate.PDF(fh, password=», just_text=1)

for page in document:
print(page)

if __name__ == ‘__main__’:
extract_text_from_pdf(‘w9.pdf’)

# slate_text_extraction.py

import slate

def extract_text_from_pdf(pdf_path):

    with open(pdf_path) as fh:

        document = slate.PDF(fh, password=», just_text=1)

    for page in document:

        print(page)

if __name__ == ‘__main__’:

    extract_text_from_pdf(‘w9.pdf’)

Как мы видим, чтобы slate парсил PDF, нужно импортировать slate и затем создать экземпляр его PDF класса. Класс PDF является наследуемым классом встроенного списка Python, так что он просто возвращает список страниц текста. Вы также можете заметить, что мы можем выполнить передачу аргумента пароля, если PDF имеет пароль. В любом случае, после парсинга документа мы можем вывести текст на каждой странице.

Мне лично нравится, насколько просто использовать slate. К сожалению, толком нет документации, связанной с этим пакетом. После просмотра исходного кода становится ясно, что все, что этот пакет поддерживает – это извлечение текста.

Экспорт данных

Теперь, когда мы получили текст, с которым можно работать, мы уделим немного времени тому, чтобы понять, как экспортировать эти данные в ряд различных форматов, а именно:

Приступим!

Экспорт в XML

Формат eXtensible Markup Language (XML) – это один из самых известных форматов ввода и вывода. Он широко используется в интернете для различных целей. Как мы уже видели в этой статье, PDFMiner также поддерживает XML в качестве одного из вариантов выдачи.

Давайте создадим наш инструмент создания XML. Простой пример:

# xml_exporter.py

import os
import xml.etree.ElementTree as xml

from miner_text_generator import extract_text_by_page
from xml.dom import minidom

def export_as_xml(pdf_path, xml_path):
filename = os.path.splitext(os.path.basename(pdf_path))[0]
root = xml.Element(‘{filename}’.format(filename=filename))
pages = xml.Element(‘Pages’)
root.append(pages)

counter = 1
for page in extract_text_by_page(pdf_path):
text = xml.SubElement(pages, ‘Page_{}’.format(counter))
text.text = page[0:100]
counter += 1

tree = xml.ElementTree(root)
xml_string = xml.tostring(root, ‘utf-8′)
parsed_string = minidom.parseString(xml_string)
pretty_string = parsed_string.toprettyxml(indent=’ ‘)

with open(xml_path, ‘w’) as fh:
fh.write(pretty_string)
#tree.write(xml_path)

if __name__ == ‘__main__’:
pdf_path = ‘w9.pdf’
xml_path = ‘w9.xml’
export_as_xml(pdf_path, xml_path)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

# xml_exporter.py

import os

import xml.etree.ElementTree as xml

from miner_text_generator import extract_text_by_page

from xml.dom import minidom

def export_as_xml(pdf_path, xml_path):

    filename = os.path.splitext(os.path.basename(pdf_path))[0]

    root = xml.Element(‘{filename}’.format(filename=filename))

    pages = xml.Element(‘Pages’)

    root.append(pages)

    counter = 1

    for page in extract_text_by_page(pdf_path):

        text = xml.SubElement(pages, ‘Page_{}’.format(counter))

        text.text = page[0:100]

        counter += 1

    tree = xml.ElementTree(root)

    xml_string = xml.tostring(root, ‘utf-8’)

    parsed_string = minidom.parseString(xml_string)

    pretty_string = parsed_string.toprettyxml(indent=’  ‘)

    with open(xml_path, ‘w’) as fh:

        fh.write(pretty_string)

    #tree.write(xml_path)

if __name__ == ‘__main__’:

    pdf_path = ‘w9.pdf’

    xml_path = ‘w9.xml’

    export_as_xml(pdf_path, xml_path)

Этот скрипт будет использовать встроенные библиотеки XML: minidom и ElementTree. Мы также импортируем скрипт генератора PDFMiner, который мы используем для того, чтобы выделять текст постранично. В данном примере, мы создадим элемент высшего уровня, который является названием файла PDF. Далее, мы добавляем элемент Pages под ним. После этого, переходим к циклу for, где мы извлекаем каждую страницу PDF и сохраняем информацию, которая нам нужна. Здесь вы можете добавить специальный парсер, в котором вы можете разделить страницу на предложения или слова и парсить более интересную информацию. Например, вам могут понадобиться предложения с определенным именем, данными, указанным временем. Вы можете использовать регулярные выражения Python для поиска, или проверить наличие наследуемых строк в предложении.

Для этого примера мы просто извлечем 100 символов из каждой страницы и сохраним их в SubElement XML. Технически, следующая часть кода может быть упрощена, чтобы просто вписать XML. Однако, ElementTree ничего не делает с XML, чтобы сделать его читабельным. Это больше похоже на минимизированный javascript: просто большой блок текста.

Так что вместо того, чтобы вписывать этот блок текста в диск, мы используем minidom, чтобы облагородить XML пробелами, перед тем как сохранять. Результат должен выглядеть следующим образом:

<?xml version=»1.0″ ?>
<w9>
<Pages>
<Page_1>Form W-9(Rev. November 2017)Department of the Treasury Internal Revenue Service Request for Taxp</Page_1>
<Page_2>Form W-9 (Rev. 11-2017)Page 2 By signing the filled-out form, you: 1. Certify that the TIN you are g</Page_2>
<Page_3>Form W-9 (Rev. 11-2017)Page 3 Criminal penalty for falsifying information. Willfully falsifying cert</Page_3>
<Page_4>Form W-9 (Rev. 11-2017)Page 4 The following chart shows types of payments that may be exempt from ba</Page_4>
<Page_5>Form W-9 (Rev. 11-2017)Page 5 1. Interest, dividend, and barter exchange accounts opened before 1984</Page_5>
<Page_6>Form W-9 (Rev. 11-2017)Page 6 The IRS does not initiate contacts with taxpayers via emails. Also, th</Page_6>
</Pages>
</w9>

<?xml version=»1.0″ ?>

<w9>

  <Pages>

    <Page_1>Form    W-9(Rev. November 2017)Department of the Treasury  Internal Revenue Service Request for Taxp</Page_1>

    <Page_2>Form W-9 (Rev. 11-2017)Page 2 By signing the filled-out form, you: 1. Certify that the TIN you are g</Page_2>

    <Page_3>Form W-9 (Rev. 11-2017)Page 3 Criminal penalty for falsifying information. Willfully falsifying cert</Page_3>

    <Page_4>Form W-9 (Rev. 11-2017)Page 4 The following chart shows types of payments that may be exempt from ba</Page_4>

    <Page_5>Form W-9 (Rev. 11-2017)Page 5 1. Interest, dividend, and barter exchange accounts opened before 1984</Page_5>

    <Page_6>Form W-9 (Rev. 11-2017)Page 6 The IRS does not initiate contacts with taxpayers via emails. Also, th</Page_6>

  </Pages>

</w9>

Это делает XML чище и более читабельным. В качестве бонуса, вы также можете воспользоваться методом извлечения метадаты из PDF и добавить её в свой PDF при помощи PyPDF2.

Экспорт PDF в JSON

JavaScript Object Notation, или JSON, представляет собой простой формат обмены данными, который легко читать и писать. Python содержит модуль json в своей стандартной библиотеки, который позволяет вам программно читать и писать в JSON. Давайте посмотрим, что мы усвоили из предыдущего раздела и используем это для создания скрипта экспорта, который выдает JSON вместо XML:

# json_exporter.py

import json
import os

from miner_text_generator import extract_text_by_page

def export_as_json(pdf_path, json_path):
filename = os.path.splitext(os.path.basename(pdf_path))[0]
data = {‘Filename’: filename}
data[‘Pages’] = []

counter = 1
for page in extract_text_by_page(pdf_path):
text = page[0:100]
page = {‘Page_{}’.format(counter): text}
data[‘Pages’].append(page)
counter += 1

with open(json_path, ‘w’) as fh:
json.dump(data, fh)

if __name__ == ‘__main__’:
pdf_path = ‘w9.pdf’
json_path = ‘w9.json’
export_as_json(pdf_path, json_path)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

# json_exporter.py

import json

import os

from miner_text_generator import extract_text_by_page

def export_as_json(pdf_path, json_path):

    filename = os.path.splitext(os.path.basename(pdf_path))[0]

    data = {‘Filename’: filename}

    data[‘Pages’] = []

    counter = 1

    for page in extract_text_by_page(pdf_path):

        text = page[0:100]

        page = {‘Page_{}’.format(counter): text}

        data[‘Pages’].append(page)

        counter += 1

    with open(json_path, ‘w’) as fh:

        json.dump(data, fh)

if __name__ == ‘__main__’:

    pdf_path = ‘w9.pdf’

    json_path = ‘w9.json’

    export_as_json(pdf_path, json_path)

Здесь мы импортируем различные библиотеки, которые нам могут понадобиться, включая модуль PDFMiner. Далее, мы создаем функцию, которая принимает путь ввода PDF и путь выдачи JSON. JSON – это, фактически, словарь в Python, так что мы создаем несколько простых ключей высшего уровня: Filename и Pages. Ключ Pages сопоставляется с пустым списком. Далее, мы вводим цикл над каждой страницей PDF и извлекаем первые 100 символов каждой страницы. Далее, мы создаем словарь с номером страницы в качестве ключа и 100 символов в качестве значение и добавим в список верхнего уровня Page. Наконец, мы записываем файл при помощи команды модуля json под названием dump.

Содержимое файла должно выглядеть следующим образом:

{‘Filename’: ‘w9’,
‘Pages’: [{‘Page_1’: ‘Form W-9(Rev. November 2017)Department of the Treasury Internal Revenue Service Request for Taxp’},
{‘Page_2’: ‘Form W-9 (Rev. 11-2017)Page 2 By signing the filled-out form, you: 1. Certify that the TIN you are g’},
{‘Page_3’: ‘Form W-9 (Rev. 11-2017)Page 3 Criminal penalty for falsifying information. Willfully falsifying cert’},
{‘Page_4’: ‘Form W-9 (Rev. 11-2017)Page 4 The following chart shows types of payments that may be exempt from ba’},
{‘Page_5’: ‘Form W-9 (Rev. 11-2017)Page 5 1. Interest, dividend, and barter exchange accounts opened before 1984’},
{‘Page_6’: ‘Form W-9 (Rev. 11-2017)Page 6 The IRS does not initiate contacts with taxpayers via emails. Also, th’}]}

{‘Filename’: ‘w9’,

‘Pages’: [{‘Page_1’: ‘Form    W-9(Rev. November 2017)Department of the Treasury  Internal Revenue Service Request for Taxp’},

           {‘Page_2’: ‘Form W-9 (Rev. 11-2017)Page 2 By signing the filled-out form, you: 1. Certify that the TIN you are g’},

           {‘Page_3’: ‘Form W-9 (Rev. 11-2017)Page 3 Criminal penalty for falsifying information. Willfully falsifying cert’},

           {‘Page_4’: ‘Form W-9 (Rev. 11-2017)Page 4 The following chart shows types of payments that may be exempt from ba’},

           {‘Page_5’: ‘Form W-9 (Rev. 11-2017)Page 5 1. Interest, dividend, and barter exchange accounts opened before 1984’},

           {‘Page_6’: ‘Form W-9 (Rev. 11-2017)Page 6 The IRS does not initiate contacts with taxpayers via emails. Also, th’}]}

И снова мы получили отличную выдачу, которую легко читать. Вы можете улучшить этот пример с метадатой PDF в том числе, если захотите. Обратите внимание на то, что выдача меняется в зависимости от того, что вам нужно пропарсить в каждой странице или документе.

Давайте посмотрим, как мы можем проводить экспорт в CSV.

Экспорт PDF в CSV

CSV значит Comma Separated Values (значения, разделенные запятой). Это достаточно простой формат, который существует уже продолжительное время. Хороший момент работы с CSV, это то, что Microsoft Excel и LibreOffice могут открывать его в красивой таблице автоматически. Вы также можете открывать файлы CSV в редакторе текстов, если вы хотите увидеть исходное значение.
Python содержит встроенный модуль csv, который вы можете использовать для написания и чтения файлов CSV. Мы используем его здесь для создания CSV из текста, который мы извлекаем из PDF. Давайте посмотрим на код:

# csv_exporter.py

import csv
import os

from miner_text_generator import extract_text_by_page

def export_as_csv(pdf_path, csv_path):
filename = os.path.splitext(os.path.basename(pdf_path))[0]

counter = 1
with open(csv_path, ‘w’) as csv_file:
writer = csv.writer(csv_file)
for page in extract_text_by_page(pdf_path):
text = page[0:100]
words = text.split()
writer.writerow(words)

if __name__ == ‘__main__’:
pdf_path = ‘w9.pdf’
csv_path = ‘w9.csv’
export_as_csv(pdf_path, csv_path)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

# csv_exporter.py

import csv

import os

from miner_text_generator import extract_text_by_page

def export_as_csv(pdf_path, csv_path):

    filename = os.path.splitext(os.path.basename(pdf_path))[0]

    counter = 1

    with open(csv_path, ‘w’) as csv_file:

        writer = csv.writer(csv_file)

        for page in extract_text_by_page(pdf_path):

            text = page[0:100]

            words = text.split()

            writer.writerow(words)

if __name__ == ‘__main__’:

    pdf_path = ‘w9.pdf’

    csv_path = ‘w9.csv’

    export_as_csv(pdf_path, csv_path)

В данном примере, мы импортируем библиотеку csv. В противном случае, импорт будет таким же, как и в предыдущем примере. В нашей функции мы создаем обработчик CSV файлов при помощи пути файла CSV. Далее, мы инициализируем объект райтера CSV с этим обработчиком файла в качестве единственного аргумента. Далее, мы ставим цикл над страницами PDF как раньше. Единственная разница в том, что мы разделяем 100 символов на отдельные слова. Это позволяет нам получить данные для добавления в CSV. Если мы этого не сделаем, то каждый ряд будет содержать только один элемент, что сложно назвать файлом CSV. Наконец, мы выписываем наш список слов в файл CSV.

Мы должны получить следующий результат:

Form,W-9(Rev.,November,2017)Department,of,the,Treasury,Internal,Revenue,Service,Request,for,Taxp
Form,W-9,(Rev.,11-2017)Page,2,By,signing,the,filled-out,»form,»,you:,1.,Certify,that,the,TIN,you,are,g
Form,W-9,(Rev.,11-2017)Page,3,Criminal,penalty,for,falsifying,information.,Willfully,falsifying,cert
Form,W-9,(Rev.,11-2017)Page,4,The,following,chart,shows,types,of,payments,that,may,be,exempt,from,ba
Form,W-9,(Rev.,11-2017)Page,5,1.,»Interest,»,»dividend,»,and,barter,exchange,accounts,opened,before,1984
Form,W-9,(Rev.,11-2017)Page,6,The,IRS,does,not,initiate,contacts,with,taxpayers,via,emails.,»Also,»,th

Form,W-9(Rev.,November,2017)Department,of,the,Treasury,Internal,Revenue,Service,Request,for,Taxp

Form,W-9,(Rev.,11-2017)Page,2,By,signing,the,filled-out,»form,»,you:,1.,Certify,that,the,TIN,you,are,g

Form,W-9,(Rev.,11-2017)Page,3,Criminal,penalty,for,falsifying,information.,Willfully,falsifying,cert

Form,W-9,(Rev.,11-2017)Page,4,The,following,chart,shows,types,of,payments,that,may,be,exempt,from,ba

Form,W-9,(Rev.,11-2017)Page,5,1.,»Interest,»,»dividend,»,and,barter,exchange,accounts,opened,before,1984

Form,W-9,(Rev.,11-2017)Page,6,The,IRS,does,not,initiate,contacts,with,taxpayers,via,emails.,»Also,»,th

Мне кажется, это менее читаемо, чем в случаях с примерами JSON или XML, но все еще неплохо. Теперь мы перейдем дальше и узнаем, как извлекать изображения из PDF,

Извлечение изображений из PDF

К сожалению, не существует пакетов Python, которые выполняют извлечение изображений из PDF. Наиболее близкий проект, который я нашел – это minecart, который может делать это, но он работает только на Python 2.7. У меня не вышло его запустить при работе с примером PDF, который у меня был. Однако есть способ, который позволяет извлекать JPG из PDF. Вот пример кода:

# Извлечение jpg из pdf. Быстро и дерзко:
import sys

pdf = file(sys.argv[1], «rb»).read()

startmark = «\xff\xd8»
startfix = 0
endmark = «\xff\xd9»
endfix = 2
i = 0

njpg = 0
while True:
istream = pdf.find(«stream», i)
if istream < 0:
break
istart = pdf.find(startmark, istream, istream+20)
if istart < 0:
i = istream+20
continue
iend = pdf.find(«endstream», istart)
if iend < 0:
raise Exception(«Didn’t find end of stream!»)
iend = pdf.find(endmark, iend-20)
if iend < 0:
raise Exception(«Didn’t find end of JPG!»)

istart += startfix
iend += endfix
print(«JPG %d from %d to %d» % (njpg, istart, iend))
jpg = pdf[istart:iend]
jpgfile = file(«jpg%d.jpg» % njpg, «wb»)
jpgfile.write(jpg)
jpgfile.close()

njpg += 1
i = iend

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

# Извлечение jpg из pdf. Быстро и дерзко:

import sys

pdf = file(sys.argv[1], «rb»).read()

startmark = «\xff\xd8»

startfix = 0

endmark = «\xff\xd9»

endfix = 2

i = 0

njpg = 0

while True:

    istream = pdf.find(«stream», i)

    if istream < 0:

        break

    istart = pdf.find(startmark, istream, istream+20)

    if istart < 0:

        i = istream+20

        continue

    iend = pdf.find(«endstream», istart)

    if iend < 0:

        raise Exception(«Didn’t find end of stream!»)

    iend = pdf.find(endmark, iend-20)

    if iend < 0:

        raise Exception(«Didn’t find end of JPG!»)

    istart += startfix

    iend += endfix

    print(«JPG %d from %d to %d» % (njpg, istart, iend))

    jpg = pdf[istart:iend]

    jpgfile = file(«jpg%d.jpg» % njpg, «wb»)

    jpgfile.write(jpg)

    jpgfile.close()

    njpg += 1

    i = iend

Это также работает для тех файлов PDF, которые я использую. В StackOverflow есть вариации этого кода, некоторые из которых используют PyPDF2 различными способами. Однако в моем случае они не помогли.

Я рекомендую использовать инструмент Poppler для извлечения изображений. Poppler включает в себя инструмент под названием pdfimages, который вы можете использовать с модулем Python под названием subprocess. Вот как использовать его без Python:

pdfimages -all reportlab-sample.pdf images/prefix-jpg

pdfimages -all reportlab-sample.pdf images/prefix-jpg

Убедитесь в том, что папка с изображениями (или папку любой другой выдачи, которую вы хотите создать) уже создана, так как pdfimages не сделает это за вас.

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

# image_exporter.py

import os
import subprocess

def image_exporter(pdf_path, output_dir):
if not os.path.exists(output_dir):
os.makedirs(output_dir)

cmd = [‘pdfimages’, ‘-all’, pdf_path,
‘{}/prefix’.format(output_dir)]
subprocess.call(cmd)
print(‘Images extracted:’)
print(os.listdir(output_dir))

if __name__ == ‘__main__’:
pdf_path = ‘reportlab-sample.pdf’
image_exporter(pdf_path, output_dir=’images’)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

# image_exporter.py

import os

import subprocess

def image_exporter(pdf_path, output_dir):

    if not os.path.exists(output_dir):

        os.makedirs(output_dir)

    cmd = [‘pdfimages’, ‘-all’, pdf_path,

           ‘{}/prefix’.format(output_dir)]

    subprocess.call(cmd)

    print(‘Images extracted:’)

    print(os.listdir(output_dir))

if __name__ == ‘__main__’:

    pdf_path = ‘reportlab-sample.pdf’

    image_exporter(pdf_path, output_dir=’images’)

В этом примере мы импортировали модули subprocess и os. Если папка выдачи не существует, мы попытаемся создать её. Далее мы используем метод вызова subprocess для запуска pdfimages. Мы используем вызов, так как он будет ожидать pdfimages, пока тот закончит работу. Вы можете использовать Popen вместо этого, но это фактически запускает процесс в фоновом режиме. Наконец, мы выводим список папки выдачи для подтверждения того, что изображения были добавлены в неё.

Есть статьи, которые ссылаются на библиотеку под названием Wand, которую вы тоже можете попробовать. Это оболочка ImageMagick. Также обратите внимание на то, что существует связка Python с Poppler под названием pypoppler, однако я не нашел примеров того, что этот пакет выполняет извлечение изображений.

Подведем итоги

Мы затронули много информации в этой статье. Вы изучили несколько различных пакетов, которые могут быть использованы для извлечения текста из PDF, такие как PDFMiner или Slate. Мы также узнали, как использовать встроенные библиотеки Python для экспорта текста в XML, JSON и CSV. Наконец, мы затронули сложную проблему экспорта изображений из PDF. Так как в данный момент в Python нет хороших библиотек для этой задачи, вы можете использовать другие инструменты, такие как утилита Poppler под названием pdfimage.

Являюсь администратором нескольких порталов по обучению языков программирования Python, Golang и Kotlin. В составе небольшой команды единомышленников, мы занимаемся популяризацией языков программирования на русскоязычную аудиторию. Большая часть статей была адаптирована нами на русский язык и распространяется бесплатно.

E-mail: [email protected]

Образование
Universitatea Tehnică a Moldovei (utm.md)

  • 2014 — 2018 Технический Университет Молдовы, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
  • 2018 — 2020 Технический Университет Молдовы, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»

Как извлечь текст из PDF? [закрыто]

С сегодняшнего дня я знаю это: лучшая вещь для извлечения текста из PDF-файлов — это TET, набор инструментов для извлечения текста. . TET является частью семейства продуктов PDFlib.com.

PDFlib.com — компания Томаса Мерца. В случае, если вы не узнаете его имя: Томас Мерц является автором «Библии PostScript и PDF».

Первое воплощение TET — это библиотека . Это, вероятно, может сделать все, что хотел Budda006, включая информацию о местоположении каждого элемента на странице. Да, и он также может извлекать изображения. Он объединяет изображения, которые фрагментированы на куски.

pdflib.com также предлагает еще одно воплощение этой технологии, плагин TET для Acrobat . И третье воплощение — это PDFlib TET iFilter . Это автономный инструмент для рабочих столов пользователей. Оба они бесплатны (как в пиве) для использования в личных некоммерческих целях.

И это действительно мощно. Это лучше, чем собственное извлечение текста Adobe. Он извлек текст для меня, где другие инструменты (в том числе Adobe) выплескивают только мусор.

Я только что протестировал автономный инструмент для настольных компьютеров, и то, что они говорят на своей веб-странице, правда. У него очень хорошая командная строка. Некоторые из моих «проблемных» тестовых файлов PDF с инструментом обработаны к моему полному удовлетворению.

Эта вещь будет теперь моей рекомендацией для всех сложных и сложных требований к извлечению текста в PDF.

ТЕТ просто потрясающе. Он обнаруживает таблицы. Внутри таблиц он идентифицирует ячейки, охватывающие несколько столбцов. Он определяет строки таблицы и содержимое каждой ячейки таблицы отдельно. Он очень хорошо справляется с переносами слов: он удаляет дефисы и восстанавливает полные слова. Он поддерживает не-ASCII языки (включая CJK, арабский и иврит). При встрече с лигатурами восстанавливаются оригинальные символы …

Попробуйте.

Работа с PDF-файлами в Python: чтение и разбор 

Сегодня формат переносимых документов (PDF) относится к наиболее часто используемым форматам данных. В 1990 году структура документа PDF была определена Adobe. Идея, лежащая в основе формата PDF, заключается в том, что передаваемые данные / документы выглядят одинаково для обеих сторон, участвующих в процессе коммуникации — для создателя, автора или отправителя и получателя. PDF является преемником формата PostScript и стандартизирован как ISO 32000-2: 2017 .

Обработка PDF документов

Для Linux существуют мощные инструменты командной строки, такие как pdftk и pdfgrep. Как разработчик, вы с огромным энтузиазмом создаете свое собственное программное обеспечение, основанное на Python и использующее свободно доступные библиотеки PDF.

Эта статья — начало небольшой серии, в которой будут рассмотрены эти полезные библиотеки Python. В первой части мы сосредоточимся на манипулировании существующими PDF-файлами. Вы узнаете, как читать и извлекать содержимое (как текст, так и изображения), вращать отдельные страницы и разбивать документы на отдельные страницы. Вторая часть будет посвящена добавлению водяных знаков на основе наложений. Третья часть будет посвящена исключительно написанию / созданию PDF-файлов, а также удалению и повторному объединению отдельных страниц в новый документ.

Инструменты и библиотеки

Спектр доступных решений для связанных с Python инструментов, модулей и библиотек PDF немного сбивает с толку, и требуется время, чтобы понять, что к чему и какие проекты поддерживаются постоянно. На основании нашего исследования это те кандидаты, которые соответствуют современным требованиям:

PyPDF2 : библиотека Python для извлечения информации и содержимого документов, постраничного разделения документов, объединения документов, обрезки страниц и добавления водяных знаков. PyPDF2 поддерживает как незашифрованные, так и зашифрованные документы.

PDFMiner : полностью написан на Python и хорошо работает для Python 2.4. Для Python 3 используйте клонированный пакет PDFMiner.six . Оба пакета позволяют анализировать и преобразовывать PDF-документы. Это включает в себя поддержку PDF 1.7, а также языков CJK (китайский, японский и корейский) и различные типы шрифтов (Type1, TrueType, Type3 и CID).

PDFQuery : он описывает себя как «быструю и удобную библиотеку очистки PDF», которая реализована как оболочка для PDFMiner, lxml и pyquery . Его цель состоит в том, чтобы «надежно извлекать данные из наборов PDF-файлов, используя как можно меньше кода».

tabula-py : Это простая оболочка Python для tabula-java , которая может читать таблицы из PDF-файлов и преобразовывать их в Pandas DataFrames. Это также позволяет вам конвертировать файл PDF в файл CSV / TSV / JSON.

pdflib для Python: расширение библиотеки Poppler, которое предлагает для него привязки Python. Это позволяет вам анализировать и конвертировать PDF документы. Не следует путать его коммерческий клон с таким же именем.

PyFPDF : библиотека для создания документов PDF под Python. Портировано из библиотеки FPDF PHP, известной замены PDFlib-расширения со множеством примеров, сценариев и производных.

PDFTables : коммерческий сервис, предлагающий извлечение из таблиц в виде документа PDF. Предлагает API, позволяющий использовать PDFTables в качестве SAAS.

PyX — графический пакет Python: PyX — это пакет Python для создания файлов PostScript, PDF и SVG. Он сочетает в себе абстракцию модели чертежа PostScript с интерфейсом TeX / LaTeX. Сложные задачи, такие как создание 2D и 3D графиков в готовом для публикации качестве, построены из этих примитивов.

ReportLab : амбициозная промышленная библиотека, в основном ориентированная на точное создание PDF-документов. Доступна свободно как версия с открытым исходным кодом, так и коммерческая улучшенная версия с именем ReportLab PLUS.

PyMuPDF (он же «fitz»): привязки Python для MuPDF, который является облегченным средством просмотра PDF и XPS. Библиотека может получать доступ к файлам в форматах PDF, XPS, OpenXPS, epub, комиксах и художественных книгах, а также известна своей высокой производительностью и высоким качеством рендеринга.

pdfrw : чистый анализатор PDF на основе Python для чтения и записи PDF. Он точно воспроизводит векторные форматы без растеризации. Вместе с ReportLab он помогает повторно использовать части существующих PDF-файлов в новых PDF-файлах, созданных с помощью ReportLab.

БиблиотекаИспользуется для
PyPDF2чтение
PyMuPDFчтение
PDFlibчтение
PDFTablesчтение
Табула-ручтение
PDFMiner.sixчтение
PDFQueryчтение
pdfrwЧтение, Запись / Создание
ReportLabЗапись / Создание
дарохранительницаЗапись / Создание
PyFPDFЗапись / Создание

Ниже мы сосредоточимся на PyPDF2 и PyMuPDF и объясним, как извлечь текст и изображения самым простым способом. Чтобы понять использование PyPDF2, помогло сочетание официальной документации и множества примеров, доступных на других ресурсах. Напротив, официальная документация PyMuPDF намного понятнее и значительно быстрее при использовании библиотеки.

Извлечение текста с помощью PyPDF2

PyPDF2 может быть установлен как обычный программный пакет, так и с использованием pip3 (для Python3). Тесты здесь основаны на пакете для предстоящего выпуска Debian GNU / Linux 10 «Buster». Имя пакета Debian является python3-pypdf2.

В листинге 1 PdfFileReader сначала импортируется класс. Затем, используя этот класс, он открывает документ и извлекает информацию о документе, используя метод getDocumentInfo(), количество используемых страниц getDocumentInfo() и содержимое первой страницы.

Обратите внимание, что PyPDF2 начинает считать страницы с 0, и поэтому вызов pdf.getPage(0)извлекает первую страницу документа. В конце концов, извлеченная информация печатается в stdout.

Листинг 1: Извлечение информации и содержимого документа.

#!/usr/bin/python
from PyPDF2 import PdfFileReader

pdf_document = "example.pdf"  
with open(pdf_document, "rb") as filehandle:  
   pdf = PdfFileReader(filehandle)
   info = pdf.getDocumentInfo()
   pages = pdf.getNumPages()   print (info)
   print ("number of pages: %i" % pages)   page1 = pdf.getPage(0)
   print(page1)
   print(page1.extractText())

Рис. 1: Извлеченный текст из файла PDF с использованием PyPDF2

Как показано на рисунке 1 выше, извлеченный текст печатается на постоянной основе. Здесь нет ни абзацев, ни разделений предложений. Как указано в документации по PyPDF2, все текстовые данные возвращаются в том порядке, в котором они представлены в потоке содержимого страницы, и их использование может привести к неожиданностям. Это в основном зависит от внутренней структуры документа PDF и от того, как поток инструкций PDF был создан процессом записи PDF.

Извлечение текста с помощью PyMuPDF

PyMuPDF доступен на веб-сайте PyPi, и вы устанавливаете пакет с помощью следующей команды в терминале:

$ pip3 install PyMuPDF

Отображение информации о документе, печать количества страниц и извлечение текста из документа PDF выполняется аналогично PyPDF2 (см. Листинг 2 ). Импортируемый модуль имеет имя fitz и возвращается к предыдущему имени PyMuPDF.

Листинг 2: Извлечение содержимого из документа PDF с использованием PyMuPDF.

#!/usr/bin/python

import fitz

pdf_document = "example.pdf"  
doc = fitz.open(pdf_document):  
print ("number of pages: %i" % doc.pageCount)
  
print(doc.metadata)page1 = doc.loadPage(0)  
page1text = page1.getText("text")  
print(page1text)  

Приятной особенностью PyMuPDF является то, что он сохраняет исходную структуру документа без изменений — целые абзацы с разрывами строк сохраняются такими же, как в PDF-документе (см. Рисунок 2 ).

Рис. 2: извлеченные текстовые данные

Извлечение изображений из PDF с помощью PyMuPDF

PyMuPDF упрощает извлечение изображений из документов PDF с использованием метода getPageImageList(). Листинг 3 основан на примере из вики-страницы PyMuPDF и извлекает и сохраняет все изображения из PDF в формате PNG постранично. Если изображение имеет цветовое пространство CMYK, оно будет сначала преобразовано в RGB.

Листинг 3: Извлечение изображений.

#!/usr/bin/python

import fitz

pdf_document = fitz.open("file.pdf")  
for current_page in range(len(pdf_document)):  
   for image in pdf_document.getPageImageList(current_page):
       xref = image[0]
       pix = fitz.Pixmap(pdf_document, xref)
       if pix.n 

Запустив этот скрипт Python на 400-страничном PDF, он извлек 117 изображений менее чем за 3 секунды, что удивительно. Отдельные изображения хранятся в формате PNG. Чтобы сохранить исходный формат и размер изображения вместо преобразования в PNG, взгляните на расширенные версии сценариев в вики PyMuPDF .

Рис. 3: Извлеченные изображения

Разделение PDF-файлов на страницы с помощью PyPDF2

Для этого примера, в первую очередь необходимо импортировать классы PdfFileReader и PdfFileWriter. Затем мы открываем файл PDF, создаем объект для чтения и перебираем все страницы, используя метод объекта для чтения getNumPages.

Внутри цикла for мы создаем новый экземпляр PdfFileWriter, который еще не содержит страниц. Затем мы добавляем текущую страницу к нашему объекту записи, используя метод pdfWriter.addPage(). Этот метод принимает объект страницы, который мы получаем, используя метод PdfFileReader.getPage().

Следующим шагом является создание уникального имени файла, что мы делаем, используя исходное имя файла плюс слово «page» плюс номер страницы. Мы добавляем 1 к текущему номеру страницы, потому что PyPDF2 считает номера страниц, начиная с нуля.

Наконец, мы открываем новое имя файла в режиме (режиме wb) записи двоичного файла и используем метод write() класса pdfWriter для сохранения извлеченной страницы на диск.

Листинг 4: Разделение PDF на отдельные страницы.

#!/usr/bin/python

from PyPDF2 import PdfFileReader, PdfFileWriter

pdf_document = "example.pdf"  
pdf = PdfFileReader(pdf_document)

for page in range(pdf.getNumPages()):  
   pdf_writer = PdfFileWriter
   current_page = pdf.getPage(page)
   pdf_writer.addPage(current_page)

   outputFilename = "example-page-{}.pdf".format(page + 1)
   with open(outputFilename, "wb") as out:
       pdf_writer.write(out)

       print("created", outputFilename)

Рис. 4: Разделение PDF

Найти все страницы, содержащие текст

Этот вариант использования довольно практичен и работает аналогично pdfgrep. Используя PyMuPDF, скрипт возвращает все номера страниц, которые содержат данную строку поиска. Страницы загружаются одна за другой, и с помощью метода searchFor() обнаруживаются все вхождения строки поиска. В случае совпадения соответствующее сообщение печатается на stdout.

Листинг 5: Поиск заданного текста.

#!/usr/bin/python

import fitz

filename = "example.pdf"  
search_term = "invoice"  
pdf_document = fitz.open(filename):

for current_page in range(len(pdf_document)):  
   page = pdf_document.loadPage(current_page)
   if page.searchFor(search_term):
       print("%s found on page %i" % (search_term, current_page))
 

На рисунке 5 ниже показан результат поиска для термина «Debian GNU / Linux» в книге на 400 страниц.

Рис. 5: Поиск документа PDF

Заключение

Методы, показанные здесь, довольно мощные. Сравнительно небольшое количество строк кода позволяет легко получить результат. Другие варианты использования рассматриваются во второй части (скоро!), Посвященной добавлению водяного знака в PDF.

Перевод статьи: Working with PDFs in Python: Reading and Splitting

excel — Извлечение данных из PDF и добавление в рабочий лист

Вы можете открыть PDF-файл и извлечь его содержимое с помощью библиотеки Adobe (которую, я полагаю, вы можете загрузить с Adobe как часть SDK, но она также поставляется с некоторыми версиями Acrobat)

Не забудьте также добавить библиотеку к своим ссылкам (на моем компьютере это библиотека типов Adobe Acrobat 10.0, но не уверен, что это новейшая версия)

Даже с библиотекой Adobe это нетривиально (вам нужно будет добавить свой собственный перехват ошибок и т. Д.):

  Функция getTextFromPDF (ByVal strFilename как строка) как строка
   Dim objAVDoc как новый AcroAVDoc
   Dim objPDDoc как новый AcroPDDoc
   Dim objPage как AcroPDPage
   Dim objSelection как AcroPDTextSelect
   Dim obj Выделите как AcroHiliteList
   Dim pageNum As Long
   Dim strText As String

   strText = ""
   Если (objAvDoc.Откройте (strFilename, "") Затем
      Установите objPDDoc = objAVDoc.GetPDDoc
      Для pageNum = 0 Для objPDDoc.GetNumPages () - 1
         Установите objPage = objPDDoc.AcquirePage (pageNum)
         Установить objHighlight = New AcroHiliteList
         objHighlight.Add 0, 10000 'Отрегулируйте это, если он не получает весь текст на странице
         Установите objSelection = objPage.CreatePageHilite (objHighlight)

         Если не objSelection - это ничто, тогда
            Для tCount = 0 в objSelection.GetNumText - 1
               strText = strText & objSelection.GetText (tCount)
            Следующее tCount
         Конец, если
      Следующая страницаNum
      objAVDoc.Close 1
   Конец, если

   getTextFromPDF = strText

Конечная функция
  

По сути, это то же самое, что вы пытаетесь сделать — только с использованием собственной библиотеки Adobe. Он просматривает PDF-файл по одной странице за раз, выделяя весь текст на странице, а затем перетаскивая его (по одному текстовому элементу за раз) в строку.

Имейте в виду, что то, что вы получите из этого, может быть заполнено всевозможными непечатаемыми символами (переводы строки, новые строки и т. Д.), Которые могут даже оказаться в середине того, что выглядит как непрерывные блоки текста, поэтому вам могут потребоваться дополнительные код, чтобы очистить его, прежде чем вы сможете его использовать.

Надеюсь, что это поможет!

Извлечение текста PDF в Python. Как разделить, сохранить и извлечь текст… | автор: Mate Pocs

Как разделять, сохранять и извлекать текст из файлов PDF с помощью PyPDF2 и PDFMiner, продемонстрировано с полным текстом работ Х. П. Лавкрафта.

Фото Александра Пасарича из Pexels

Я не думаю, что есть много места для творчества, когда дело доходит до написания вступительного абзаца для сообщения об извлечении текста из файла pdf. Есть PDF-файл, в нем есть текст, нам нужен текст, и я собираюсь показать вам, как это сделать с помощью Python.

В первой части мы рассмотрим две библиотеки Python, PyPDF2 и PDFMiner. Как следует из названия, это библиотеки, написанные специально для работы с файлами PDF. Мы обсудим различные необходимые нам классы и методы.

Затем, во второй части, мы будем работать над одним проектом, который состоит в разделении файла PDF длиной 708 страниц на отдельные файлы меньшего размера, извлечении текстовой информации, ее очистке и последующем экспорте в легко читаемые текстовые файлы. .Дополнительные сведения об этом проекте см. В моем репозитории на GitHub.

PyPDF2

В качестве первого шага установите пакет:

 pip install PyPDF2 

Первый объект, который нам нужен, это PdfFileReader:

 reader = PyPDF2.PdfFileReader ('Complete_Works_Lovecraft.pdf2 параметр') 

путь к документу pdf , с которым мы хотим работать. Вы можете получить общую информацию о своем документе с помощью этого объекта reader .Например, reader.documentInfo — это атрибут, который содержит словарь информации о документе в следующем формате:

 {'/ Author': 'H.P. Lovecraft ', 
' / Creator ':' Microsoft® Word 2010 ',
' / CreationDate ': "D: 20110729214233-04'00'",
'/ ModDate': "D: 20110729214233-04'00 '",
'/ Producer': 'Microsoft® Word 2010'}

Вы также можете получить общее количество страниц с помощью reader.numPages .

Возможно, наиболее важным методом является getPage (page_num) , который возвращает одну страницу файла как отдельный PageObject.Будьте осторожны, объекты PageObjects находятся в списке, поэтому метод использует индекс, отсчитываемый от нуля.

Мы не собираемся интенсивно использовать класс PageObject. Еще одна вещь, которую вы могли бы рассмотреть, — это метод extractText , который преобразует содержимое страницы в строковую переменную. Например, чтобы получить текст на 7-й странице (помните, нулевой индекс) PDF-файла, вы должны сначала создать PageObject из PdfFileReader и вызвать этот метод:

 reader.getPage (7-1) .extractText ( ) 

Однако даже официальная документация говорит об этом методе: «Это хорошо работает для некоторых файлов PDF, но плохо работает для других, в зависимости от используемого генератора. Что не совсем обнадеживает, и, по моему опыту, extractText не работает должным образом, пропускает первую и последнюю строки страниц. Это основная причина, по которой я также использовал в проекте другую библиотеку, PDFMiner.

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

 writer = PyPDF2.PdfFileWriter () 

Объект writer будет отслеживать файл pdf , который мы хотим создать.Чтобы добавить страницу в создаваемый файл, используйте метод addPage , для которого в качестве параметра требуется объект PageObject. Например, чтобы добавить определенную страницу из нашего входного pdf:

 my_page = reader.getPage (7) 
writer.addPage (my_page)

И, наконец, объект PdfFileWriter имеет метод записи, который сохраняет содержимое в файл. Для этого метода требуется один параметр, файловый объект, а это значит, что просто ввести путь к файлу не получится. Простой способ создания файлового объекта — использовать встроенный в Python метод open :

 output_filename = 'pages_we_want_to_save.pdf 'с open (output_filename,' wb ') в качестве вывода: 
writer.write (output)

Это все классы и методы, которые мы собираемся использовать, см. Документацию PyPDF2 для получения информации о дополнительных функциях.

Теперь мы можем читать и записывать файлы PDF, но есть одна важная функция, которая нам все еще нужна: преобразование содержимого в текстовый файл. Для этого нам нужно использовать другую библиотеку PDFMiner.

PDFMiner

Мы собираемся использовать pdfminer.six, который является поддерживаемым сообществом форком исходной библиотеки PDFMiner.(Проект PDFMiner больше не поддерживается с 2020 года.)

Во-первых, вам необходимо установить его:

 pip install pdfminer.six 

По сравнению с PyPDF2 возможности PDFMiner гораздо более ограничены, он действительно фокусируется только на извлечении текст из исходной информации файла pdf. Документация также очень сфокусирована, в ней есть около трех примеров, и мы будем в основном использовать этот код, который удобно предоставляется в руководстве. Поскольку код, казалось, работал правильно, я не чувствовал необходимости копать глубже.

Это все, что нам нужно сейчас, для нашего настоящего проекта!

Проект Лавкрафта Введение

Чтобы дать вам некоторое представление о том, почему мы делаем этот проект, я хочу провести всесторонний НЛП-анализ работ Х. П. Лавкрафта. Если вы не знаете, кто это, он был американским писателем в начале 20 века, известным своими странными и космическими фильмами ужасов, оказавшими огромное влияние на современную поп-культуру. Если вы хотите взглянуть на его стиль письма, ознакомьтесь с этим постом, и если вы хотите узнать о некоторых из наиболее проблемных аспектов его характера, я рекомендую этот.

Самое замечательное в том, что его работы официально являются общественным достоянием в Европейском Союзе теперь, когда прошло 70 лет после его смерти, и в основном это общественное достояние в США, потому что, похоже, никто не владеет правами. Вот почему в наши дни Ктулху присутствует во всем, это бесплатная интеллектуальная собственность. В Интернете есть несколько источников, где вы можете собрать его работы, но, что интересно, их нет в Project Gutenberg. Я нашел несколько других коллекций, в которых есть небольшие изменения слов, например, «часто» vs.«Часто» в первом предложении Beyond Wall and Sleep или без кавычек и т.д. pdf и начал работать над разделением файла и извлечением текста.

Применение теории на практике

В этом разделе мы объединяем то, что мы узнали до сих пор. Все, что нам нужно для начала, — это большой файл в формате pdf от Arkham Archivist.

Мы будем использовать несколько общих функций, я сохранил их в отдельном файле data_func.py файл:

Функции:

  • convert_pdf_to_string : это общий код экстрактора текста, который мы скопировали из документации pdfminer.six и немного изменили, чтобы мы могли использовать его как функцию;
  • convert_title_to_filename : функция, которая принимает заголовок в том виде, в каком он отображается в таблице содержания, и преобразует его в имя файла — когда я начал работать над этим, я предполагал, что нам потребуются дополнительные настройки;
  • split_to_title_and_pagenum : цель этой функции станет яснее позже, она в основном используется для определения, действительно ли строка в оглавлении является парой заголовок — номер страницы, и, если да, возвращает их в виде кортежа.

Следующий шаг — настройка среды, мы импортируем библиотеки (включая функции из блока выше), проверяем некоторые свойства документа. И, что наиболее важно, мы настроили объект PyPDF2 PdfFileReader, который собираемся использовать на протяжении всего проекта: reader .

Теперь можно приступить к работе с файлом. Взглянув на PDF-файл, кажется, что лучший способ действий — каким-то образом извлечь номера страниц из оглавления, а затем использовать их для разделения файла.Оглавление находится на страницах 3 и 4 в pdf, что означает 2 и 3 в списке PdfFileReader объектов PageObjects. Когда у нас есть PDF-файл в отдельном файле, мы можем использовать код pdfminer.six для извлечения текстовой информации. (Примечание: мы также могли бы просто настроить соответствующие страницы напрямую, не разделяя файл, но я хотел также создать отдельные файлы pdf, и имело смысл также иметь отдельный файл с оглавлением.)

На данный момент файл текст переменная выглядит так:

 'Содержание \ n \ nПредисловие................................................... .................................................. ........................ 2 \ nГробница ...................... .................................................. .................................................. 5 \ nДагон ............................................... .................................................. ............................ 12 
...

и так далее. Пара простых замен строк:

преобразует текст в более удобный формат.При внесении подобных корректировок нужно быть осторожным, например, при этом будут удалены все «.», Которые могут быть в заголовке, но, к счастью, у нас таких заголовков нет. Теперь у нас есть список строк в оглавлении:

 ['Table of Contents', 
'',
'Preface 2',
'The Tomb 5',
'Dagon 12',
...

Мы хотим собрать заголовки и номера страниц в списки. Это делается путем удаления пробелов и проверки того, заканчивается ли строка цифрами.Нам нужно быть осторожными, потому что мы хотим сохранить пробелы в заголовках.

Теперь, когда у нас есть списки, мы можем разделить файл на более мелкие PDF-файлы, сохранив их в отдельной папке:

Если мы посмотрим на отдельные PDF-файлы, мы бы хотели внести три дополнительных изменения:

  • В скобках после названия каждой истории указан год ее написания. Это не часть исходного текста, и мы хотели бы их исключить. Однако мы хотим сохранить их в списке, чтобы использовать их в будущем анализе.
  • Каждый рассказ имеет обратную ссылку на оглавление «Вернуться к оглавлению», очевидно, что это не часть исходного текста. Я проверил, и эта комбинация слов (5 граммов, как мы увидим позже в проекте НЛП) не появляется ни в одном исходном тексте, поэтому мы можем просто удалить ее.
  • В конце последней истории есть «плавник» и несколько пробелов. Поскольку символы «f-i-n», скорее всего, появятся где-нибудь в английском тексте, я закончил тем, что просто обрезал конец последней строки.

Выполнение кода для всех историй может занять минуту.

В качестве последнего штриха мы сохраняем исходные заголовки, имена файлов, номера страниц и год, в котором они были записаны, в файл CSV.

На этом мы закончили, мы успешно очистили текст и сохранили его в отдельных текстовых файлах.

Заключение

Думаю, главный вопрос: стоило ли так делать проект? Разве я не мог просто найти где-нибудь текстовые файлы? Как я уже упоминал, я нашел текстовые источники, но они оказались самыми надежными.Хорошо, но не может ли быть быстрее просто скопировать текст вручную? Я думал об этом, но не думаю. Подумайте обо всех нюансах, которые мы применили, собирая год написания, удаляя непрофильный текст и т. Д.

В любом случае я узнал что-то новое, и надеюсь, вы нашли это полезным. Было интересно посмотреть, с каким количеством мелких проблем можно столкнуться, работая над таким относительно простым проектом, как этот, и я не могу дождаться, чтобы наконец начать работу над текстом. Мне действительно любопытно, как часто Лавкрафт действительно использовал слово «ужас» в своих произведениях!

Ссылки

Извлечение текста из файла PDF с помощью Python

Все вы должны быть знакомы с тем, что такое PDF-файлы.Фактически, они являются одними из самых важных и широко используемых цифровых носителей. PDF означает Portable Document Format . Он использует расширение .pdf . Он используется для надежного представления документов и обмена ими независимо от программного обеспечения, оборудования или операционной системы.

Извлечение текста из файла PDF

Пакет Python PyPDF можно использовать для достижения того, чего мы хотим (извлечения текста), хотя он может делать больше, чем нам нужно. Этот пакет также можно использовать для создания, расшифровки и объединения файлов PDF.

Примечание: Для получения дополнительной информации см. Работа с файлами PDF в Python

Установка

Чтобы установить этот пакет, введите следующую команду в терминале.

 pip install PyPDF2 

Пример:

Входной PDF:

import PyPDF2

9000O2

09 'пример.pdf ' , ' rb ' )

pdfReader = PyPDF2.

pageObj = pdfReader.getPage ( 0 )

print (pageObj.extractText ())

pdfFileObj.close ()

Вывод:

Давайте попробуем разобраться в приведенном выше коде в виде фрагментов

j: 

open ('example.pdf', 'rb')

Мы открыли файл example.pdf в двоичном режиме. и сохранил объект файла как pdfFileObj .

  •  pdfReader = PyPDF2.PdfFileReader (pdfFileObj) 

    Здесь мы создаем объект класса PdfFileReader модуля PyPDF2 и передаем объект файла pdf и получаем объект чтения pdf.

  •  print (pdfReader.numPages) 

    numPages Свойство дает количество страниц в файле pdf. Например, в нашем случае это 20 (см. Первую строку вывода).

  •  pageObj = pdfReader.getPage (0) 

    Теперь мы создаем объект класса PageObject модуля PyPDF2. Объект чтения pdf имеет функцию getPage () , которая принимает номер страницы (начальный индекс формы 0) в качестве аргумента и возвращает объект страницы.

  •  печать (pageObj.extractText ()) 

    Объект страницы имеет функцию extractText () для извлечения текста со страницы pdf.

  •  pdfFileObj.close () 

    Наконец, мы закрываем объект файла pdf.

  • Внимание компьютерщик! Укрепите свои основы с помощью курса Python Programming Foundation и изучите основы.

    Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS .А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень

    Прочтите вслух для файлов PDF

    по
    ТехноХелла

    ·

    Опубликовано
    · Обновлено

    Если у вас есть учащиеся, испытывающие трудности с чтением, или студенты, не владеющие письменным английским языком, вы можете преобразовать текст в речь в файле PDF.

    У вас есть два варианта чтения PDF-файла вслух.

    Используйте Adobe Reader ТЕКСТ ДЛЯ РЕЧИ

    1. Откройте файл PDF в Adobe Reader DC.
    2. Перейдите на страницу, которую хотите прочитать.
    3. В меню «Просмотр» выберите «ПРОЧИТАЙТЕ ГРОМКО». Щелкните АКТИВИРОВАТЬ ЗАЧИТАЙТЕ ГРОМКО.
    4. В меню «Просмотр» выберите «ПРОЧИТАЙТЕ ГРОМКО». Нажмите ТОЛЬКО ПРОЧИТАТЬ ЭТУ СТРАНИЦУ (SHIFT + CTRL + C используется для паузы / возобновления).

    СОВЕТ. После активации «ТОЛЬКО ЧИТАТЬ ЭТУ СТРАНИЦУ» вы можете выбрать любой абзац, чтобы прочитать его вслух.Обязательно загрузите последнюю версию - Adobe Reader DC - чтобы эта функция работала.

    Используйте расширение Chrome Speak It

    1. Скачайте расширение Speak It здесь.
    2. Чтобы прочитать PDF-файл TechnoKids вслух, разместите его на Google Диске.
    3. Попросите учащихся открыть файл с помощью Ками. (Чтобы узнать больше о расширении Kami, посмотрите это видео.)
    4. Выделите текст.
    5. Щелкните символ ГОВОРИТЬ в ПРАВОМ ВЕРХНЕМ углу окна браузера.

    СОВЕТ. Это отличное расширение, которое будет читать любой текст в Интернете.

    Теги: доступностьAdobe ReaderChrome Extensionуправление классомкомпьютерное образованиеинструктивные технологиичитать вслух идеи обучения

    ТехноХелла

    Хелла Комат, составитель учебных программ

    - Хелла Комат - преданный своему делу профессионал, преподававший в системе образования более 30 лет. Будучи пионером интеграции технологий в государственных школах Онтарио, она была одним из первых учителей, которые познакомили учителей и учащихся с Интернетом, видеоконференцсвязью, веб-дизайном и мультимедийными учебными мероприятиями.Чтобы вдохновить учителей на использование технологий, она вела занятия по программе Touch Technology, проводила семинары на образовательных конференциях и входила в многочисленные консультативные комитеты, связанные с проблемами технологий. В последние годы она преподавала курс «Компьютер в классе» в Йоркском университете. Ее пожизненная приверженность преподаванию и обучению была признана, когда она была удостоена награды премьер-министра за выдающиеся достижения в области науки, технологий и математики.
    Вклад Hella в блог включает записи о важности интеграции технологий.Основываясь на своих глубоких познаниях в области технологий в классе, Хелла пишет о стратегиях обучения и полезных ресурсах, которые могут принести пользу вашей практике. Кроме того, она предлагает новаторские идеи уроков, которые вы можете внедрить в свою учебную программу.

    Вам также может понравиться ...

    Извлечение текста из pdf - автоматизация и высвобождение времени

    Опубликовано 10.01.2019

    Что такое PDF?

    PDF (Portable Document Format) - это формат файла, который используется для надежного представления и обмена документами, независимо от программного обеспечения, оборудования или операционной системы.PDF был изобретен Adobe и теперь является открытым стандартом, поддерживаемым ISO. В настоящее время файлы PDF совместимы и генерируются большинством программных приложений. Документы PDF могут содержать все типы носителей, такие как ссылки, поля формы ввода, видео, и могут быть подписаны электронным способом.

    Типичные варианты использования для извлечения текста из файлов PDF - Извлечение ключевых данных
    1. В бизнесе, где много документов, огромный объем PDF-документов требует ручной обработки для ввода данных, что требует огромной рабочей силы.В результате это замедляет бизнес, а, следовательно, увеличивает затраты и приводит к ошибкам вручную.
    2. Ключевые элементы данных из PDF-документов (например, номер счета-фактуры, дата, общая сумма и т. Д. Из счета-фактуры) должны быть извлечены и экспортированы в структурированном формате, таком как Excel, Microsoft SQL Server и т. Д.
    3. Когда бизнесу необходимо построить аналитику на основе извлеченных данных, чтобы получить представление о данных, которые в настоящее время хранятся в файлах PDF.
    Конкретные варианты использования для извлечения текста из файлов PDF
    1. Счета-фактуры поставщиков.
    2. Заказы на закупку.
    3. Договоры страхования и требования.
    4. Формы адаптации клиентов.
    5. Стандартизированные отчеты.
    6. Электронная медицинская карта.
    7. Товаросопроводительные документы.
    8. Подтверждение доставки.
    9. и этот список можно продолжать и продолжать…
    Насколько сложнее извлечь текст из файлов PDF?

    Это зависит от типа PDF-файла, который может быть доступен для поиска или основан на изображениях.

    1. Извлечение данных из огромного объема файлов PDF на основе изображений может стать действительно трудоемким, беспорядочным и подверженным ошибкам.Сканеры обычно создают файлы PDF на основе изображений. В этом случае файл pdf содержит отсканированное изображение / фотографию реального документа. Невозможно скопировать / вставить текст из PDF-файла на основе изображений, поэтому оператору необходимо вручную прочитать и ввести текст в целевом программном приложении.
    2. В настоящее время на рынке доступно несколько усовершенствованных сканеров документов на основе оптического распознавания символов (OCR). Эти интеллектуальные сканеры извлекают реальный текст из бумажных документов на лету во время процесса сканирования, и конечный результат представляет собой файл PDF с текстом, который можно найти, отсюда и название «PDF с возможностью поиска».В этом случае оператор ввода данных может найти, скопировать и вставить текст из файлов PDF в бизнес-приложение, и это займет меньше времени.
    Следует ли автоматизировать извлечение текста из файлов PDF?

    Это зависит от объема, типа (изображение / поиск) и объема текста / данных, которые необходимо обработать из каждого файла PDF;

    Одностраничный / многостраничный малый объем :

    Честно говоря, если мы говорим о нескольких файлах pdf в день, извлечение данных вручную и ввод этих данных в вашу бизнес-систему несложно.Так что нет смысла вводить автоматизацию, потому что это будет излишним.

    Одностраничный / многостраничный большой объем:

    В этом случае оператор ввода данных должен индивидуально открывать каждый файл PDF, находить поля данных на правильных страницах, а затем копировать / вставлять данные в случае PDF с возможностью поиска. Оператору будет сложнее вручную вводить текст в целевой системе, если PDF-файл недоступен для поиска. Форматирование дат и чисел в процессе ввода данных сделало бы его более трудоемким и подверженным ошибкам.

    Таким образом, использование современного облачного программного обеспечения для сбора данных, такого как DocAcquire, для автоматизации процесса ввода данных принесет огромную рентабельность любому бизнесу.

    Какие инструменты доступны для извлечения текста из файлов PDF - Извлечение данных всей страницы?

    Если вы просто хотите преобразовать файл pdf в любой другой стандартный формат, вы можете использовать следующие инструменты;

    1. Adobe Acrobat
    2. PDF к тексту
    3. Online OCR - позволяет конвертировать PDF в Word, PDF в Excel и PDF в текст
    4. Многие другие просто Google «конвертируют отсканированный PDF в текст»
    Я не хочу извлекать все данные из файлов PDF

    Если вам необходимо извлечь только ключевые (определенные) поля данных из файлов pdf.Примером может быть дата счета-фактуры, номер счета-фактуры, налог, итоговая сумма из счета-фактуры поставщика. Если вы также хотите хранить извлеченные данные в структурированном формате, таком как Excel, Microsoft SQL Server, Microsoft Sharepoint, или в своей бизнес-системе.

    Если это так, то вы ищете «программное обеспечение для автоматического сбора данных», основанное на оптическом распознавании символов (OCR) и машинном обучении.

    Как работает программное обеспечение для автоматизированного сбора данных?

    Большинство современных платформ автоматизированного сбора данных построены на системе рабочих процессов.Типичный рабочий процесс извлечения документов проходит через следующие этапы;

    1. Чтобы извлекать только определенные поля данных, вы можете обучить программу с помощью набора документов.
    2. Настройте рабочий процесс для импорта, классификации, извлечения, проверки и экспорта извлеченных данных в выбранное место назначения.
    Вот шаги рабочего процесса программного обеспечения для автоматического сбора данных

    Импорт:

    В программное обеспечение для сбора данных можно загружать файлы различных типов, такие как файлы PDF и отсканированные изображения.Эти документы могут поступать из множества источников;

    • Почтовые ящики
    • Сетевые папки
    • Мобильные телефоны (приложения для сканирования документов)
    • Непосредственно загружено / импортировано в программное обеспечение
    • Приложения для облачного хранения файлов, такие как Google Drive, Box, Dropbox и т. Д.

    DocAcquire имеет мощный механизм интеграции, который позволяет импортировать документы из самых разных источников.

    Классифицировать:

    Каждый документ классифицируется по его структуре и содержанию.После классификации документ готов к следующему этапу извлечения данных. Система помечает документ как неклассифицированный, если не может распознать макет и содержание документа. В таком случае документ необходимо обучить.

    Выписка:

    После того, как документ классифицирован, на основе начального обучения извлекаются необходимые данные / поля. После завершения извлечения данных документ отправляется на следующий этап рабочего процесса для проверки.

    Проверить:

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

    Экспорт:

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

    Различные подходы к извлечению данных из PDF

    Есть много способов извлечения данных из файла PDF.Но подход полностью зависит от вашего варианта использования или требований.

    • Извлечение данных полной страницы
    • Извлечь особые / ключевые данные
    Извлечение данных полной страницы

    Если вам нужен полный текст на всех страницах PDF. Это просто и понятно.

    Вот несколько причин, по которым вы хотите использовать этот подход;

    • Ваш PDF-файл основан на изображениях, что означает, что PDF-файл был создан со сканера, и нет возможности искать текст внутри PDF-документа.Итак, как только вы получите необработанный текст из OCR, вы можете сгенерировать новый документ PDF с извлеченным текстом.
    • Другая причина может заключаться в том, чтобы найти идеи и взаимосвязи в тексте, извлеченном из неструктурированных PDF-документов, таких как письма, медицинские расшифровки, каталоги продуктов и т. Д. Чтобы извлечь эти идеи из документов, вы, вероятно, будете использовать такие методы, как NLP (обработка естественного языка) Engine, который вы, возможно, разработали специально для своего домена, или используйте готовый сервис, такой как AWS Comprehend.Вы передадите необработанный извлеченный текст механизму НЛП, чтобы получить желаемые результаты.
    Отдельные экстракты / ключевые данные

    Если вы хотите извлечь определенные точки данных из документа PDF, тогда это другая игра - сложность возрастает - особенно когда документы становятся очень неструктурированными, такими как контракты, письма и т. Д.

    Извлечь данные транзакции

    Что такое транзакционные данные? Когда компания ведет дела с какой-либо другой организацией, которая включает обмен продуктами или услугами, и во время этого процесса данные, которые собираются, называются транзакционными данными.

    Например, когда продукт продается, компания, которая его продает, выставляет счет-фактуру. Счет-фактура содержит необходимые финансовые данные о том, какие продукты были проданы, сколько и по какой цене. Некоторые другие транзакционные документы включают заказы на поставку, подтверждение доставки, коносамент и т. Д.

    Почему сложно извлечь ключевые / транзакционные данные из документа?

    Наличие документов с фиксированными правилами размещения отдельных точек данных (например, номер счета, данные счета, итоги и т. Д.)) менее сложен по сравнению с другими документами, где конкретная точка данных (например, номер счета-фактуры) не привязана к одному месту, и становится более сложной, когда PDF-файл отсканирован, который имеет низкое качество, перекос и точка данных может существовать в любом месте. случайная страница PDF-документа. Сложнее становится, когда эту точку данных нужно извлечь из плотного и неструктурированного текста.

    Как DocAcquire извлекает текст из файлов PDF

    DocAcquire - это современное облачное программное обеспечение для сбора данных, которое может извлекать данные из файлов различных форматов, таких как pdf, png, jpeg и tiff.По умолчанию DocAcquire использует механизм распознавания текста под названием AWS Textract для чтения текста из документов.

    DocAcquire Ключевые возможности для извлечения данных в формате PDF

    1. Если ваши PDF-документы низкого качества (отсканированы) или вам нужно прочитать из них рукописный текст, вы можете легко настроить DocAcquire для использования Google Vision. Google Vision - это мощная служба анализа изображений, основанная на машинном обучении, которая обеспечивает чрезвычайно высокую точность при извлечении текста из файлов PDF и других форматов.
    2. Поддерживает многостраничные документы.
    3. Поддержка извлечения табличных данных.
    4. Простой пользовательский интерфейс для проверки данных, извлеченных с нескольких страниц.
    5. Отправляйте извлеченные данные в любое локальное или облачное бизнес-приложение с помощью стандартной конечной точки REST API.
    6. Вы даже можете извлечь извлеченные данные с помощью конечных точек REST API в формате JSON.
    7. Вы также можете извлекать данные непосредственно в Microsoft SQL Server.

    DocAcquire’s - Cognitive Invoice - это платформа, основанная на глубоком обучении, которая упрощает извлечение данных счетов.Вот беглый взгляд на платформу, вы можете увидеть, насколько проще ее запустить и запустить - нет необходимости создавать и поддерживать шаблоны.

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

    Вернуться в блог

    PDF7: выполнение оптического распознавания символов в отсканированном документе PDF для предоставления фактического текста

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

    Документ, состоящий из отсканированных изображений текста, изначально недоступен
    потому что содержание документа - изображения, а не текст, доступный для поиска.
    Вспомогательные технологии не могут читать или извлекать слова; пользователи не могут
    выделять, редактировать, изменять размер или перекомпоновку текста, а также они не могут изменять текст и фон
    цвета; и авторы не могут управлять PDF-файлом для обеспечения доступности.

    По этим причинам авторам следует использовать фактический текст, а не изображения.
    текста, используя инструмент разработки, такой как Microsoft Word или Oracle Open
    Office для создания и преобразования содержимого в PDF.

    Если авторы не имеют доступа к исходному файлу и инструменту разработки,
    отсканированные изображения текста можно преобразовать в PDF с помощью оптических символов
    распознавание (OCR). Затем Adobe Acrobat Pro можно использовать для создания доступных
    текст.

    Этот пример показан с Adobe Acrobat Pro. Существуют и другие программные инструменты, выполняющие аналогичные функции. См. Список других программных инструментов в PDF Authoring Tools, которые обеспечивают поддержку специальных возможностей.

    В этом примере используется простое сканированное изображение текста на одной странице.Для обеспечения
    что фактический текст хранится в документе, выполните следующие действия:

    1. Отсканируйте документ с максимально возможным разрешением для улучшения
      производительность OCR.

    2. Загрузите отсканированный документ в Acrobat Acrobat Pro. Выберите Документ> OCR.
      Распознавание текста> Распознать текст с помощью OCR ...

    3. В следующем диалоговом окне выберите переключатель Все страницы в разделе Страницы
      (или Текущая страница, если вы конвертируете только одну страницу), а затем выберите
      ХОРОШО.

    4. В списке «Настройки» выберите «Изменить». В следующем диалоговом окне выберите
      Форматированный текст и графика в раскрывающемся списке «Стиль вывода PDF».
      Это важно для обеспечения доступности.

    5. В зависимости от разрешения и четкости текста OCR преобразует
      изображения слов и символов в фактический текст. Напишите что Acrobat
      Pro не распознает, указан как "подозреваемый в распознавании текста" или
      текстовый элемент, который, как подозревает Acrobat, был распознан неправильно.

    6. Чтобы исправить подозреваемых, выберите «Документ»> «Распознавание текста с оптическим распознаванием текста»> «Найти».
      Первый подозреваемый OCR. Acrobat Pro представляет каждого подозреваемого по одному,
      которые можно исправить с помощью инструментов коррекции Acrobat Pro.

    7. Запустите Advanced> Accessibility> Add Tags to Document

    8. Test for accessibility: Advanced> Accessibility> Full
      Проверить ...

    Примечание: В качестве альтернативы вы можете использовать Документ> OCR
    Распознавание текста> Найти всех подозреваемых OCR для отображения всех подозреваемых OCR
    в то же время для более быстрого редактирования.

    На следующем изображении показан отсканированный одностраничный документ в Adobe Acrobat.
    Pro.

    На следующем изображении показано преобразованное содержимое после добавления тегов в
    документ. Возможно, потребуется использовать TouchUp Reading
    Инструмент заказа и панель тегов, чтобы правильно пометить контент для предполагаемого
    итоговый документ. Для этого примера изображение спирального переплета книги
    был отмечен при преобразовании. Использовался инструмент TouchUp Reading Order.
    , чтобы скрыть изображение как фоновое (декоративное) изображение (см. PDF4: Скрытие декоративных изображений с помощью тега Artifact в документах PDF ).Рецепт
    заголовки были помечены как заголовки первого уровня.

    Примечание. Acrobat Pro может автоматически добавлять теги при запуске файла.
    через OCR.

    Этот пример показан в действии на рабочем примере генерации фактического текста и результата выполнения OCR.

    Ресурсы предназначены только для информационных целей, без какой-либо поддержки.

    Процедура

    1. Для каждой страницы, преобразованной в текст с помощью OCR, убедитесь, что результат
      PDF-файл был преобразован правильно одним из следующих способов:

      • Прочтите PDF-документ с помощью программы чтения с экрана или инструмента, который читает вслух, прислушиваясь к тому, что весь текст читается правильно
        и в правильном порядке чтения.

      • Сохраните документ как текст и убедитесь, что преобразованный текст
        является полным и в правильном порядке чтения.

      • Используйте инструмент, способный отображать преобразованный контент
        чтобы открыть PDF-документ и убедиться, что весь текст был преобразован
        и находится в правильном порядке чтения.

      • Используйте инструмент, открывающий доступ к документу
        API и убедитесь, что весь текст преобразован и находится в правильном
        порядок чтения.

    Ожидаемые результаты

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

    Как распознавать PDF-файлы: гипотеза

    Здесь: http://docdrop.org/ocr

    Иногда вы можете обнаружить, что работаете с PDF-файлом, в котором невозможно выделить текст.Обычно это происходит, когда PDF-файл создается из отсканированных изображений текста. Вы можете использовать технологию OCR для оптимизации этих PDF-файлов. Вы можете использовать множество других инструментов, некоторые из которых описаны ниже, но предлагаемый нами прототип прост в использовании, бесплатен и использует лучшие базовые технологии, которые мы когда-либо встречали.

    Чтобы OCR PDF:

    1. Открыть http://docdrop.org/ocr
    2. Перетащите файл на страницу docdrop ​​или щелкните страницу docdrop ​​и выберите файл на своем компьютере.
    3. Щелкните «Запустить распознавание текста».
    4. Если в вашем PDF-документе уже есть текст, который можно выбрать, но он искажен, неполон или иным образом поврежден, вы можете попробовать кнопку «Принудительное распознавание текста», чтобы создать новый текстовый слой в документе.
    5. Загрузите получившийся PDF-файл и используйте его в гипотезе.

    Что такое OCR?

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

    Документы

    , оптимизированные для оптического распознавания символов, полезны для слепых и слабовидящих читателей, поскольку оптическое распознавание текста позволяет программам чтения с экрана и другим вспомогательным технологиям взаимодействовать с текстом. Лучше всего работать с документами, оптимизированными для распознавания текста, независимо от того, комментируете ли вы гипотезу или нет.

    Как узнать, распознан ли мой PDF-файл?

    Если вы можете легко выделить строку текста, а затем скопировать и вставить ее в другое место, а вставленный текст правильно отформатирован, ваш PDF-файл оптимизирован для оптического распознавания символов, и вы можете начать комментировать.

    Вам нужно будет применить технологию оптического распознавания текста к вашему PDF-файлу, если выполняется одно из следующих условий:

    • Вы не можете выделить текст
    • Вы можете выделить текст, но сложно получить только тот текст, который вам нужен
    • Вы можете выделить текст, но он будет «искажен» или плохо отформатирован после копирования и вставки в другое место
    • Кто-то, использующий технологию чтения с экрана, указал, что PDF-файл трудно читать

    Мы включили инструкции по использованию инструмента под названием docdrop ​​в верхней части этой статьи.Ниже вы найдете некоторые другие параметры, которые можно использовать для распознавания текста в документе.

    Как распознать PDF-файл с помощью Acrobat

    Для использования приведенных ниже руководств вам потребуется установить Adobe Acrobat. Если у вас нет подписки Adobe, вы можете загрузить бесплатную пробную версию Acrobat или обратиться в школьную, институциональную или местную библиотеку.

    Здесь приведены инструкции по использованию технологии оптического распознавания текста Adobe Acrobat, или вы можете посмотреть короткое видео-руководство ниже:

    Как распознать PDF-файл с помощью PDFelement

    PDFelement (https: // pdf.wondershare.net/) - еще один инструмент, который может преобразовывать PDF-файл только с изображениями в текстовый PDF-файл, который может быть аннотирован. Когда вы открываете PDF-файл только с изображениями в PDFelement, программа сообщает:

    ! Мы обнаруживаем, что это отсканированный PDF-файл, и рекомендуем вам выполнить оптическое распознавание текста, которое позволяет копировать, редактировать и искать тексты в отсканированных PDF-документах. [Выполнить OCR]

    При нажатии кнопки «Выполнить распознавание текста» доступны следующие варианты:

    Вот образцы каждого:

    Для наших целей «доступный для поиска» означает, что текст, который вы читаете, представляет собой текст, который появляется на отсканированной странице, тогда как выбранный вами текст отображается в скрытом слое на веб-странице.А «редактируемый» означает, что текст на отсканированной странице скрыт, вы читаете тот же текст, который отображается - теперь видимым - на веб-странице.

    PDFelement рекомендует «редактируемый» (видимый текст) режим, и это тот, который лучше всего работает с гипотезой. Для большинства читателей и для большинства документов текст, отображаемый шрифтом браузера, будет более читабельным, чем текст на отсканированном изображении.

    Почему вы могли бы предпочесть режим «с возможностью поиска» (невидимый текст)? Когда текст неузнаваем, нижележащее изображение будет более читабельным, как указано выше для фразы «слишком часто… эффективное воспитание».Однако обратите внимание, что текст, который вы выбираете для аннотации, будет одинаковым в обоих случаях. В этом примере вот текст, который был фактически распознан:

    «слишком часто требование о расширении прав и возможностей матерей превращается в стратегию для более эффективной работы».

    Или вы можете предпочесть основной текст, потому что он более точно представляет исходный документ.

    Leave a Comment

    Ваш адрес email не будет опубликован. Обязательные поля помечены *