閱讀小工具 PyPDFOCR - 把圖片式PDF變成可搜索的文本式PDF
需求
在 Mac 上,把圖片式的 PDF 轉換成可以搜索和查詢單詞的 PDF
介紹
現在網路上能找到的大部分文檔都是 PDF (portable document format),使用起來十分方便,並且在 Mac 系統上,看英文文檔的時候,三指輕觸查單詞的方式讓閱讀輕鬆了不是一點點,而且能積累一些相關領域的被動辭彙。不過有些 PDF 實際上是由一張張的圖片組成,所以沒有辦法查詢單詞或者搜索文本。
另外有些書籍是 *.djvu 格式,裡面也很可能是一張張的圖片。這裡我先推薦一個可以將 DjVu 文檔轉換成 PDF 的軟體 DjVuLibre:
Open Source DjVu library and viewer
Mac,Linux,Windows 都有相應的版本,它的主要功能是閱讀 DjVu 格式的文檔,但是也可以直接將 DjVu 格式文檔轉換成 PDF。
這樣拿到了圖片式的 PDF 文檔之後,接下來就需要它上面加一個「文本層」,便於搜索和查詞。
這裡用的庫是 PyPDFOCR, 它的 GitHub 地址:virantha/pypdfocr
由於使用了 Python (默認是2.7),所以在 Mac,Linux,Windows 上都可以安裝使用,這裡只是介紹 Mac 上的安裝使用方法,其他平台可直接看原來的文檔:
PyPDFOCR API Reference (version 0.9.1)
PyPDFOCR 背後用的是 Google 大名鼎鼎的 OCR 庫 tesseract,當然還有其他的圖像處理依賴軟體包。
使用方法
安裝系統依賴包
brew install tesseractbrew install ghostscriptbrew install popplerbrew install imagemagick
這四個包加起來大約不到 200M,下載時間看你的網速。
安裝 Python 依賴包
pip install Pillowpip install reportlabpip install watchdogpip install pypdf2
下載 pypdfocr 並安裝
git clone https://github.com/virantha/pypdfocr.git # 幾十Mbcd pypdfocrpython setup.py install # 安裝,很快
使用
pypdfocr your_file.pdf
這會生成一個名為 your_file ocr.pdf 的文件,打開之後,裡面的每一頁都加上了一個「文本層」,於是就可以搜索和查詢單詞了。
需要注意的是,它並不是直接輸出 OCR 之後得到的文本 PDF,而是把 OCR 識別出的文本「透明覆蓋」在了原來的文檔上空,這樣你的 PDF 看起來完全一樣,但是可以用輕觸的方式查詢單詞。
如果你的文檔很大,需要加快速度,可以在當前目錄創建一個名為 config.yaml 的文件,在裡面加上兩行:
preprocess: threads: 8
這表示使用 8 個線程,然後
pypdfocr your_file.pdf -c config.yaml
這樣就會快一些,我測試時,8 線程大約可以佔用 CPU 全部能力的 50-60%。
這個程序有其他豐富得多的配置選項,具體可見:
PyPDFOCR API Reference (version 0.9.1)
結論
我有一個 500M (oh my god,什麼文檔這麼大?!) 的文檔,900多個 page,全部都是整張的圖片, 實際上是從 DjVu 轉換而來的 PDF,像素比較高,識別大約用了半個小時。看得出來 CPU 確實是挺費勁的,這取決於 PDF 文檔的清晰度。
實際的效果,並不百分百完美,少數地方几個單詞被識別並連接到一起,但大部分地方是可以使用了。
好吧,我承認,做所有這些,只是為了方便查個生詞而已。。。上帝保佑我能把這本巨大無比的書看完。。。
推薦閱讀:
※如何評價 OS X 10.11 EI Capitan Public Beta?
※集千人智慧的筆記本,拳打 Mac 腳踢 Surface