2017-07-26 86 views
0

我寫了一個bash腳本,從掃描的PDF文件中提取純文本。我有很多PDF文件,但有些是掃描的,有些則不是。所以現在我的主要目標是通過檢查PDF是否已經可以搜索來改進我的腳本,所以不需要OCR提取。檢查PDF是否可搜索

我已經試過:

pdftext -nopgbrk pdf_file.pdf wordlist

存儲可能OCR'ed文字wordlist,所以後來我可以檢查它是否是空的,並找出是否是一個可搜索的PDF或沒有。

我也試過pdffonts pdf_file.pdf來檢查該PDF中是否有字體,因此是否有文字。

這兩種方式工作很好,但在某些情況下失敗。

例如,我需要OCR的一些PDF需要數字簽名,而這些簽名始終爲PDF添加文本圖層。所以,當我運行這兩個命令中的任何一個時,它將輸出簽名的文本或它使用的字體。就好像它是因爲簽名而發現了純文本一樣。它可能只是一個帶有數字簽名的掃描PDF,但會被檢測爲純文本PDF。

數碼引援總是添加文字這種方式(使用Helvetica字體):名稱

日期:日期CEST

公司:公司名稱

通過簽名

所以:

pdftext -nopgbrk pdf_file.pdf wordlist | grep -v -E 'Signed|Date|Company'

我可以設法刪除這些行,所以如果它真的是掃描的PDF,輸出將爲空。

它工作的一些PDF的,直到我注意到有一些其他格式的簽名,所以我覺得這是相當多的解決方法,而不是一個很好的解決方案。

有什麼方法可以檢查PDF是否完全可搜索?我只需要一種方法來提取PDF文本,但省略了數字簽名。另外grep -v將總是取決於我們的數字簽名的格式,如果它改變,那麼它會搞砸我的腳本。

謝謝。

+0

你可能是對的。我發佈了這個與我的OCR腳本相關的問題,這個腳本與編程相關,但是當你提到我自己的問題可能是無關緊要的時候,所以Unix&Linux堆棧交換可能是一個更好的地方發佈它。無論如何,如果有人用腳本或算法來解決我的問題,那麼它也可能與編程有關。反正很抱歉。 –

回答

1

不幸的是,如果沒有對文件進行更多的涉及分析,這將遠遠超出bash腳本的範圍和規模,那麼真的不是一種簡單的方法來以「非hacky」的方式來做到這一點。

pdftotext輸出數字簽名的文本時,該文本不是來自數字簽名本身。這是作爲對象存儲在PDF中的,其中元數據pdftotext將被忽略。相反,pdftotext拿起來就是:文本也被添加到文件中。

下面是Adobe's sample signed PDF document的一個示例。首先,數字簽名的元數據:

Screenshot of digital signature metadata

在此可以被插入到文檔中的文本:

Screenshot of text with same information as in digital signature

技術上講,你可以有一個沒有其他,有通常伴隨數字簽名的文本沒有建立的格式。因此,您被卡住了:

  • 忽略具有grep的特定文本,因爲您現在正在執行此操作,這可能是不可靠的。
  • 對所有文件運行OCR,然後檢查文本在OCR之前/之後是否存在差異,但是這首先破壞了檢查的整體目的。
+0

要添加到最後一個項目符號點,我們提供的一些OCR工具包括一個選項,以「在帶有可搜索文本層的PDF上跳過OCR」。因此,您仍然可以在整套設備上運行OCR,但只有基於圖像的PDF纔會被OCR。結果將是您的現有文件,其文本通過未經處理的+圖像PDF現在通過OCR文本傳遞。 –

+0

@IlyaEvdokimov但是,在這種情況下,處理器是否會忽略仍需要OCR的文件,但碰巧有可搜索的文本層,其中只包含有關數字簽名的信息?從我在OP的困境中瞭解的情況來看,這是問題的關鍵。似乎需要一些更多的參與分析,將文本與數字簽名中的信息進行比較,不管PD​​F是否具有圖像,並且對是否在該特定文檔上運行OCR都進行了有根據的猜測。 –