使用 NLTK 进行情绪分析
上篇:【NLTK系列】:nltk库介绍(01)_无水先生的博客-CSDN博客
一、说明
上篇《NLTK库介绍》介绍了NLTK的基本用法,本篇介绍NLTK的一个具体应用:“使用 NLTK 进行情绪分析”,本文示范如何应用NLTK完成一个独立小项目。
二、什么是情绪分析?
情绪分析(也称为观点挖掘)是一种自然语言处理 (NLP) 方法,用于确定数据是正面、负面还是中立。对文本数据的情感分析经常用于帮助组织监控消费者反馈中的品牌和产品情绪并了解客户需求。
NLTK的意思是自然语言处理工具包是python中的一个软件包,专门用于基于文本的分析。这些是所需的步骤:
1.导入必要的模块
2.导入数据集
3.数据预处理与可视化
4.模型构建
5.预测
三. 导入必要的模块:
在这里,我们将根据您的数据导入所需的所有基本导入模块。
import nltk
import random
import pandas as pd
import time
from bs4 import BeautifulSoup
import re
from nltk.corpus import stopwords
from nltk.sentiment import SentimentIntensityAnalyzer
from nltk.tokenize import word_tokenize
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import classification_report
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
四. 导入数据集:
现在,您可以使用熊猫导入数据集
df = pd.read_csv('your_data_here.csv')
or
dataset = pd.read_csv('your_data_here.csv')
五. 数据预处理和可视化:
数据预处理将数据更改为可以在数据挖掘、机器学习和其他数据科学任务中更轻松、更高效地处理的格式。
访问数据后,我们对其进行了清理。我们可以通过使用“isnull().sum()”技术快速确定数据集中缺失值的总数。
dataset.isnull().sum()
然后我们可以替换 null 值或删除包含 null 值的相应行,以删除我们使用
dataset = data.dropna()
有关数据可视化的更多信息,请点击此处
六. 模型构建:
在开始开发模型之前,我们需要先做一个快速任务。我们知道,为了让我们正确理解然后对评论进行分类,人类需要冠词、行列式、连词、标点符号等。但对于机器来说,情况并非如此。因此,他们并不真正需要这些来对情绪进行分类;相反,如果他们在场,他们就会变得困惑。因此,需要“nltk”库才能完成此任务,就像任何其他情绪分析一样。
“自然语言处理工具包”是首字母缩略词NLTK所代表的。这是执行情绪分析或任何基于文本的 ML 项目的基本库之一。因此,借助此库,您可以从删除标点符号开始,然后删除不会为文本添加任何有意义的单词。首先使用名为“punc_clean”的函数从每个审阅中删除所有标点符号。以下代码将实现相同的内容:
import nltk
def punc_clean(text):
import string as st
a=[w for w in text if w not in st.punctuation]
return ''.join(a)
dataset['review'] = dataset['review'].apply(punc_clean)
dataset.head(2)
因此,标点符号被上面的代码删除。接下来,我们必须删除任何不会为语句添加含义的术语。这些术语被称为“停用词”,但我们希望保留“not”一词,因此我们使用此代码。
def remove_stopword(text):
stopword=nltk.corpus.stopwords.words('english')
stopword.remove('not')
a=[w for w in nltk.word_tokenize(text) if w not in stopword]
return ' '.join(a)
data['review'] = data['review'].apply(remove_stopword)
因此,我们目前只落后模型构建一步。下一个目标是为每个评论中的每个单词分配一个情绪分数。为了实现它,我们必须使用“sklearn”模块中的“TfidVectorizer”库,该库包含在“feature_extraction.text”中。应仔细阅读“TfidVectorizer”文档,以彻底掌握该库。
from sklearn.feature_extraction.text import TfidfVectorizer
vectr = TfidfVectorizer(ngram_range=(1,2),min_df=1)
vectr.fit(data['review'])
vect_X = vectr.transform(data['review'])
现在是构建模型的时候了。由于情绪分析是二元分类,因此“1”表示正面评价,“0”表示负面评价。
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
clf=model.fit(vect_X,data['sentiment'])
clf.score(vect_X,data['sentiment'])*100
七. 预测:
因此,为了澄清模型的性能,我使用了两个简单的句子“我爱面包”和“我讨厌面包”,它们清楚地指的是积极和消极的情绪。
参考资料更多在这里: https://www.analyticsvidhya.com/blog/2021/06/sentiment-analysis-using-nltk-a-practical-approach/
玛丽亚姆·阿布巴卡尔