У объекта 'list' нет атрибута 'encode': анализ настроений
Я хотел бы провести анализ настроений некоторых текстов с помощью Vader (но проблема, которую я здесь описываю, относится и к любым лексиконам, в дополнение к Vader). Однако после прохождения всей обработки данных, включая токенизацию и преобразование в нижний регистр (о котором я не упомянул здесь), я получаю следующую ошибку:
Есть идеи, как обрабатывать документы, чтобы лексикон мог читать тексты? Благодарю.
AttributeError: у объекта 'list' нет атрибута 'encode'
with open('data_1.txt') as g:
data_1 = g.read()
with open('data_2.txt') as g:
data_2 = g.read()
with open('data_3.txt') as g:
data_3 = g.read()
df_1 = pd.DataFrame({"text":[data_1, data_2, data_3]})
df_1.head()
text
#0 [[bangladesh, education, commission, report, m...
#1 [[english, version, glis, ministry, of, educat...
#2 [[national, education, policy, 2010, ministry,...
from nltk.sentiment.vader import SentimentIntensityAnalyzer
vader = SentimentIntensityAnalyzer()
df_1['Vader_sentiment'] = df_1.text.apply(lambda x: vader.polarity_scores(x)['compound'])
AttributeError: у объекта 'list' нет атрибута 'encode'
1 ответ
Решение
df_1.text
Серия списков списков Вы не можете применить VADER к любым спискам, особенно к спискам списков. Преобразуйте списки в строки, а затем примените VADER:
df_1['text_as_string'] = df_1['text'].str[0].str.join(" ")
df_1['text_as_string'].apply(lambda x: vader.polarity_scores(x)['compound'])