2016-08-17 18 views
2

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

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

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

  • Я пробовал некоторые Python модулей, таких как pdfminer, но они, похоже, не работают хорошо в Python 3.

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

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

Обновление: PyPDF2 не захватывает какой-либо текст из документа pdf.

+1

Вы пробовали https://pythonhosted.org/PyPDF2/? – danielfranca

+0

Думаю, что нет, я попробую, спасибо. – EndermanAPM

ответ

1

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

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

Надеется, что это помогает.

+0

Кажется, интересный подход, я попробую. – EndermanAPM

+0

Это сбой с основным использованием для меня: [output] (https://gist.github.com/EndermanAPM/f61cf23b3d44dace4ecdc1101a474791), может быть, потому, что формат pdf? – EndermanAPM

+1

Вы пытались запустить его как admin, похоже, что у него нет привилегий для сохранения в каталоге temp. – T0m

0

Ниже приведен пример кодов pyPDF2:

from PyPDF2 import PdfFileReader 

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

больше информации о pyPDF2 here.

+0

Печать (данные) должна распечатать текст, не так ли? Потому что на данный момент возвращается пустой массив. – EndermanAPM

+0

это должно ... К сожалению, известно, что PDF-файл не может быть открыт PyPDF2. Особенно те, кто не генерируется должным образом из текста (например, отсканированный текст/изображения). – taufikedys

+0

Возможно, это формат, хотя текст из текста или инструментарий foxit не сможет его получить – EndermanAPM

1

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] 
+0

Без его открытия без бинарного режима он просто падает. Если я это сделаю, он возвращает пустой массив. – EndermanAPM

+0

. Страницы на самом деле содержат объекты? – danielfranca

+0

Да, они содержат их. – EndermanAPM

0

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

https://github.com/opticaliqlusion/pypdf

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

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

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

Cheers!

+0

Я попробую, спасибо – EndermanAPM

 Смежные вопросы

  • Нет связанных вопросов^_^