Ошибка индекса: индекс 54 выходит за рамки для оси 0 с размером 48

#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. Рад, что это работает, если ответ вам помог, пожалуйста, отметьте его как принятый.