首頁 > 科技週邊 > IT業界 > 開始使用Python的自然語言處理

開始使用Python的自然語言處理

Joseph Gordon-Levitt
發布: 2025-02-10 10:51:09
原創
730 人瀏覽過

Getting Started with Natural Language Processing in Python

當今世界,大量數據是非結構化的,例如社交媒體評論、瀏覽歷史和客戶反饋等文本數據。面對海量文本數據卻不知從何下手分析? Python 的自然語言處理 (NLP) 技術可以助您一臂之力!

本教程旨在指導您運用 NLP 的核心概念,使用 Python 分析文本數據。我們將學習如何將文本分解成更小的單元(詞元化),將單詞規範化為詞幹形式(詞幹提取和詞形還原),以及如何清理文檔以準備進一步分析。

讓我們開始吧!

核心要點

  • Python 的自然語言處理 (NLP) 包括將文本分解成詞元,將單詞規範化為詞幹形式,以及清理文檔以準備進一步分析。我們將使用 Python 的 NLTK 庫來執行這些操作。
  • 將單詞轉換為詞幹形式的兩種技術是詞幹提取和詞形還原。詞幹提取是一種簡單的算法,它去除單詞的詞綴;而詞形還原則根據文本的上下文和詞彙表將單詞規範化。
  • NLP 中的數據清理包括去除標點符號和停用詞(例如“I”、“a”和“the”等常用詞),因為這些詞在分析文本時幾乎不提供任何意義。
  • 清理文本後,可以使用 NLTK 的 FreqDist 類查找單詞頻率。這對於查找文本中常用的術語非常有用。

前提條件

本教程將使用 Python 的 NLTK 庫對文本執行所有 NLP 操作。撰寫本教程時,我們使用的是 NLTK 3.4 版本。您可以使用終端上的 pip 命令安裝該庫:

pip install nltk==3.4
登入後複製
登入後複製
登入後複製
登入後複製

要檢查系統中安裝的 NLTK 版本,可以將庫導入 Python 解釋器並檢查版本:

import nltk
print(nltk.__version__)
登入後複製
登入後複製
登入後複製
登入後複製

在本教程中,為了執行 NLTK 中的某些操作,您可能需要下載特定的資源。我們將在需要時對每個資源進行描述。

但是,如果您想避免在教程後期逐個下載資源,可以現在一次性下載所有資源:

python -m nltk.downloader all
登入後複製
登入後複製
登入後複製
登入後複製

步驟 1:詞元化

計算機系統無法自行理解自然語言。處理自然語言的第一步是將原始文本轉換為詞元。詞元是具有某種意義的連續字符的組合。如何將句子分解成詞元取決於您自己。例如,一種簡單的方法是按空格分割句子以將其分解成單個單詞。

在 NLTK 庫中,您可以使用 word_tokenize() 函數將字符串轉換為詞元。但是,您首先需要下載 punkt 資源。在終端中運行以下命令:

nltk.download('punkt')
登入後複製
登入後複製
登入後複製

接下來,您需要從 nltk.tokenize 導入 word_tokenize 以使用它:

from nltk.tokenize import word_tokenize
print(word_tokenize("Hi, this is a nice hotel."))
登入後複製
登入後複製
登入後複製

代碼的輸出如下:

pip install nltk==3.4
登入後複製
登入後複製
登入後複製
登入後複製

您會注意到,word_tokenize 不僅僅是基於空格分割字符串,還會將標點符號也分離成詞元。保留或去除標點符號取決於您的分析需求。

步驟 2:將單詞轉換為詞幹形式

在處理自然語言時,您經常會注意到同一個單詞存在各種語法形式。例如,“go”、“going”和“gone”都是同一個動詞“go”的不同形式。

雖然您的項目可能需要保留單詞的各種語法形式,但讓我們討論一種將同一個單詞的不同語法形式轉換為其詞幹形式的方法。您可以使用兩種技術將單詞轉換為其詞幹形式。

第一種技術是詞幹提取。詞幹提取是一種簡單的算法,它去除單詞的詞綴。 NLTK 中有多種可用的詞幹提取算法。在本教程中,我們將使用 Porter 算法。

我們首先從 nltk.stem.porter 導入 PorterStemmer。接下來,我們將詞幹提取器初始化為 stemmer 變量,然後使用 .stem() 方法查找單詞的詞幹形式:

import nltk
print(nltk.__version__)
登入後複製
登入後複製
登入後複製
登入後複製

上面代碼的輸出是 go。如果您對上面描述的“go”的其他形式運行詞幹提取器,您會注意到詞幹提取器返回相同的詞幹形式“go”。但是,由於詞幹提取只是一個基於去除單詞詞綴的簡單算法,因此當單詞在語言中使用頻率較低時,它會失效。

例如,當您嘗試對單詞“constitutes”使用詞幹提取器時,它會給出不直觀的結果:

python -m nltk.downloader all
登入後複製
登入後複製
登入後複製
登入後複製

您會注意到輸出是“constitut”。

這個問題可以通過採用更複雜的方法來解決,該方法是在給定的上下文中查找單詞的詞幹形式。這個過程稱為詞形還原。詞形還原根據文本的上下文和詞彙表將單詞規範化。在 NLTK 中,您可以使用 WordNetLemmatizer 類對句子進行詞形還原。

首先,您需要從 NLTK 下載器在 Python 終端下載 wordnet 資源:

nltk.download('punkt')
登入後複製
登入後複製
登入後複製

下載完成後,您需要導入 WordNetLemmatizer 類並對其進行初始化:

from nltk.tokenize import word_tokenize
print(word_tokenize("Hi, this is a nice hotel."))
登入後複製
登入後複製
登入後複製

要使用詞形還原器,請使用 .lemmatize() 方法。它接受兩個參數:單詞和上下文。在我們的示例中,我們將使用“v”作為上下文。在查看 .lemmatize() 方法的輸出後,我們將進一步探討上下文:

<code>['Hi', ',', 'this', 'is', 'a', 'nice', 'hotel', '.']</code>
登入後複製
登入後複製

您會注意到,.lemmatize() 方法正確地將單詞“constitutes”轉換為其詞幹形式“constitute”。您還會注意到,詞形還原比詞幹提取花費的時間更長,因為該算法更複雜。

讓我們檢查如何以編程方式確定 .lemmatize() 方法的第二個參數。 NLTK 有一個 pos_tag() 函數,它有助於確定句子中單詞的上下文。但是,您首先需要通過 NLTK 下載器下載 averaged_perceptron_tagger 資源:

pip install nltk==3.4
登入後複製
登入後複製
登入後複製
登入後複製

接下來,導入 pos_tag() 函數並在句子上運行它:

import nltk
print(nltk.__version__)
登入後複製
登入後複製
登入後複製
登入後複製

您會注意到,輸出是一個對列表。每一對都包含一個詞元及其標籤,該標籤表示詞元在整個文本中的上下文。請注意,標點符號的標籤就是它本身:

python -m nltk.downloader all
登入後複製
登入後複製
登入後複製
登入後複製

如何解碼每個詞元的上下文?以下是網絡上所有標籤及其相應含義的完整列表。請注意,所有名詞的標籤都以“N”開頭,所有動詞的標籤都以“V”開頭。我們可以在 .lemmatize() 方法的第二個參數中使用此信息:

nltk.download('punkt')
登入後複製
登入後複製
登入後複製

上面代碼的輸出如下:

from nltk.tokenize import word_tokenize
print(word_tokenize("Hi, this is a nice hotel."))
登入後複製
登入後複製
登入後複製

此輸出符合預期,“constitutes”和“magistrates”分別轉換為“constitute”和“magistrate”。

步驟 3:數據清理

準備數據的下一步是清理數據並去除任何不會為您的分析增加意義的內容。總的來說,我們將研究如何從分析中去除標點符號和停用詞。

去除標點符號是一項相當簡單的任務。 string 庫的 punctuation 對象包含英語中的所有標點符號:

<code>['Hi', ',', 'this', 'is', 'a', 'nice', 'hotel', '.']</code>
登入後複製
登入後複製

此代碼片段的輸出如下:

from nltk.stem.porter import PorterStemmer
stemmer = PorterStemmer()
print(stemmer.stem("going"))
登入後複製

為了從詞元中去除標點符號,您可以簡單地運行以下代碼:

print(stemmer.stem("constitutes"))
登入後複製

接下來,我們將重點介紹如何去除停用詞。停用詞是語言中常用的詞,例如“I”、“a”和“the”,在分析文本時,這些詞幾乎不提供任何意義。因此,我們將從分析中去除停用詞。首先,從 NLTK 下載器下載 stopwords 資源:

nltk.download('wordnet')
登入後複製

下載完成後,從 nltk.corpus 導入 stopwords 並使用 words() 方法,其中“english”作為參數。這是一個包含英語中 179 個停用詞的列表:

from nltk.stem.wordnet import WordNetLemmatizer
lem = WordNetLemmatizer()
登入後複製

我們可以將詞形還原示例與本節中討論的概念結合起來,創建以下函數 clean_data()。此外,在比較單詞是否屬於停用詞列表的一部分之前,我們將將其轉換為小寫。這樣,如果停用詞出現在句首並大寫,我們仍然可以捕獲它:

print(lem.lemmatize('constitutes', 'v'))
登入後複製

此示例的輸出如下:

nltk.download('averaged_perceptron_tagger')
登入後複製

如您所見,標點符號和停用詞已被去除。

單詞頻率分佈

現在您已經熟悉了 NLP 中的基本清理技術,讓我們嘗試查找文本中單詞的頻率。在本練習中,我們將使用童話故事《老鼠、鳥和香腸》的文本,該文本可在古騰堡項目上免費獲得。我們將把這個童話故事的文本存儲在一個字符串 text 中。

首先,我們對 text 進行詞元化,然後使用上面定義的函數 clean_data 對其進行清理:

pip install nltk==3.4
登入後複製
登入後複製
登入後複製
登入後複製

要查找文本中單詞的頻率分佈,可以使用 NLTK 的 FreqDist 類。使用詞元作為參數初始化該類。然後使用 .most_common() 方法查找常用術語。在本例中,讓我們嘗試查找前十個術語:

import nltk
print(nltk.__version__)
登入後複製
登入後複製
登入後複製
登入後複製

以下是這個童話故事中出現頻率最高的十個術語:

python -m nltk.downloader all
登入後複製
登入後複製
登入後複製
登入後複製

不出所料,三個最常見的術語是童話故事中的三個主要人物。

在分析文本時,單詞的頻率可能並不重要。通常,NLP 的下一步是生成統計數據——TF-IDF(詞頻-逆文檔頻率)——它表示單詞在一組文檔中的重要性。

結論

在本教程中,我們初步了解了 Python 中的自然語言處理。我們將文本轉換為詞元,將單詞轉換為其詞幹形式,最後清理文本以去除任何不會為分析增加意義的部分。

雖然在本教程中我們研究了簡單的 NLP 任務,但還有許多其他技術需要探索。例如,我們可能希望對文本數據執行主題建模,其目標是查找文本可能討論的共同主題。 NLP 中一項更複雜的任務是實現情感分析模型以確定任何文本背後的情感。

有任何意見或問題?請隨時在 Twitter 上聯繫我。

關於使用 Python 進行自然語言處理的常見問題 (FAQ)

自然語言處理 (NLP) 和自然語言理解 (NLU) 的主要區別是什麼?

自然語言處理 (NLP) 和自然語言理解 (NLU) 是人工智能的兩個子領域,經常被混淆。 NLP 是一種更廣泛的概念,它包含所有用於使用自然語言與計算機交互的方法。這包括理解和生成人類語言。另一方面,NLU 是 NLP 的一個子集,專門處理理解方面。它涉及使用算法以有價值的方式理解和解釋人類語言。

如何提高 Python 中 NLP 模型的準確性?

提高 NLP 模型的準確性涉及多種策略。首先,您可以使用更多訓練數據。您的模型擁有的學習數據越多,其性能就越好。其次,考慮使用不同的 NLP 技術。例如,如果您使用的是詞袋 (BoW),您可能需要嘗試詞頻-逆文檔頻率 (TF-IDF) 或 Word2Vec。最後,微調模型的參數也可以帶來顯著改進。

NLP 在現實世界中的常見應用有哪些?

NLP 在現實世界中具有廣泛的應用。這些包括語言翻譯、情感分析、聊天機器人、Siri 和 Alexa 等語音助手、文本摘要和電子郵件垃圾郵件檢測。

NLP 中的詞元化是如何工作的?

詞元化是將文本分解成單個單詞或詞元的過程。這是 NLP 中的一個關鍵步驟,因為它允許模型理解和分析文本。在 Python 中,您可以使用 NLTK 庫的 word_tokenize 函數來執行詞元化。

停用詞在 NLP 中的作用是什麼?

停用詞是常用詞,在 NLP 的預處理階段經常被過濾掉,因為它們不包含太多有意義的信息。示例包括“is”、“the”、“and”等。去除這些詞可以幫助提高 NLP 模型的性能。

如何在 NLP 中處理多種語言?

由於語法、句法和詞彙的差異,在 NLP 中處理多種語言可能具有挑戰性。但是,Python 的 NLTK 庫支持多種語言。您還可以使用像 langdetect 這樣的語言檢測庫來識別文本的語言,然後再對其進行處理。

NLP 中的詞幹提取和詞形還原是什麼?

詞幹提取和詞形還原是用於將單詞簡化為其詞乾或詞根形式的技術。它們之間的主要區別在於,詞幹提取經常會創建不存在的單詞,而詞形還原則將單詞簡化為其語言上正確的詞根形式。

如何將 NLP 用於情感分析?

情感分析涉及確定文本中表達的情感。這可以使用各種 NLP 技術來完成。例如,您可以使用 Python 中的 TextBlob 庫輕鬆執行情感分析。

NLP 中的 n 元語法是什麼?

n 元語法是給定文本或語音樣本中 n 個連續項目的連續序列。它們用於 NLP 來預測序列中的下一個項目。例如,在二元語法 (n=2) 中,您考慮單詞對進行分析或預測。

如何將 NLP 用於文本分類?

文本分類涉及將文本分類到預定義的類別中。這可以使用各種 NLP 技術和機器學習算法來完成。例如,您可以使用詞袋或 TF-IDF 進行特徵提取,然後將這些特徵輸入機器學習模型進行分類。

以上是開始使用Python的自然語言處理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板