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)
Во всяком случае, я не знаю, искали ли вы именно это, но я использовал его для анализа безопасности при просмотре подозрительных вложений электронной почты.
Ура!