Python用於NLP :處理文本和PDF文件

Python用於NLP :處理文本和PDF文件

提示:代碼圖片可以點擊全屏查看,雙指操作還可以放大縮小。

這是我的Python用於自然語言處理(NLP)系列文章的第一篇文章。在本文中,我們將從Python for NLP的基礎知識開始。我們將看到如何使用Python處理簡單的文本文件和PDF文件。

處理文本文件

文本文件可能是你在NLP工作中遇到的最基本類型的文件。在本節中,我們將瞭解如何用Python讀取文本文件,創建文本文件以及將數據寫入文本文件。

閱讀文本文件

使用以下文本創建一個文本文件,並使用“.txt”擴展名將其保存在本地目錄中。

Python用於NLP :處理文本和PDF文件

在我的例子中,我將名為“myfile.txt”的文件存儲在我的D盤根目錄中。

閱讀文件的所有內容

現在讓我們看看我們如何閱讀文件的全部內容。第一步是指定文件的路徑,如下所示:

Python用於NLP :處理文本和PDF文件

要打開文件,你可以使用Python的內置open函數。如果你執行上面的代碼並且沒有看到錯誤,則表示你的文件已成功打開。確保將文件路徑更改為保存文本文件的位置。

現在讓我們看看myfile變量中存儲了什麼:

Python用於NLP :處理文本和PDF文件

輸出如下所示:

Python用於NLP :處理文本和PDF文件

輸出顯示該myfile變量是myfile.txt文件的容器,並以只讀模式打開文件。

如果指定了錯誤的文件路徑,則可能會收到以下錯誤:

Python用於NLP :處理文本和PDF文件Python用於NLP :處理文本和PDF文件

每當你得到Errno 2時,可能有兩個原因。你的文件不存在或者你給open函數提供了錯誤的文件路徑。

現在,讓我們讀一下該文件的內容。為此,你需要在myfile變量上調用read函數,如下所示:

Python用於NLP :處理文本和PDF文件

在輸出中,你應該可以看到文件的文本,如下所示:

現在,如果你嘗試再次調用read,控制檯上將不會打印任何內容:

Python用於NLP :處理文本和PDF文件

這是因為一旦調用該read方法,光標就會移動到文本的末尾。因此,當你再次調用read時,不會顯示任何內容,因為已經沒有更多要打印的文本了。

一個解決這個問題的方案就是在調用read方法之後,調用seek方法並使用0作為參數。

這會將光標移回文本文件的開頭。查看以下代碼以瞭解其工作原理:

Python用於NLP :處理文本和PDF文件

在輸出中,你將看到文本內容被打印了兩次。

一旦完成文件處理後,關閉文件以便其他應用程序可以訪問顯得非常重要。為此,你需要調用close方法。

Python用於NLP :處理文本和PDF文件

逐行讀取文件

我們也可以逐行讀取文件內容,而不是一次讀取文件的所有內容。為此,我們需要執行readlines方法,該方法可以將文本文件中的每一行作為列表項返回。

Python用於NLP :處理文本和PDF文件

在輸出中,你將看到文本文件中的每一行都變為了列表項:

Python用於NLP :處理文本和PDF文件

在多數情況下,這會使文本更容易相處。例如,我們現在可以輕鬆遍歷每一行並打印行中的第一個單詞。

Python用於NLP :處理文本和PDF文件

輸出如下所示:

Python用於NLP :處理文本和PDF文件

寫入文本文件

要寫入文本文件,只需在打開文件時將打開模式設置為w或w+。前者在寫入模式下打開文件,後者在讀取和寫入模式下打開文件。如果該文件不存在,則會創建該文件。值得一提的是,如果你以w或w+模式打開一個文件時,則將移除所有的文件內容,如下所示:

Python用於NLP :處理文本和PDF文件

在輸出中,由於使用w+模式打開文件,因此屏幕上不會顯示任何內容,文件的所有內容都已被刪除。你可以附加文字來避免這種情況,我也會在下面提到。

現在,讓我們使用write方法在文件中寫一些內容。

Python用於NLP :處理文本和PDF文件

在上面的腳本中,我們將文本寫入文件,然後調用seek方法將光標移回開始,然後調用read方法讀取文件的內容。在輸出中,你將看到新添加的內容,如下所示:

Python用於NLP :處理文本和PDF文件

通常,你不需要刪除文件的現有內容。相反,你可能需要在文件末尾添加內容。

為此,你需要以a+模式打開文件,該模式能夠添加和讀取文件內容。

再次創建一個包含以下內容的文件,並在D盤根目錄中將其保存為“myfile.txt”:

Python用於NLP :處理文本和PDF文件

執行以下腳本以使用添加模式打開文件:

Python用於NLP :處理文本和PDF文件

在輸出中,你將看到文件的內容。

接下來,讓我們在文件中添加一些文本。

Python用於NLP :處理文本和PDF文件

現在我們再次閱讀文件內容:

Python用於NLP :處理文本和PDF文件

在輸出中,你將在文末看到新添加的行,如下所示:

Python用於NLP :處理文本和PDF文件

最後,在繼續下一節之前,讓我們看看在執行所需操作後如何使用上下文管理器自動關閉文件。

Python用於NLP :處理文本和PDF文件

使用with關鍵字,如上所示,你不需要明確關閉文件。相反,上面的腳本打開文件,讀取內容,然後自動關閉它。

處理PDF文件

除了文本文件,我們還經常需要使用PDF文件來執行不同的自然語言處理任務。默認情況下,Python沒有任何可用於讀取或寫入PDF文件的內置庫。但是我們可以使用PyPDF2庫。

在我們使用PyPDF2庫之前,需要安裝它。如果你使用pip安裝程序,則可以使用以下命令安裝PyPDF2庫:

Python用於NLP :處理文本和PDF文件

或者,如果你使用的是Anaconda環境中的Python,則可以在conda命令提示符下執行以下命令:

Python用於NLP :處理文本和PDF文件

注意:這裡需要提到的是PDF文檔可以從不同的來源創建,如word文檔,圖像等。在本文中,我們將只處理使用word文檔創建的PDF文檔。對於使用圖像創建的PDF文檔,還有其他專門的庫,我將在後面的文章中解釋。目前,我們只使用使用word文檔生成的PDF文檔。

作為可以使用的虛擬文檔,你可以從以下鏈接下載PDF:http://www.bavtailor.com/wp-content/uploads/2018/10/Lorem-Ipsum.pdf

將下載的文檔保存在D盤根目錄下。

閱讀PDF文檔

要閱讀PDF文檔,首先,我們必須要像其他普通文件一樣打開它。使用以下腳本:

Python用於NLP :處理文本和PDF文件

值得一提的是,在打開PDF文件時,必須將模式設置為“讀取二進制”的rb模式,因為大多數PDF文件都是二進制格式。

打開文件後,我們需要調用PyPDF2庫中的PdfFileReader函數,如下所示:

Python用於NLP :處理文本和PDF文件

現在使用pdf_document變量,我們可以執行各種讀取功能。例如,要獲取PDF文檔中的總頁數,我們可以使用以下numPages屬性:

Python用於NLP :處理文本和PDF文件

由於我們只有一頁文檔,在我們的PDF文檔中,你將在結果中看到1。

最後,要從PDF文檔中提取文本,首先需要使用getPage函數獲取PDF文檔的頁面。

接下來,你可以調用extractText函數從特定頁面中提取文本。

以下腳本從PDF的第一頁中提取文本,然後將其打印在控制檯上。

Python用於NLP :處理文本和PDF文件

在結果中,你應該看到PDF第一頁中的文本。

寫入PDF文檔

由於字體和其他約束,無法使用PyPDF2庫直接將Python字符串寫入PDF文檔。但是,為了演示,我們將從PDF文檔中讀取內容,然後將該內容寫入我們將創建的另一個PDF文件。

讓我們首先閱讀PDF文檔第一頁的內容。

Python用於NLP :處理文本和PDF文件

上面的腳本讀取了我們PDF文檔的第一頁。現在,我們可以使用以下腳本將第一頁中的內容寫入新的PDF文檔:

Python用於NLP :處理文本和PDF文件

上面的腳本創建了一個可用於將內容寫入PDF文件的對象。首先,我們將向這個對象添加一個頁面,並將我們從另一個PDF中檢索到的頁面傳遞給它。

Python用於NLP :處理文本和PDF文件

接下來,我們需要打開一個具有wb(寫二進制)權限的新文件。打開具有此類權限的文件會創建一個新文件,如果文件不存在的話。

Python用於NLP :處理文本和PDF文件

最後,我們需要在PDF編寫對象上調用write方法並將新創建的文件傳遞給它。

Python用於NLP :處理文本和PDF文件

關閉mypdf和pdf_output_file文件,然後轉到程序的工作目錄。你應該在編輯器中看到一個新文件new_pdf_file.pdf。打開文件,你應該看到它包含來自原始PDF的第一頁的內容。

讓我們嘗試閱讀新創建的PDF文檔的內容:

Python用於NLP :處理文本和PDF文件

現在讓我們使用一個更大的PDF文件。從以下鏈接下載PDF文件:

http://ctan.math.utah.edu/ctan/tex-archive/macros/latex/contrib/lipsum/lipsum.pdf

將其保存在本地目錄中。下載文件的名稱為“lipsum.pdf”。

執行以下腳本查看文件中的頁數:

Python用於NLP :處理文本和PDF文件

在輸出中,你將看到打印出87,因為該PDF中有87頁。讓我們在控制檯上打印文檔中的所有頁面:

Python用於NLP :處理文本和PDF文件

在輸出中,你將看到打印在屏幕上的PDF文檔的所有頁面。

結論

閱讀和編寫文本文檔是開發自然語言處理應用程序的基本步驟。在本文中,我們解釋瞭如何使用Python處理文本和PDF文件。我們看到了如何讀寫文本和PDF文件。在下一篇文章中,我們將開始討論其他一些NLP任務,例如使用spaCy庫進行詞幹化,詞形還原化,標記化。

英文原文:https://stackabuse.com/python-for-nlp-working-with-text-and-pdf-files/
譯者:狼行千里吃雞

相關推薦

推薦中...