Python 3 - интеллектуальный анализ данных из PDF

Я работаю над проектом, который требует получения данных из некоторых документов PDF.

В настоящее время я использую Foxit toolkit (вызывая его из скрипта), чтобы преобразовать документ в текст, а затем я перебираю его. Я очень доволен этим, но 100$ это просто то, что я не могу позволить себе для такого маленького проекта.

  • Я проверил все бесплатные конвертеры, которые я мог найти (например, xpdf, pdftotext) но они просто не обрезают его, они портят формат так, что я не могу использовать слова, чтобы найти данные.

  • Я попробовал немного Python модули, такие как pdfminer но они не очень хорошо работают в Python 3,

  • Я не могу получить данные, пока они не конвертированы в PDF, потому что я получаю их от телефонного оператора.

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

Обновление: PyPDF2 не получает никакого текста из документа PDF.

4 ответа

PyPDF2 кажется лучшим из доступных для Python3. Он хорошо документирован и API прост в использовании.

Он также может работать с зашифрованными файлами, извлекать метаданные, объединять документы и т. Д.

Простой вариант использования для извлечения текста:

from PyPDF2 import PdfFileReader
with open("test.pdf",'rb') as f:
    if f:
        ipdf = PdfFileReader(f)
        text = [p.extractText() for p in ipdf.pages]

Вот пример кодов pyPDF2:

from PyPDF2 import PdfFileReader

pdfFileObj = open("FileName", "rb")
pdfReader  = PdfFileReader(pdfFileObj,strict = False)
data=[page.extractText() for page in pdfReader.pages]

больше информации о pyPDF2 здесь.

К сожалению, я не верю, что есть хороший бесплатный pdf-конвертер для python, однако pdf2html, хотя он и не является модулем python, работает очень хорошо и предоставляет вам гораздо более структурированные данные (html) по сравнению с простым текстовым файлом. И оттуда вы можете использовать инструменты Python, такие как красивый суп, чтобы очистить HTML-файл.

ссылка - http://coolwanglu.github.io/pdf2htmlEX/

Надеюсь это поможет.

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

https://github.com/opticaliqlusion/pypdf

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

class StreamIterator(PdfTreeVisitor):
    '''For deflating (not crossing) the streams'''
    def visit_stream(self, node):
        print(node.value)
        pass
...
StreamIterator().visit(tree)

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

Ура!

Другие вопросы по тегам