Python,pyPdf,Adobe PDF OCR错误:不支持的filter / lzwdecode

时间:2011-05-19 02:13:05

标签: python ocr pypdf

我的东西:python 2.6 64位(安装了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

这是一个小背景。路径充满了pdfs。有些是使用Adobe pdf打印机从文本文档中保存的(至少我认为他们是这样做的)。有些人被扫描为图像。我想将它们分开并将OCR分离成图像(非图像的图像是完美的,不应该被混淆)。

我几天前问过这个怎么做:

Batch OCR Program for PDFs

我得到的唯一用途就是VB,我只说蟒蛇。所以我想我会尝试回答我自己的问题。我的策略(反映在上面的代码中)是这样的。如果它只是一个图像,那么该正则表达式将返回一个空列表。如果它有文本,正则表达式(表示任何带有2个或更多字母数字字符的单词)将返回一个填充了诸如u'word'之类的内容的列表(在python中,我认为这是一个unicode字符串)。

所以代码应该工作,我们可以采取第一步使用开源软件完成其他线程(将ocrd与imaged pdfs分开),但我不知道如何处理这个过滤器错误和谷歌搜索没有帮助。所以,如果有人知道,将会非常有帮助。

我真的不知道如何使用这些东西。我不确定pyPdf中的过滤器意味着什么。我认为它'说它无法真正读取pdf或其他东西,即使它是ocrd。有趣的是,我将其中一个非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 pdf的过滤问题。这就像我的头脑,我需要一些帮助。

编辑:

Google搜索发现了这一点,但我不知道该怎么做:

http://vaitls.com/treas/pdf/pyPdf/filters.py

2 个答案:

答案 0 :(得分:2)

将pyPdf的filter.py替换为pyPdf源文件夹中的http://vaitls.com/treas/pdf/pyPdf/filters.py。这对我有用。

答案 1 :(得分:1)

LZW是GIF中使用的压缩格式,有时也是PDF格式。如果您查看pyPdf.filters中提供的过滤器,您会看到LZW不存在,因此NotImplementedError.您发布的链接是在subversion存储库中编码,其中有人实现了LZW过滤器。