在单独的列中拆分正面/负面/中立/反馈情绪得分并将其添加到数据集中

我正在尝试使用python中的VADER确定客户反馈的情感评分。下面的简单代码可以完美地运行以提供个人反馈,并返回包含负,中性,正和复合得分的字典。

代码:

from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer


feedback = "Food was very good"
vader = SentimentIntensityAnalyzer()
sentiment = vader.polarity_scores(feedback)

print(sentiment)

结果: {'neg':0.0,'neu':0.484,'pos':0.516,'compound':0.4927}

现在,我有一个包含4k +客户反馈的电子表格。我想做的是遍历每个反馈,并添加4个新col作为Negative_Score,Neutral_Score,Positive_Score和Compound_Score。我写了下面的代码并没有得到预期的结果。每行得到相同的分数。任何帮助将不胜感激。

代码:

    import os.path
    from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
    import pandas as pd

    data = pd.read_excel(r"C:\...\sample_feedback.xlsx") 
    #Sample_feedback.xlsx has two col customer and feedbacktext
    vader = SentimentIntensityAnalyzer()
    data["Negative_Score"] = vader.polarity_scores(data["feedbacktext"]).get("neg")
    data
iCMS 回答:在单独的列中拆分正面/负面/中立/反馈情绪得分并将其添加到数据集中

我们可以使用 lambda 来实现这一点。这比遍历数据框行要好。我写了一个方法 vader_scores 唯一的功能是从反馈文本中返回各自的极性分数(pos/neg/neu/compound)。

您的代码为所有行返回相同的极性分数的主要原因是您单独使用了 data["feedbacktext"],它获取了整个列并返回了结果值。我所做的是,使用行的索引从每一行中选取数据 ["feedbacktext"] 并将其单元格填充到 Negative_Score,Neutral_Score,Positive_Score,and Compound_Score 列中。

我使用的样本数据是:

enter image description here

这是我的代码:

import os.path
from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
import pandas as pd

def vader_scores(feedbacktext,category):
    return vader.polarity_scores(feedbacktext).get(category)

data = pd.read_excel(r"sample_feedback.xls") 
# print(data)
#Sample_feedback.xlsx has two col customer and feedbacktext
vader = SentimentIntensityAnalyzer()

data["Negative_Score"] = data.apply(lambda row : vader_scores(data["feedbacktext"][row.name],"neg"),axis=1)
data["Neutral_Score"] = data.apply(lambda row : vader_scores(data["feedbacktext"][row.name],"neu"),axis=1)
data["Positive_Score"] = data.apply(lambda row : vader_scores(data["feedbacktext"][row.name],"pos"),axis=1)
data["Compound_Score"] = data.apply(lambda row : vader_scores(data["feedbacktext"][row.name],"compound"),axis=1)
data

输出是:

enter image description here

本文链接:https://www.f2er.com/1753949.html

大家都在问