Spaces:
Build error
Build error
#!/usr/bin/env python | |
# coding: utf-8 | |
# In[ ]: | |
import streamlit as st | |
import nltk | |
from nltk.stem import WordNetLemmatizer | |
import pickle | |
import numpy as np | |
from tensorflow.keras.models import load_model | |
nltk.download('punkt') | |
nltk.download('wordnet') | |
# Load saved model and other necessary files | |
model = load_model("chatbot_model.h5") | |
words = pickle.load(open('words.pkl', 'rb')) | |
classes = pickle.load(open('classes.pkl', 'rb')) | |
lemmatizer = WordNetLemmatizer() | |
# Function to preprocess user input | |
def clean_up_sentence(sentence): | |
sentence_words = nltk.word_tokenize(sentence) | |
sentence_words = [lemmatizer.lemmatize(word.lower()) for word in sentence_words] | |
return sentence_words | |
# Function to convert input to bag-of-words format | |
def bow(sentence, words, show_details=True): | |
sentence_words = clean_up_sentence(sentence) | |
bag = [0]*len(words) | |
for s in sentence_words: | |
for i, w in enumerate(words): | |
if w == s: | |
bag[i] = 1 | |
if show_details: | |
print(f"found in bag: {w}") | |
return np.array(bag) | |
# Streamlit app | |
def main(): | |
st.title("Chatbot App") | |
st.write("Welcome to the chatbot! Start a conversation.") | |
user_input = st.text_input("You: ") | |
if st.button("Send"): | |
if user_input.strip() == "": | |
st.write("Bot: Please enter a message.") | |
else: | |
p = bow(user_input, words) | |
res = model.predict(np.array([p]))[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])}) | |
for i in intents["intents"]: | |
if i["tag"] == return_list[0]["intent"]: | |
response = np.random.choice(i["responses"]) | |
break | |
st.write("Bot:", response) | |
if __name__ == "__main__": | |
main() | |