我在 Python 中编写了一个SentimentIntensityAnalyzer
从nltk.sentiment.vader
库中调用函数的小程序。我想分析 c2 列中提到的评论并在新的相邻列中提供情绪分数。有 10,000 条评论,我的评论已remarks.txt
存档。我创建了get_sentiment()
函数,但面临将数据框的每一行作为参数传递并使用 for 循环调用它以提供情绪分数并将其存储在相邻列中的问题。
我试过这些代码:
df['add'] = df.apply(lambda row: get_sentiment(row))
无法在互联网上的任何地方找到解决方案。代码如下:
import nltk
import pandas as pd
import re
from nltk.sentiment.vader import SentimentIntensityAnalyzer
remarks = pd.read_csv('/Users/ZKDN0YU/Desktop/comments/Comments.txt',
sep='\t')
remarks.head(50)
df = pd.DataFrame(remarks)
print(df)
def get_sentiment(remarks):
sentiment_score = sid.polarity_scores(row)
positive_meter = round((sentiment_score['pos'] * 10), 2)
negative_meter = round((sentiment_score['neg'] * 10), 2)
return positive_meter, negative_meter
for index, row in df.iterrows():
df['add'] = df.apply(lambda row: get_sentiment(row))
print(row['c1'], row['c2'],"Positive",positive_meter,"Negative",
negative_meter)
运行上述代码时出现以下错误:
File "<ipython-input-9-7223b4fb6bd7>", line 10, in get_sentiment
sentiment_score = sid.polarity_scores(row)
NameError: ("name 'sid' is not defined", 'occurred at index c1')
尝试更换
for index, row in df.iterrows():
df['add'] = df.apply(lambda row: get_sentiment(row))
print(row['c1'], row['c2'],"Positive",positive_meter,"Negative",
negative_meter)
和
df['positive'] = df.c2.apply(get_sentiment, k='positive')
df['negative'] = df.c2.apply(get_sentiment, k='negative')
for index, row in df.iterrows():
print("Positive : {}, Negative : {}".format(row['positive'], row['negative']))
在这里,我们将函数应用于数据帧 c2 列中的所有值,并将序列返回到数据帧中的新列“add”。
get_sentiment 函数也需要使用此解决方案进行更新:
def get_sentiment(row, **kwargs):
# Your previous code
return positive_meter if kwargs['k'] == 'positive' else negative_meter
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句