2014-05-20 75 views
2

我有一個Python腳本,使用PDFminer像這樣的PDF文檔中的文本讀取結紮處理:在使用Python pdfminer

def convert_pdf_to_txt(path): 
    rsrcmgr = PDFResourceManager() 
    retstr = StringIO() 
    codec = 'utf-8' 
    laparams = LAParams() 
    device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams) 
    file_pointer = file(path, 'rb') 
    interpreter = PDFPageInterpreter(rsrcmgr, device) 
    password = "" 
    maxpages = 0 
    caching = True 
    pagenos=set() 
    for page in PDFPage.get_pages(file_pointer, pagenos, maxpages=maxpages, password=password, caching=caching, check_extractable=True): 
     interpreter.process_page(page) 
    file_pointer.close() 
    device.close() 
    str = retstr.getvalue() 
    retstr.close() 
    return str 

這似乎工作以及文字時顯示此字符串,STR ,被打印。然而,仔細觀察後,會看到一些字符雙擊(即「ff」,「fi」,「fl」和「ff」),在查看生成的文本時會變成「!」。

經過一番研究,我發現這些字符都有'連字符',這意味着它們可以替換爲兩個字符的連接版本。

這些連字顯然無法在ASCII中找到,但我發現它們能夠通過unicode表示。

我開始嘗試使用不同的字符編碼,以便使文本中的「!」變成正確的連字符,但我沒有成功。

也許這與我的PDF文件或PDFminer本身有關?

回答

3

所以我最終給PDFMiner,Yusuke Shinyama的創建者發了電子郵件。下面總結了他的回答。

  • 有問題的PDF使用特殊字體進行連字。
  • 像「fi」「ff」或「fl」這樣的字母有時會特別用英文排版處理,而且它們通常會合併爲一個字形以使其看起來更好。
  • 有問題的PDF完全是這樣做的,並且使用「!」作爲組合字母,當使用該專用字體呈現時,它可能看起來像「fi」或「ff」。
  • 由於PDFMiner沒有這些信息,因此它總是嘗試提取文檔中的文字文字 。

根據Shinyama博士的說法,除了將所有東西都放到OCR軟件上,沒有好的解決方案。


我沒有時間去實施OCR,所以我寫了一個非常簡單的拼寫檢查器。拼寫檢查器通過我的文本查找單詞使用「!」(使用正則表達式),然後將它們與包含連字符的已知單詞列表進行比較。

根據Shinyamas博士的說法,世界上還有很多這樣的PDF文件,將PDF轉換爲文本總是以「盡力而爲」的結果結束。

+1

語言真的很棒。謝謝你這個非常有洞察力的答案!當然,作爲一名計算機科學家,它讓我內心尖叫,但作爲一個人,它讓我停下來思考兼顧unicode標準和互聯網的兼收幷蓄的文化混搭。 – lol