情感分析是理解客户评价情感倾向的关键技术,主要用于电商平台或需要客户反馈的任何平台,以便让人们表达他们对产品或事物的体验。本文将展示如何在Flipkart数据集上进行情感分析。Flipkart是印度领先的电商平台之一,与Snapdeal、Myntra、Nykaa和IndiaMART等竞争。随着世界数字化的快速发展,电商平台正在蓬勃发展,尽最大可能提供服务给人们。
产品评价的情感分析是一种可以开启了解产品性能的方式,这对未来的顾客和电商平台都是有益的。电商平台可以通过情感分析技术改进其产品和服务。情感分析还可以帮助公司更好地理解产品,并规划未来的产品方向。
实践操作使用Python语言,并在Google Colab笔记本中实现。首先,需要导入以下库:
import nltk
nltk.download('stopwords')
nltk.download('vader_lexicon')
import re
from nltk.corpus import stopwords
import string
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import plotly.express as px
from nltk.sentiment.vader import SentimentIntensityAnalyzer
from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
数据集包含了客户从Flipkart购买的产品的评论。这些评论是客户通过Flipkart购买的产品的体验,并对该产品给出评分。Flipkart的数据集包含3列:产品名称、客户对产品的评论以及客户给出的1至5星的评分。
空值可能会影响数据集的整体形态,从而影响情感分析。需要检查数据集是否包含空值。如果数据集中没有空值,就可以开始进行情感分析。
data.isnull().sum()
评论列的数据清洗使用正则表达式、词干提取和停用词进行。词干提取是将单词转换为其基本形式的过程。简而言之,词干提取将单词简化为其基本形式,使得相似的单词归为一类,这有助于算法更好地理解文本数据。SnowballStemmer是基于Porter Stemmer的词干提取算法。正则表达式用于检查字符串是否包含特定的搜索模式。
stemmer = nltk.SnowballStemmer("english")
stopword = set(stopwords.words('english'))
def clean(text):
text = str(text).lower()
text = re.sub('[.*?]', '', text)
text = re.sub('https?://S+|www.S+', '', text)
text = re.sub('+', '', text)
text = re.sub('[%s]' % re.escape(string.punctuation), '', text)
text = re.sub('n', '', text)
text = re.sub('w*dw*', '', text)
text = [word for word in text.split(' ') if word not in stopword]
text = " ".join(text)
text = [stemmer.stem(word) for word in text.split(' ')]
text = " ".join(text)
return text
data["Review"] = data["Review"].apply(clean)
ratings = data["Rating"].value_counts()
numbers = ratings.index
quantity = ratings.values
figure = px.pie(data, values=quantity, names=numbers, hole=0.5)
figure.show()
text = " ".join(i for i in data.Review)
stopwords = set(STOPWORDS)
wordcloud = WordCloud(stopwords=stopwords, background_color="white").generate(text)
plt.figure(figsize=(15,10))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()
sentiments = SentimentIntensityAnalyzer()
data["Positive"] = [sentiments.polarity_scores(i)["pos"] for i in data["Review"]]
data["Negative"] = [sentiments.polarity_scores(i)["neg"] for i in data["Review"]]
data["Neutral"] = [sentiments.polarity_scores(i)["neu"] for i in data["Review"]]
data = data[["Review", "Positive", "Negative", "Neutral"]]
data.head()