Matlab如何讀取PDF文件
早期關注過我的朋友,不知道你們還記不記得,曾經我寫過一篇關於Matlab讀取PDF文件的帖子「別讓低質量的忙碌製造一個努力的幻想」。現在回過頭來看這篇帖子覺得,思路還好,不過其中藉助了vbs語言。
今天我主要是想來聊聊,如果僅僅只靠Matlab,是否能夠實現PDF文件的讀取,先來看一下整體效果。
下面這幅圖所展示的是一個PDF文件,整體的需求是,將PDF文件中的數據,錄入到Excel表格中。如之前所說,這個PDF的格式有些奇怪,一共有44頁,每次全選,每次全選都只能選中當前頁面的數據,整個文件大概有1600行數據,手工錄入的話,需要複製粘貼將近4000次。
如果僅僅只是複製粘貼到Excel表格的話,在這裡,我介紹一個最快速的辦法,打開Word,通過Word打開PDF文件,然後直接複製整個表格到Excel中,最後對格式稍作修改,整個需求就滿足了。
不過,如果需要對文本內容進行加工,那麼可以通過腳本的形式,讀取PDF中的文本,進行正則處理,動圖效果如下
最終獲取到的字元串如下所示,至於字元串正則處理,在這裡就不再過多說明,如果有興趣,以後可以專門開一貼來講解。
接下來從代碼邏輯層面上聊一聊,Matlab讀取PDF文本數據是如何實現的。
整體思路上,是非常簡單的,正如我剛才介紹過的,最主要是通過Word的形式打開PDF文件,然後讀取Word文件中的文本數據。所以,針對這個思路,可以將問題解析為兩個小問題:
1) 如何通過Word的形式打開PDF文件
2) 如何讀取Word文件中的文本數據
對於第一個問題,很容易解決。在上一篇帖子中,我也舉例介紹了,如何通過Matlab在生成Word文檔。對於打開PDF文件,可以通過這個函數來實現,其中fullpathname是一個包含目標PDF文件的路徑以及文件名。
document = invoke(documents,Open,fullpathname);
接下來重點來看,如何讀取Word文件中的文本數據。我曾經在Matlab論壇中讀到一篇帖子,是關於這方面的,我把他的代碼複製到下方,有興趣的朋友可以點擊這個鏈接,查看原來的帖子
http://www.ilovematlab.cn/thread-71062-1-1.html
不過他所採取的方法,我並不推薦,稍後我會解釋原因
隨機拿一個Word文檔做測試,整個文檔一共903字,通過tic和toc函數來測試上述代碼運行的時間,測試結果如下,一共為64.47秒
那麼,我換另一種形式來讀取同樣的文檔,運行時間測試結果如下,一共為0.54秒
運行速度提高了將近120倍。
其中唯一的原因是,在他的代碼中,我打紅框的部分,是一個循環。所以,在編程過程中,千萬要慎重使用循環。
對於整個代碼,我所做的更改是,取消循環,再只用增加一行函數就好
a = get(Document.Content,text)
今天寫這篇帖子的目的,除了介紹Matlab如何讀取PDF文件之外,我更想說的是:
編程的思路有千萬種,幾個月前我覺得巨完美的解法,也有可能被分分鐘顛覆。
多考慮一下是否有更好的辦法,多考慮一下這裡是否有用循環的必要,多考慮一下曾經寫的代碼是否還能優化。
多思考,因為努力是從來不會騙人的。
以上
如果你有興趣,歡迎關注我的微信公眾號「打浦橋程序員」,謝謝
推薦閱讀:
※有哪些適合matlab初學者編寫、同時簡單實用的結構分析小程序?
※Python3 CookBook | 數據結構和演算法(一)
※為什麼 Go 語言把類型放在後面?
※DeepLearning筆記:Activation Function 激活函數