#python #pandas #dataframe #keras #sentiment-analysis
Вопрос:
Я пытаюсь получить прогнозируемую оценку настроений и определить, является ли текст положительным или отрицательным. Но при прогнозировании значений я получаю массивную последовательность оценок и выдаю следующую ошибку.
import json
f = open(("/content/trending_tweets.json"), "r ")
data = f.read()
for x in data.split("n"):
strlist = "[" x "]"
datalist = json.loads(strlist)
for y in datalist:
f = open('/content/user_lookup_data.json', 'a', encoding='utf-8')
print(y["user"]["screen_name"])
screen_name = ('@' y["user"]["screen_name"])
file_name ='/content/user_timeline/' screen_name '_tweets.csv'
user_timeline_data = pd.read_csv(file_name, sep='t', lineterminator='n',encoding='latin')
user_timeline_data = (user_timeline_data['tweet'])
print(len(user_timeline_data))
df = pd.DataFrame(columns=['Text', 'Sentiment'])
for index, row in user_timeline_data.iteritems():
sequence = tokenizer.texts_to_sequences(row)
test = pad_sequences(sequence, maxlen=max_len)
pred = model.predict(test)
if pred[index] > 0.5:
df.loc[index, ['Text']] = row
df.loc[index, ['Sentiment']] = 'Positive'
print(df.shape)
print(pred)
else:
df.loc[index, ['Text']] = row
df.loc[index, ['Sentiment']] = 'Negative'
print(df.shape)
print(pred)
df.to_csv('sentiment_' screen_name '.csv', index=False)
Сообщение об ошибке
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-68-274fe2f3a8c0> in <module>()
18 test = pad_sequences(sequence, maxlen=max_len)
19 pred = model.predict(test)
---> 20 if pred[index] > 0.5:
21 df.loc[index, ['Text']] = row
22 df.loc[index, ['Sentiment']] = 'Positive'
IndexError: index 54 is out of bounds for axis 0 with size 48
Было бы здорово, если бы кто-нибудь мог мне помочь
Ответ №1:
index
Переменная, которую вы используете в строке 20, является индексом строки в user_timeline_data.iteritems
ней, а не индексом из прогноза. Прогноз, скорее всего, представляет собой массив только с одним значением, так как вы прогнозируете только один экземпляр. Так что измените index
онлайн-режим
if pred[index] > 0.5:
Для
if pred[0] > 0.5:
Комментарии:
1. Введите предустановку: <класс ‘numpy.ndarray’> предустановка формы : (142, 1), и форма меняется для каждой строки, например(132,1),(142,1),(112,1) и продолжайте. Существует 10 файлов user_timeline_data, каждый из которых содержит 200 строк
2. Ну, это может быть верно для некоторой итерации в вашем цикле, но ошибка говорит, что на самом деле она имеет форму 0 с размером 48 (так что (48,1)). Дело в том, что используемый вами индекс var не имеет ничего общего с размером вашего массива pred.
3. Вы должны проверить, получаете ли вы предсказание на слово в последовательности вместо 1 для всего предложения. Возможно, вы передаете неправильную форму функции прогнозирования.
4. Я изменил последовательность = tokenizer.texts_to_sequences(строка) на последовательность = tokenizer.texts_to_sequences([строка]) и удалил индекс в условии if pred, и это сработало.
5. Рад, что это работает, если ответ вам помог, пожалуйста, отметьте его как принятый.