上次用Python寫好翻譯doc文件小軟體後就展示給寶寶,
我:“寶寶,過來給你個小軟體”
她:“幹什麼用噠?”
我:“給你翻譯Word文件的”
她:“怎麼用啊?”
我:“選擇一個docx文件,再按翻譯按鈕就好了”
她:“哇,這麼厲害!”
。。。。。。
她:“可以翻譯PDF嗎?好多文件都是PDF的哦”
我:“這個。。。可以有”
她:“好棒啊!”
然後,又一陣。。。。。。
“自己吹下的牛皮,含淚也要實現。” 不過,這可不是吹牛皮。之前接觸過提取PDF內容的事情,所以還是有把握的。
從PDF裡面提取文字內容有很多種方法,但是真正適合的還是要研究一番才能做出正確的選擇。選擇的標準就是:適合Windows,速度要快。
一、對比選取Python抽取pdf文件庫
pdfminer是純Python實現的PDF內容提取的庫,很適合Python開發,Linux和Windows上使用都很方便。
去github搜尋“pdfminer”,排在第一的是老的版本,只支援Python 2。支援Python 3的版本叫做: pdfminer.six,也支援Python2,它的地址是:
https://github.com/pdfminer/pdfminer.six
然而,它的速度很慢,因為是純Python寫的。有多慢呢?看看下面它與pdftotext的對比測試吧:
測試檔案大小: 2.1MB
(1)pdftotext 用時: 1.031s
time ./bin/pdftotext -enc UTF-8 z.pdf z.txt
real 0m1.031s
user 0m1.004s
sys 0m0.008s
(2)pdfminer 用時: 2m29.226s == 149.226s
time pdf2txt.py z.pdf
real 2m29.226s
user 2m29.016s
sys 0m0.064s
兩者相差149倍!!我家寶寶是個急脾氣,讓她等那麼長時間,我還能好過嗎?果斷捨棄pdfminer,選擇pdftotext。
二、使用pdftotext來抽取PDF文件
這是一個基於xpdf用C++寫的命令列工具,速度槓槓的(見上面的對比)。有人也把它封裝成了Python庫——pdftotext,但是要編譯成動態庫才能被Python所用。這個封裝基於poppler庫(基於xpdf)。
然而,要在Windows上編譯這個Python庫太不容易了。基本的編譯環境有VC和minGW,具體見:
https://wiki.python.org/moin/WindowsCompilers
我選擇minGW編譯環境,編譯Python庫時各種依賴太複雜。斷斷續續整了幾天未果,只好放棄使用這個Python封裝庫。
三、subprocess呼叫pdftotext.exe
pdftotext命令列工具有Windows版本的可執行檔案下載:
https://www.xpdfreader.com/download.html
那我就用subprocess呼叫即可。這樣我開發省事兒,寶寶用著速度也夠快,一舉兩得。
路線定好後,程式寫起來就很快了。時間多花在路線定製上,好的路線值得花費時間去制定,往往能得到事半功倍的效果。
四、用pyinstaller釋出翻譯PDF文件程式
上一個版本用pyinstaller打包程式很容易,因為除了程式檔案沒有其它附加檔案,而這次程式包含了pdftotext.exe等檔案,導致打包不是那麼順利。這其中的經驗,我將總結為一篇專門講解pyinstaller的文章,敬請期待。
五、翻譯軟體:transdocx的執行
(1)從原始碼執行:
直接執行transdocx.py即可。當然,相應的Python庫要先安裝好。
另外,原始碼資料夾 bin/ 下面的pdftotext.exe不是翻譯軟體,而是被翻譯軟體用來從PDF中提取文字的程式,不要直接執行它。
(2)下載打包好的翻譯軟體
下載transdocx-*.exe後,直接雙擊即可執行。
最後,跟上次一樣,關注猿人學Python公眾號發訊息“翻譯”獲得軟體下載地址,傳送“翻譯原始碼”獲得本軟體的原始碼。
pyinstaller擴充閱讀:
用Python給我家寶寶寫個翻譯軟體
用pyinstaller打包你的Python程式並繫結CPU
我的公眾號:猿人學 Python 上會分享更多心得體會,敬請關注。
***版權申明:若沒有特殊說明,文章皆是猿人學 yuanrenxue.com 原創,沒有猿人學授權,請勿以任何形式轉載。***