當前位置:
首頁 > 知識 > 將Python用於NLP:Pattern 庫簡介

將Python用於NLP:Pattern 庫簡介

(此處已添加圈子卡片,請到今日頭條客戶端查看)

這是我有關使用Python進行自然語言處理系列文章中的第八篇。在上一篇文章中,我解釋了如何使用Python的TextBlob庫來執行各種NLP任務,從分詞到詞性標註,從文本分類到情感分析。在本文中,我們將探索Python的Pattern庫,這是另一個非常有用的自然語言處理庫。

Pattern庫是一個多用途的庫,它可以處理以下任務:

  • 自然語言處理: 執行諸如標記、詞幹提取、詞性標註、情感分析等任務。
  • 數據挖掘: 它包含從Twitter、Facebook、Wikipedia等網站挖掘數據的API。
  • 機器學習: 它包含SVM、KNN、感知機等機器學習模型,可用於分類、回歸和聚類任務。

在本文中,我們將看一下上述列表中關於Pattern庫用途的前兩個的應用實例。我們將通過執行標記、詞幹提取和情感分析等任務來探索用於NLP的Pattern庫的用法。我們還將看到如何將Pattern庫用於web數據挖掘。

安裝

你可以使用以下pip命令來安裝這個庫:

將Python用於NLP:Pattern 庫簡介

或者,如果你使用的是Python的Anaconda發布版的話,你可以使用以下Anaconda命令去下載這個庫:

將Python用於NLP:Pattern 庫簡介

用於NLP的Pattern 庫函數

在本節,我們將看一些Pattern庫的NLP應用實例。

標記, 詞性標註,和分塊

在NLTK和spaCy庫中,我們有一個單獨的函數用於標記、詞性標註和在文本文檔中查找名詞短語。相反,在Pattern庫中有一個多用途的parse方法,它接受一個文本字元串作為輸入參數,並返回字元串中相應的標記和詞性標註。

parse方法還會告訴我們一個標記是名詞短語還是動詞短語、主語還是賓語。你還可以通過將lemmata參數設置為True來檢索詞元化的標記。parse方法的語法以及不同參數的默認值如下:

將Python用於NLP:Pattern 庫簡介

我們來實際查看一下 parse 方法:

將Python用於NLP:Pattern 庫簡介

要使用parse方法,你必須從pattern庫導入en模塊。en模塊包含英語NLP函數。如果你使用pprint方法在控制台上列印parse方法的輸出,你將會看到如下輸出:

將Python用於NLP:Pattern 庫簡介

在輸出中,你可以看到標記化的單詞及其詞性標註、該標記所屬的塊和角色。你還會看到這些標記的詞元化形式。

如果你對parse方法返回的對象調用split方法,輸出將是一個句子的列表,其中每個句子都是一個標記列表,每個標記都是一個單詞列表,以及與單詞關聯的標記。

例如,看看下面的腳本:

將Python用於NLP:Pattern 庫簡介

上面腳本的輸出如下:

將Python用於NLP:Pattern 庫簡介

複數化和單數化標記

pluralize 和 singularize 方法可分別用於將單數形式單詞轉換為複數形式,反之亦然。

將Python用於NLP:Pattern 庫簡介

輸出如下:

將Python用於NLP:Pattern 庫簡介

將形容詞轉換成比較級和最高級

你可以使用comparative和 superlative方法來檢索一個形容詞的比較級和最高級。例如,good的比較級是better,最高級是best。我們實際來看一下:

將Python用於NLP:Pattern 庫簡介

輸出:

將Python用於NLP:Pattern 庫簡介

查找N-Gram模型

N-Grams是指一個句子中 「n」個單詞的組合。例如,對於句子「He goes to hospital」,2-grams將是 (He goes), (goes to) 和 (to hospital)。N-Grams在文本分類和語言建模中起著至關重要的作用。

在Pattern庫中,ngram方法用於查找一個文本字元串中的所有的n-grams。ngram方法的第一個參數是文本字元串。n-grams的數字被傳遞給方法的n參數。請看下面的例子:

將Python用於NLP:Pattern 庫簡介

輸出:

將Python用於NLP:Pattern 庫簡介

查找Sentiments(情感)

Sentiment指的是對某件事的看法或感受。Pattern庫提供了從文本字元串中查找sentiment的功能。

在Pattern庫中,sentiment對象是用來發現文本的極性(積極或消極)及其主觀性。

根據最常見的積極形容詞(good, best, excellent等)和消極形容詞(bad, awful, pathetic等),文本的情感得分在1到-1之間。這種情感得分也被稱為極性。

除了情感得分,也會返回主觀性。主觀性值可以在0到1之間。主觀性是對文本中所包含的個人觀點和事實信息的量化。較高的主觀性意味著文本包含的是個人觀點而非事實信息。

將Python用於NLP:Pattern 庫簡介

運行上面的腳本,你應該會看到以下的輸出:

將Python用於NLP:Pattern 庫簡介

"This is an excellent movie to watch. I really love it "這個句子的情感得分為0.75,這表明它是非常積極的。同樣,0.8的主觀性值表明該句子是用戶的個人意見。

檢查一個語句是否為事實

Pattern庫中的modality函數可用於查找文本字元串中的確定度。modality函數返回一個介於-1到1之間的值。對於事實,modality函數會返回一個大於0.5的值。

這裡是一個有關它的實際例子:

將Python用於NLP:Pattern 庫簡介

在上面的腳本中,我們首先導入了parse方法和Sentence類。在第二行,我們導入了modality函數。parse方法將文本作為輸入並返回該文本的標記化形式,並將其傳遞給Sentence類的構造函數。modality方法接受Sentence類對象並返回該句子的模態。

由於文本字元串「Paris is the capital of France」是一個事實,所有,在輸出中,你將看到值1。

同樣,對於一個不確定的句子,modality方法返回的值在0.0左右。請看下面的腳本:

將Python用於NLP:Pattern 庫簡介

由於上面例子中的字元串不是很確定,所以上面字元串的模態為0.25。

拼寫更正

suggest方法可用於查找一個單詞拼寫是否正確。如果一個單詞拼寫100%正確,suggest方法會返回1。否則,suggest方法會返回該單詞的可能更正及其正確性概率。

請看下面的例子:

將Python用於NLP:Pattern 庫簡介

在上面的腳本中,我們有一個單詞Whitle是拼寫錯誤的。在輸出中,你將看到這個單詞的可能建議。

將Python用於NLP:Pattern 庫簡介

根據suggest方法,該單詞是「While」的概率為0.64,是「White」的概率為0.29,等等。

現在我們來正確地拼寫一個單詞:

將Python用於NLP:Pattern 庫簡介

輸出:

將Python用於NLP:Pattern 庫簡介

從輸出中,您可以看到該單詞拼寫正確的幾率為100%。

處理數字

Pattern庫包含將文本字元串形式的數字轉換成對應的數字的函數,反之亦然。要將文本表示轉換為數字表示,可以使用number函數。類似地,要將數字轉換回相應的文本表示形式,可以使用numerals函數。請看下面的腳本:

將Python用於NLP:Pattern 庫簡介

輸出:

將Python用於NLP:Pattern 庫簡介

在輸出中,您將看到122,這是文本「one hundred and twenty-two」的數字表示。類似地,您應該看到「two hundred and fifty-six point thirty-nine」,這是數字256.390的文本表示。

記住,對於numerals函數,我們必須提供我們想要四捨五入到的數字的整數值。

quantify函數用於獲得列表中項目的字數估計,它提供了一個短語來引用組。如果一個列表有3到8個類似的項目,quantify函數將把它量化為「幾個」。兩個項目將被量化為一「對」。

將Python用於NLP:Pattern 庫簡介

在列表中,我們有三個apples,三個bananas和兩個mangoes。這個列表的quantify函數的輸出如下所示:

將Python用於NLP:Pattern 庫簡介

類似地,下面的例子演示了另一個字數估計。

將Python用於NLP:Pattern 庫簡介

輸出:

將Python用於NLP:Pattern 庫簡介

用於數據挖掘的Pattern 庫函數

在上一節中,我們查看了用於NLP的Pattern庫中一些最常用的函數。在本節中,我們將看一下如何使用Pattern庫執行各種數據挖掘任務。

Pattern庫中的web模塊可用於web挖掘任務。

訪問Web頁面

URL對象用於從網頁中檢索內容。它有幾種方法可以用來打開一個網頁、從一個網頁上下載內容和閱讀一個網頁。

你可以直接使用download方法下載任何網頁的HTML內容。下面的腳本下載了關於人工智慧的Wikipedia文章的HTML源代碼。

將Python用於NLP:Pattern 庫簡介

你也可以從網頁上下載文件,例如,使用URL方法下載圖片:

將Python用於NLP:Pattern 庫簡介

上面的腳本中,我們首先使用URL方法與頁面建立連接。接下來,我們在打開的頁面上調用 extension方法,該方法會返迴文件擴展名。文件擴展名會被附加在字元串「football」的末尾。調用open方法來讀取此路徑,最後,download()方法下載圖像並將其寫入默認執行路徑。

查找文本中的 URL

你可以使用findurl方法從文本字元串中提取URL。舉個例子:

將Python用於NLP:Pattern 庫簡介

在輸出中,你將看到谷歌網站的URL,如下圖所示:

將Python用於NLP:Pattern 庫簡介

對網頁進行非同步請求

web頁面可能非常大,下載完整的頁面內容可能需要相當長的時間,這可能會阻止用戶在下載完整個頁面之前對應用程序執行任何其他任務。但是,Pattern庫的web模塊包含一個asynchronous函數,它以並行的方式下載網頁內容。asynchronous方法在後台運行,以便用戶可以在下載網頁的同時與應用程序進行交互。

讓我們舉一個非常簡單的asynchronous方法的例子:

將Python用於NLP:Pattern 庫簡介

在上面的腳本中,我們檢索了搜索查詢「人工智慧」的第1頁的谷歌搜索結果,您可以看到,當頁面下載時,我們並行地執行一個while循環。最後,使用asynchronous模塊返回的對象的value屬性列印查詢後檢索到的結果。接下來,我們從該搜索中提取URL,然後將其列印在屏幕上。

使用API獲取搜索引擎結果

Pattern庫中包含了SearchEngine類,它由一些類派生而來,這些類可用於連接並調用不同搜索引擎和網站的API,如谷歌、Bing、Facebook、Wikipedia、Twitter等。SearchEngine對象構造器接受三個參數:

  • license:對應於搜索引擎或網站的開發者許可密鑰
  • throttle:對應於對伺服器的連續請求之間的時間差
  • langauge:指定結果的語言

SearchEngine類的search方法用於對特定的搜索查詢向搜索引擎發出一個請求。search方法可接受以下參數:

  • query: 搜索的字元串。
  • type: 你想搜索的數據類型,它可以有三個值: SEARCH, NEWS和IMAGE。
  • start: 您想要開始搜索的頁面。
  • count: 每頁的結果數量。

繼承了SearchEngine類及其search方法的搜索引擎類有: Google, Bing, Twitter, Facebook, Wikipedia, 和 Flickr。

搜索查詢會返回每個項的對象。然後可以使用result對象檢索關於搜索結果的信息。result對象的屬性有url, title, text, language, author, date。

現在我們來看一個關於如何通過pattern庫在谷歌上搜索某些內容的簡單例子。請記住,要使這個例子工作,你必須使用你的谷歌API開發人員許可密鑰。

將Python用於NLP:Pattern 庫簡介

在上面的腳本中,我們創建了一個Google類的對象。在Google的構造函數中,將您自己的許可證密鑰傳遞給license參數。接下來,我們將字元串artificial intelligence傳遞給search方法。默認情況下,該方法會返回第一個頁面的前10個結果,然後迭代這些結果,每個結果的url和文本將顯示在屏幕上。

Bing搜索引擎的過程與此類似,你只需要將上面腳本中的Google替換為Bing類即可。

現在我們來在Twitter上搜索包含文本「人工智慧」的最新的三條推文。執行以下腳本:

將Python用於NLP:Pattern 庫簡介

在上面的腳本中,我們首先從pattern.web模塊中導入Twitter類。接下來,我們對Twitter類返回的tweets進行迭代,並在控制台上顯示tweet的文本。運行上述腳本不需要任何許可證密鑰。

將HTML 數據轉換成純文本

URL類的download方法會以HTML的形式返回數據。但是,如果你想對文本進行語義分析,例如,情感分類,那你就需要清洗過的沒有HTML標記的數據。你可以使用plaintext方法清洗數據。該方法以download方法返回的HTML內容作為參數,並返回已清洗的文本。

看看下面的腳本:

將Python用於NLP:Pattern 庫簡介

在輸出中,你會看到來自頁面的清洗後的文本:

https://stackabuse.com/python-for-nlp-introduction-to-the-textblob-library/.

重要的一點是,如果您正在使用Python3,您將需要調用decode("utf-8")方法來將數據從位元組轉換為字元串格式。

解析 PDF 文檔

Pattern庫包含可用於解析PDF文檔的PDF對象。PDF(攜帶型文檔格式)是一個跨平台文件,它將圖像、文本和字體包含在一個獨立文檔中。

我們來看看如何使用PDF對象來解析一個PDF文檔:

將Python用於NLP:Pattern 庫簡介

在腳本中,我們使用download函數下載了一個文檔。接下來,我們將下載的HTML文檔傳遞給PDF類,並最終將其列印到控制台。

清理緩存

默認情況下,SearchEngine.search()和URL.download()等方法返回的結果被存儲在本地緩存中。要在下載完HTML文檔後清除緩存,我們可以使用cache類的clear方法,如下所示:

將Python用於NLP:Pattern 庫簡介

結論

Pattern庫是Python中最有用的自然語言處理庫之一。雖然它不像spaCy或NLTK那麼有名,但是它包含了查找最高級和比較級、事實和意見檢測等功能,這些功能使它區別於其他NLP庫。

在本文中,我們研究了Pattern庫在自然語言處理、數據挖掘和web抓取方面的應用。我們了解了如何使用Pattern庫執行基本的NLP任務,如標記化、詞形還原和情感分析。最後,我們還了解了如何使用Pattern庫進行搜索引擎查詢、爬取在線tweet和清理HTML文檔。


英文原文:https://stackabuse.com/python-for-nlp-introduction-to-the-pattern-library/

譯者:天天向上

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python部落 的精彩文章:

在你的Python應用程序中測試MongoDB故障轉移
Python標準庫可能準備大清洗了!

TAG:Python部落 |