Мои материалы: python 2.6 64 bit (с установленным pyPdf-1.13.win32.exe). Крыло IDE. Windows 7 64 бит.
Я получил следующую ошибку:
NotImplementedError: неподдерживаемый фильтр / LZWDecode
Когда я запустил следующий код:
from pyPdf import PdfFileWriter, PdfFileReader
import sys, os, pyPdf, re
path = 'C:\\Users\\Homer\\Documents\\' # This is where I put my pdfs
filelist = os.listdir(path)
has_text_list = []
does_not_have_text_list = []
for pdf_name in filelist:
pdf_file_with_directory = os.path.join(path, pdf_name)
pdf = pyPdf.PdfFileReader(open(pdf_file_with_directory, 'rb'))
for i in range(0, pdf.getNumPages()):
content = pdf.getPage(i).extractText() #this is the line what done it
does_it_have_text = re.findall(r'\w{2,}', content)
if does_it_have_text == []:
does_not_have_text_list.append(pdf_name)
print pdf_name
else:
has_text_list.append(pdf_name)
print does_not_have_text_list
Вот небольшой фон. Путь полон PDF. Некоторые были сохранены из текстовых документов с использованием принтера Adobe PDF (по крайней мере, я думаю, что именно так они и сделали). И некоторые были отсканированы как изображения. Я хотел отделить их и OCR те, которые являются изображениями (не-изображения идеальны и не должны быть перепутаны).
Я спросил здесь несколько дней назад, как это сделать:
Пакетная программа OCR для PDF-файлов
Единственный утешение, которое я получил, было в VB, и я говорю только на питоне. Я решил, что постараюсь написать ответ на свой вопрос. Моя стратегия (отраженная в коде выше) такова. Если это просто изображение, то это регулярное выражение вернет пустой список. Если в нем есть текст, регулярное выражение (говорит любое слово с 2 или более буквенно-цифровыми символами) вернет список, заполненный такими вещами, как u'word '(в python, я думаю, это строка в юникоде).
Итак, код должен работать, и мы можем сделать первый шаг, чтобы завершить этот другой поток, используя программное обеспечение с открытым исходным кодом (отделяя ocrd от отображаемых pdf-файлов), но я не знаю, как справиться с этой ошибкой фильтра и поиском в Google. не было полезно. Так что, если кто-нибудь знает, было бы весьма полезно.
Я действительно не знаю, как использовать этот материал. Я не уверен, что означает фильтр в pyPdf говорить. Я думаю, что это говорит о том, что он не может читать PDF или что-то еще, хотя это и происходит. Как ни странно, я поместил один из не-ocrd и один из ocrd pdf-файлов в ту же папку, что и файл python, и это работало только на один без цикла for, поэтому я не знаю, почему делать их с созданным циклом for ошибка фильтра. Я выложу единственный код ниже. THX.
from pyPdf import PdfFileWriter, PdfFileReader
import sys, os, pyPdf, re
pdf = pyPdf.PdfFileReader(open(my_ocrd_file.pdf', 'rb'))
has_text_list = []
does_not_have_text_list = []
for i in range(0, pdf.getNumPages()):
content = pdf.getPage(i).extractText()
does_it_have_text = re.findall(r'\w{2,}', content)
print does_it_have_text
и он печатает материал, так что я не знаю, почему я получаю ошибку фильтра на одном, а не на другом. Когда я запускаю этот код для другого файла в каталоге (тот, который НЕ является ocrd), выводом будет строка emptry в одной строке и строка emptry в следующей, например:
[]
[]
Так что я не думаю, что это проблема фильтра с не-ocrd pdfs. Это как у меня над головой, и мне здесь нужна помощь.
Edit:
Поиск в Google нашел это, но я не знаю, что с этим делать:
http://vaitls.com/treas/pdf/pyPdf/filters.py