在本文中,我们将讨论 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 中实现它。