word_patterns = [lemmatizer.lemmatize(word.lower()) for word in word_patterns]
AttributeError: 'list' object has no attribute 'lower'
I can't figure out how to fix the error. Its saying that my list of word can't be lowercased at all. this is the entire code
import random
import json
import pickle
import numpy as np
import nltk
from nltk.stem import WordNetLemmatizer
from tensorflow import keras
from keras.layers import Dense, Activation, Dropout
from keras.models import Sequential
from keras.optimizers import SGD
lemmatizer = WordNetLemmatizer()
intents = json.loads(open('intents.json').read())
words= []
classes = []
documents = []
ignore_letters = ['?', '!', '.', ',']
for intent in intents["intents"]:
for pattern in intent['patterns']:
word_list = nltk.word_tokenize(pattern)
words.extend(word_list)
documents.append((word_list, intent['tag']))
if intent['tag'] not in classes:
classes.append(intent['tag'])
words = [lemmatizer.lemmatize(word) for word in words if word not in ignore_letters]
words = sorted(set(words))
classes = sorted(set(classes))
pickle.dump(words, open('words.pkl', 'wb'))
pickle.dump(words, open('classes.pkl', 'wb'))
training=[]
output_empty = [0] * len(classes)
for document in documents:
bag = []
word_patterns = documents[0]
word_patterns = [lemmatizer.lemmatize(word.lower()) for word in word_patterns]
for word in words:
bag.append(1) if word in word_patterns else bag.append(0)
output_row = list(output_empty )
output_row[classes.index(document[1])] = 1
training.append(bag, output_row)
random.shuffle(training)
training = np.array(training)
train_x = list(training[:,0])
train_y = list(training[:,1])
#neural network
model = Sequential()
model.add(Dense(128,input_shape = (len(train_x[0]),),activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(len(train_y[0]), activation='softmax'))
sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])
model.fit(np.array(train_x), np.array(train_y), epochs=200, batch_size=5, verbose=1)
model.save('chatbot_model.model')
print("done")
the file stopped working once I uploaded the neural network. The neural network was supposed to train the bot but then the Attribute error came up. Unless I fix that I can't train the bot.
Any suggestions would help:D This code was supposed to be for an intelligent chatbot in python. I need to finish training before can actually build the bot
The error here occurs before
lemmatizeis even called, the problem is already withword.lower().You are expecting
word_patternsto be a list of strings, but it's not. It's a list of lists.I followed the source of
wordtoword_patternstoThis looks very suspicious, and I think it is clearly meant to be
as
documentis your actual loop variable.