Python, pyPdf, Adobe PDF Ошибка распознавания: неподдерживаемый фильтр / lzwdecode - PullRequest
4 голосов
/ 19 мая 2011

Мои материалы: 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

Ответы [ 2 ]

2 голосов
/ 04 июля 2011

Замените pyPdf's filter.py на http://vaitls.com/treas/pdf/pyPdf/filters.py в вашей исходной папке pyPdf. Это сработало для меня.

1 голос
/ 20 мая 2011

LZW - это формат сжатия, используемый в GIF-файлах, а иногда и в PDF-файлах. Если вы посмотрите на фильтры, доступные в pyPdf.filters, то увидите, что LZW там нет, следовательно, NotImplementedError. Ссылка, которую вы разместили, - это код в хранилище Subversion, где кто-то внедрил фильтр LZW.

...