在本文中,我們將討論 Python 中的情感分析。這個應用再次證明了這種編程語言的多功能性。但是在開始情緒分析之前,讓我們看看我們所有人都必須意識到的背景是什麼-
所以,我們在這裡討論-
- 什麼是自然語言處理?
- 什麼是自然語言處理工具包?
- 樸素貝葉斯算法
- 情感分析
讓我們從自然語言處理開始–
簡單地說,我們可以說計算機能夠理解和處理人類語言。這裡的目標是從文本數據中獲得有用的信息。作為輸入給出的原始數據要經歷不同的處理階段,以便我們對其執行所需的操作。
在數據清理階段,我們獲得一個單詞列表,稱為乾淨文本。其中涉及的一些步驟是分詞、停止單詞移除、詞幹和向量化(將單詞轉換為數字的處理),然後最後我們執行分類,也稱為文本標記或文本分類,這裡我們將文本分類到定義明確的組中。
所以,這都是關於自然語言處理的,現在讓我們看看開源工具自然語言處理工具包是如何幫助我們的。
這是一個我們用來編寫 Python 程序的平台,可以應用於實現自然語言處理的所有預處理階段。
現在,下一個任務是對我們的文本進行分類,這可以使用樸素貝葉斯算法來完成,所以讓我們了解它是如何工作的?
這種監督算法的原理是基於貝葉斯定理,我們利用這個定理來尋找條件概率。
貝葉斯定理由給定的數學公式表示
*P(A|B) = P(B|A)P(A)/P(B)**
P(A|B)(後驗概率)- 當事件 B 已經發生時,事件 A 發生的概率。
P(B|A)(似然概率)- 當事件 A 已經發生時,事件 B 發生的概率
P(A)(在先)—事件 A 發生的概率
P(B)(邊際)- 事件 B 發生的概率
情感分析
了解了先決條件之後,讓我們試着詳細了解一下情緒分析是關於什麼的,以及我們如何在 Python 中實現它?
情感分析用於檢測或識別文本中包含的情感。
這種分析有助於我們獲得文本的參考,這意味着我們可以理解內容是積極的、消極的或中立的。
從目前的情況來看,所有的商業巨頭都需要清楚地知道他們的產品從客戶那裡得到了什麼樣的回應,以及如何根據不斷出現的需求來整合這些變化。
以下是情緒分析過程中涉及的步驟-
- 正在導入數據集。
數據集可以從可信的資源中獲取,並可以使用 read_csv 導入到我們的代碼編輯器中。 - 下一個關鍵步驟是找出影響我們目標情感的特徵。
- 一旦我們根據可視化得出結論,我們就可以進入下一步,即創建「單詞雲」。
- 下一步是將評論分為正面和負面。
- 現在我們將為這兩個評論創建單詞雲。
- 在條形圖的幫助下,可以理解數據集中獲得的單詞雲的數量。
- 這個模型可以用-
- 首先,清理數據,確保所有預處理階段都得到遵循。
- 下一步是分割只包含所需特徵的數據幀。
- 創建一個單詞包,這意味着進行向量化,文本可以轉換成整數矩陣。
- 現在我們將導入邏輯回歸,它將使用分類變量實現回歸。
- 現在讓我們把數據分成自變量和目標。
- 讓我們將訓練數據集放入模型中。
- 接下來,我們可以獲取測試數據集並進行預測。
- 最後的任務是使用評估指標測試我們模型的準確性。
讓我們藉助一個例子來理解這一點-
在這裡,我們在訓練數據集(x_train)中取了一些句子,在 y_train 中取值 0 和 1,其中 1 表示正,0 表示負。
代碼
X_train=["JavaTpoint provides best tutorial for students",
"It is a great platform to start off your IT career",
"Concepts are explained very well",
"The articles have some interesting examples",
"Some tutorials are bad",
"Their content can confuse students"]
y_train=[1,1,1,1,0,0] #1-Positive, 0 -Negative
X_train
輸出
2.下一步是導入所需的庫,幫助我們實現自然語言處理中涉及的主要過程。
讓我們了解什麼是分詞、詞幹和停止詞-
- 分詞- 是將我們的文本數據拆分成單詞、短語等更小部分的過程。
- 詞幹- 我們知道,所有的詞根基本詞都可以通過添加前綴和後綴來產生新詞,有時這可能會改變詞根的真正含義,所以詞幹是我們在詞根上分解這些添加的過程。
- Stopwords – 在 Stopwords 的去除過程中,我們去除了構成句子時用到的詞語,使其變得通情達理,便於讀者理解。我們對文本執行此操作,以獲得幫助我們分析情感的所需關鍵詞。
代碼
from nltk.tokenize import RegexpTokenizer
from nltk.stem.porter import PorterStemmer
from nltk.corpus import stopwords
import nltk
nltk.download('stopwords')
輸出
3.下一步是創建分詞器、停止詞和 PortStemmer 的對象。
我們想要連接這些單詞,所以我們將使用正則表達式並傳遞\w+作為參數。
由於我們使用英語,我們將在 stopwords 中指定「英語」作為參數。
代碼
tokenizer=RegexpTokenizer(r'\w+')
en_stopwords=set(stopwords.words('english'))
ps=PorterStemmer()
輸出
4.下一步是創建一個函數來清理我們的數據。
我們將把文本轉換成小寫,然後實現分詞。
在給定的函數中,我們同時執行分詞和停用詞移除。(令牌中令牌的令牌,如果令牌不在 en_stopwords 中)
下一步是執行詞幹,然後加入詞幹標記。
代碼
def getCleanedText(text):
text=text.lower()
#tokenize
tokens=tokenizer.tokenize(text)
new_tokens=[token for token in tokens if token not in en_stopwords]
stemmed_tokens=[ps.stem(tokens) for tokens in new_tokens]
clean_text=" ".join(stemmed_tokens)
return clean_text
輸出
5.以下是我們的 x_test 數據,將用於清潔目的。
代碼
X_test=["The tutorial that was suggested to me was good", "Rest of the tutorials were bad"]
X_test
輸出
6.在這一步中,我們已經從 X_train 和 X_test 獲取了我們的數據,並對其進行了清理。
代碼
X_clean=[getCleanedText(j) for j in X_train]
Xt_clean=[getCleanedText(j) for j in X_test]
輸出
7.當我們想要檢查乾淨數據的外觀時,我們可以通過鍵入 X_clean-
代碼
X_clean
輸出
8.在進行分類之前,執行向量化以獲得所需的格式非常重要。為此,我們必須導入一些庫。
代碼
from sklearn.feature_extraction.text import CountVectorizer
cv=CountVectorizer(ngram_range=(1,2))
X_vect=cv.fit_transform(X_clean).toarray()
X_vect
輸出
9.特徵名幫助我們知道值 0 和 1 代表什麼。這可以通過使用-
代碼
print(cv.get_feature_names())
Xt_vect=cv.transform(Xt_clean).toarray()
輸出
10.現在為了進行文本分類,我們將使用多項式樸素貝葉斯
代碼
from sklearn.naive_bayes import MultinomialNB
mlb=MultinomialNB()
mlb.fit(X_vect,y_train
y_pred=mlb.predict(Xt_vect)
y_pred
輸出
關於預測,它以數組[1,0]的形式給出結果,其中 1 表示測試集中的正,0 表示負。
因此,在本文中,我們討論了理解情緒分析的先決條件以及如何在 Python 中實現它。
原創文章,作者:IR2E9,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/129709.html