2011-05-19 27 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