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() | |