ai_robin / app.py
robinmia's picture
Update app.py
a5980e0
raw
history blame
2.5 kB
import gradio as gr
import json
import random
import pickle
import numpy as np
import nltk
from tensorflow.keras.models import Sequential
from tensorflow.keras.optimizers.legacy import SGD
from tensorflow.keras.layers import Dense,Activation,Dropout
from tensorflow.keras.models import load_model
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
import nltk
nltk.download('punkt')
nltk.download('wordnet')
# Load intents and model
new_intents = json.loads(open('intents.json').read())
words = pickle.load(open('words.pkl', 'rb'))
classes = pickle.load(open('classes.pkl', 'rb'))
model = load_model("chatbot_final.h5")
# Load intents and model
new_intents = json.loads(open('intents.json').read())
words = pickle.load(open('words.pkl', 'rb'))
classes = pickle.load(open('classes.pkl', 'rb'))
model = load_model("chatbot_final.h5")
# Function to clean up a sentence
def clean_up_sentence(sentence):
sentence_words = nltk.word_tokenize(sentence)
sentence_words = [lemmatizer.lemmatize(word) for word in sentence_words]
return sentence_words
# Function to convert a sentence to a bag of words
def bag_of_words(sentence):
sentence_words = clean_up_sentence(sentence)
bag = [0] * len(words)
for w in sentence_words:
for i, word in enumerate(words):
if word == w:
bag[i] = 1
return np.array(bag)
# Function to predict the intent of a sentence
def predict_class(sentence):
bow = bag_of_words(sentence)
res = model.predict(np.array([bow]))[0]
ERROR_THRESHOLD = 0.25
results = [[i, r] for i, r in enumerate(res) if r > ERROR_THRESHOLD]
results.sort(key=lambda x: x[1], reverse=True)
return_list = []
for r in results:
return_list.append({'intent': classes[r[0]], 'probability': str(r[1])})
if not return_list:
# No intents detected, return a default response
return_list.append({'intent': 'default', 'probability': '1.0'})
return return_list# Function to get a response based on detected intent
def get_response(intents_list, intents_json):
tag = intents_list[0]['intent']
list_of_intents = intents_json['intents']
for i in list_of_intents:
if i['tag'] == tag:
result = random.choice(i['responses'])
break
return result
def greet(mesage):
ints = predict_class(mesage)
res = get_response(ints)
return res
iface = gr.Interface(fn=greet, inputs="text", outputs="text")
iface.launch()