2011-05-19 25 views
4

我的东西:python 2.6 64位(安装了pyPdf-1.13.win32.exe)。 Wing IDE。 Windows 7 64位。Python,pyPdf,Adobe PDF OCR错误:不支持的过滤器/ lzwdecode

我得到了以下错误:

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分开,这些图像是非图像的(非图像的是完美的,不应该混淆)。

我在这里问前几天该怎么做:

Batch OCR Program for PDFs

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

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

我真的不知道如何使用这些东西。我不确定pyPdf中的过滤器是什么意思。我认为它'说,它不能真正阅读pdf或什么,即使它是ocrd。有趣的是,我将非ocrd和ocrd pdf中的一个放在与python文件相同的文件夹中,并且这个工作只是一个没有for循环的文件夹,所以我不知道为什么用for循环创建它们过滤器错误。我将发布下面的单个代码。谢谢。

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的过滤器问题。这就像在我的头上,我需要一些帮助。

编辑:

谷歌搜索发现这一点,但我不知道用它来做什么:

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

回答

1

LZW是GIF和有时在PDF文件中使用的压缩格式。如果您查看pyPdf.filters中的可用过滤器,您会看到LZW不存在,因此NotImplementedError.您发布的链接是在某人已经实现了LZW过滤器的Subversion存储库中进行编码。

+0

THX。其实,我认为唯一的图像文件将应用没有过滤器,所以我可以写一个“尝试:”有一个空的“除”,并追加到OCR'd的文件列表引发任何异常(我的任何文件正在为无法识别的字符获得另一个例外)。 – PatentDeathSquad 2011-05-21 03:46:51

+0

@ AquaT33nFan:听起来像一个计划。 – lafras 2011-05-21 13:36:52

+0

LZW适用于绝大多数PDF文件。 – 2015-01-28 13:53:27

2

替换您的pyPdf源文件夹pyPdf与http://vaitls.com/treas/pdf/pyPdf/filters.py filter.py。这对我有效。

+0

Thx,我会给你一个镜头。其实我发现f = open('pdf','rb'),然后搜索单词“Font”变得更容易。 (如果你在处理类似事情时发现了这种情况)。 – PatentDeathSquad 2011-07-05 09:54:30