khuranagarvit019's picture
Initial Commit
64e2ff6
#################################################################
# Input from user is taken. It is cleaned using NLP, #
# and then it is send in the trained Neural Network model. #
# Model predicts the tag of that sentence and then a random #
# response corresponding to that tag is returned to user #
#################################################################
import random
import json
import pickle
import numpy as np
import nltk
from nltk.stem import WordNetLemmatizer
from tensorflow.keras.models import load_model
lemmatizer = WordNetLemmatizer()
intents = json.loads (open('Categories.json').read())
words = pickle.load (open('words.pkl', 'rb'))
classes = pickle.load (open('classes.pkl', 'rb'))
model = load_model ('chatbot.h5')
def cleanUpSentence (sentence):
sentenceWords = nltk.word_tokenize (sentence)
sentenceWords = [lemmatizer.lemmatize(word) for word in sentenceWords]
return sentenceWords
def bagOfWords (sentence):
sentenceWords = cleanUpSentence (sentence)
bag = [0] * len (words)
for w in sentenceWords:
for i, word in enumerate(words):
if w == word :
bag [i] = 1
return np.array (bag)
def predictClass (sentence):
bow = bagOfWords (sentence)
res = model.predict (np.array([bow]))[0] # 0.2 0.3 0.4 0 1 0000
ERROR_TRESHOLD = 0.25
results = [[i, r] for i, r in enumerate(res) if r > ERROR_TRESHOLD]
results.sort (key = lambda x : x[1], reverse = True)
returnList = []
for r in results:
returnList.append ({'intent' : classes[r[0]], 'probablity' : str(r[1])})
return returnList
def getResponse (intentsList, intentsJson):
tag = intentsList[0]['intent']
listOfIntents = intentsJson['categories']
for i in listOfIntents:
if i['tag'] == tag:
result = random.choice (i['responses'])
break
return result
print ('Bot is Running !!')
while (True):
message = input ("You : ")
ints = predictClass (message)
res = getResponse (ints, intents)
print ('Laura : ', res)