Python教程-在Python中进行情感分析
在本文中,我们将讨论如何在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=["Javatiku 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
输出
下一步是导入所需的库,这将帮助我们执行自然语言处理中涉及的主要过程。
让我们了解标记化、词干提取和停用词这些过程是什么
- 标记化- 这是将文本数据分割成词和短语等较小部分的过程。
- 词干提取- 我们知道所有的根词可以通过在它们上添加前缀和后缀来产生新的单词,有时这可能会改变根词的真实含义,因此词干提取是一个过程,我们在根词上分解这些添加。
- 停用词 - 在停用词去除过程中,我们去除用于形成句子并使其对读者来说有意义且易于理解的单词。我们在文本上执行这一操作以获取帮助我们分析情感的关键字。
代码
from nltk.tokenize import RegexpTokenizer
from nltk.stem.porter import PorterStemmer
from nltk.corpus import stopwords
import nltk
nltk.download('stopwords')
输出
下一步是创建标记器、停用词和PortStemmer的对象。
我们想要连接这些单词,所以我们将使用正则表达式并将w+作为参数传递。
由于我们使用英语,我们将在停用词中指定'english'作为参数。
代码
tokenizer=RegexpTokenizer(r'\w+')
en_stopwords=set(stopwords.words('english'))
ps=PorterStemmer()
输出
下一步是创建一个将清理我们的数据的函数。
我们将文本转换为小写,然后执行标记化。
在给定的函数中,我们同时执行标记化和停用词去除。(token for token in tokens if token not in en_stopwords)
接下来要做的事情是进行词干处理,然后将词干处理的标记连接起来。
代码
def getCleanedText(text):
texttext=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
输出
以下是将用于清理目的的x_test数据。
代码
X_test=["The tutorial that was suggested to me was good", "Rest of the tutorials were bad"]
X_test
输出
在这一步中,我们从X_train和X_test中获取数据并进行了清理。
代码
X_clean=[getCleanedText(j) for j in X_train]
Xt_clean=[getCleanedText(j) for j in X_test]
输出
当我们想检查我们的干净数据是什么样子时,可以通过键入X_clean来进行。
代码
X_clean
输出
在进行分类之前,执行向量化以获得所需的格式非常重要。为此,我们必须导入一些库。
代码
from sklearn.feature_extraction.text import CountVectorizer
cv=CountVectorizer(ngram_range=(1,2))
X_vect=cv.fit_transform(X_clean).toarray()
X_vect
输出
特征名称帮助我们了解值0和1代表什么。这可以通过以下方式完成 -
代码
print(cv.get_feature_names())
Xt_vect=cv.transform(Xt_clean).toarray()
输出
现在,要执行文本分类,我们将使用多项式朴素贝叶斯 -
代码
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中实施它。