我正在嘗試使用名為 ocrmypdf 的包進行一些批處理。
這是一個可以處理 1 個 pdf 檔案的命令
ocrmypdf input.pdf output.pdf
這是一個可以處理我們運行目錄中所有pdf檔案的命令。
parallel --tag -j 2 ocrmypdf '{}' 'output/{}' ::: *.pdf
現在,我實際上想為目錄中的所有 pdf 檔案運行此命令。這個需要一個更多的引數。
ocrmypdf --sidecar txt/input.txt input.pdf out/output.pdf
我之前嘗試像這樣重寫并行命令:
parallel --tag -j 2 ocrmypdf --sidecar txt/{}.txt {}.pdf out/{}.pdf ::: *.pdf
但我收到錯誤:
ocrmypdf: error: the following arguments are required: output_pdf
有人可以幫助我了解我做錯了什么嗎?謝謝!
uj5u.com熱心網友回復:
這對我有用:
parallel --tag -j 2 ocrmypdf --sidecar txt/{.}.txt {} out/{} ::: *.pdf
如果它不適合您:
- 識別失敗的檔案
- 手動運行失敗的檔案以檢查它是否有效
- 編輯您的問題以包含指向失敗檔案的鏈接
(在運行多個 tesseract 時也要注意這個錯誤:https : //github.com/tesseract-ocr/tesseract/issues/3109#issuecomment-703845274)
uj5u.com熱心網友回復:
嘗試:
parallel --tag -j 2 ocrmypdf --sidecar txt/{.}.txt {} out/{} ::: *.pdf
大括號(即“ {}.pdf”)之后的 .pdf是無關緊要的,將導致無法定位輸入檔案({}默認情況下,“ ”也會捕獲擴展名),對于文本一,通過在里面添加句點括號,它會自動洗掉擴展名,因此您最終會得到“... .txt”而不是“... .pdf.txt”檔案(其中“...”=與輸入匹配的相同檔案名)
如果上述方法不起作用,可能是因為檔案名中包含空格,或者其他一些字符干擾了并行決議(如檔案名、括號等中的引號字符),請嘗試使用檔案作為輸入:
故障排除解決方案 - 創建一個檔案作為輸入 parallel
我相信這應該有效。為了避免用引號大驚小怪,我首先創建了一個檔案,其中包含所有 pdf 的名稱(來自 cwd 的完整相對路徑):
ls --color=none *.pdf | parallel -q printf '%s'\\n {} > ocrmypdf.list
*編輯:感謝@OleTange(GNU Parallel 的作者本人)看到這個答案 - Ole,也許你可以解釋為什么會這樣,但是,由于某種原因,我不能只是運行ls --color=none *.pdf > ocrmypdf.list以正確執行最終的并行命令作業。顯然ls(或者我無論如何使用的版本,我認為技術上可能是gls(?)),會自動向任何包含空格的檔案添加單引號。例如:
ls --color=none *.pdf > ocrmypdf.list 給我:
TrafficSchoolByMay2-2019_AlamedaCourts.pdf
'Tritone Substitution sheet music.pdf'
'Trump is getting increasingly desperate, sparking new fears for his health - CNNPolitics.pdf'
'UHAUL TERMS AND CONDITIONS.pdf'
'UHAUL USER GUIDE.pdf'
而ls --color=none *.pdf | parallel -q printf '%s'\\n給出:
TrafficSchoolByMay2-2019_AlamedaCourts.pdf
Tritone Substitution sheet music.pdf
Trump is getting increasingly desperate, sparking new fears for his health - CNNPolitics.pdf
UHAUL TERMS AND CONDITIONS.pdf
UHAUL USER GUIDE.pdf
這種差異似乎影響了 GNU 并行,檔案中列出的檔案名的后一種格式.list是有效的。
然后,我像這樣運行并行 ocrmypdf:
parallel -j 2 ocrmypdf --sidecar txt/{.} {} out/{} :::: ocrmypdf.list
我收到一個錯誤,我的 pdf 已經有文本,但我認為如果他們還沒有的話它會起作用。必須已經創建了 txt 和 out 目錄。注意 4::::而不是 3,因為它是從檔案中讀取的。這將默認為每行一個引數,因此,不用擔心 pdf 檔案名中是否有空格等。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/324017.html
標籤:蟒蛇-3.x 猛击 并行处理 gnu-parallel ocrmypdf
