ajeetkumar01 commited on
Commit
ff00302
1 Parent(s): 720cf6a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +25 -26
app.py CHANGED
@@ -1,5 +1,10 @@
1
  import json
2
  import streamlit as st
 
 
 
 
 
3
 
4
  st.set_page_config(page_title="Self-Learning Chatbot")
5
  st.title("Self-Learning Chatbot")
@@ -8,7 +13,6 @@ class ChatBot:
8
  def __init__(self, knowledge_base_file='knowledge_base.json'):
9
  self.knowledge_base_file = knowledge_base_file
10
  self.knowledge_base = self.load_knowledge_base()
11
- st.write(f"Loaded knowledge base: {self.knowledge_base}")
12
 
13
  def load_knowledge_base(self):
14
  """Load knowledge base from the JSON file."""
@@ -16,41 +20,37 @@ class ChatBot:
16
  with open(self.knowledge_base_file, "r") as f:
17
  return json.load(f)
18
  except FileNotFoundError:
19
- st.write("Knowledge base file not found, starting with an empty knowledge base.")
20
  return {"questions": []} # Return an empty structure if file does not exist
21
 
22
  def save_knowledge_base(self):
23
  """Save knowledge base to the JSON file."""
24
  with open(self.knowledge_base_file, 'w') as f:
25
  json.dump(self.knowledge_base, f, indent=4)
26
- st.write(f"Knowledge base saved: {self.knowledge_base}")
 
 
 
 
 
 
 
 
 
 
 
27
 
28
  def find_response(self, user_input):
29
- """Find a response in the knowledge base."""
30
  for question in self.knowledge_base.get("questions", []):
31
- if question['question'].lower() == user_input.lower():
32
  return question['response']
33
  return None
34
 
35
- def learn_and_response(self, user_input):
36
- response = self.find_response(user_input)
37
- if response:
38
- st.write(f"Bot: {response}")
39
- else:
40
- st.write(f"I don't have a response for '{user_input}'. Please teach me:")
41
- response_input = st.text_input(f"Teach me a response for '{user_input}':", key="teach_input")
42
- if st.button("Submit Response"):
43
- if response_input:
44
- self.teach_response(user_input, response_input)
45
- st.success(f"Response saved for '{user_input}': {response_input}")
46
- else:
47
- st.warning("Please provide a response before submitting.")
48
-
49
  def teach_response(self, user_input, response):
50
- """Teach the bot a new response."""
51
  new_question = {'question': user_input.lower(), 'response': response}
 
 
52
  self.knowledge_base['questions'].append(new_question)
53
- self.save_knowledge_base() # Save the updated knowledge base
54
 
55
  if __name__ == "__main__":
56
  # Initialize the chatbot with the JSON file
@@ -58,8 +58,7 @@ if __name__ == "__main__":
58
 
59
  # User interaction with Streamlit UI
60
  user_input = st.text_input("Enter your query below:", key="user_input")
61
- if st.button("Submit Query"):
62
- if user_input:
63
- chatbot.learn_and_response(user_input)
64
- else:
65
- st.warning("Please enter a query before submitting.")
 
1
  import json
2
  import streamlit as st
3
+ import nltk
4
+ from nltk.tokenize import word_tokenize
5
+
6
+ # Ensure 'punkt' resource is downloaded
7
+ nltk.download('punkt')
8
 
9
  st.set_page_config(page_title="Self-Learning Chatbot")
10
  st.title("Self-Learning Chatbot")
 
13
  def __init__(self, knowledge_base_file='knowledge_base.json'):
14
  self.knowledge_base_file = knowledge_base_file
15
  self.knowledge_base = self.load_knowledge_base()
 
16
 
17
  def load_knowledge_base(self):
18
  """Load knowledge base from the JSON file."""
 
20
  with open(self.knowledge_base_file, "r") as f:
21
  return json.load(f)
22
  except FileNotFoundError:
 
23
  return {"questions": []} # Return an empty structure if file does not exist
24
 
25
  def save_knowledge_base(self):
26
  """Save knowledge base to the JSON file."""
27
  with open(self.knowledge_base_file, 'w') as f:
28
  json.dump(self.knowledge_base, f, indent=4)
29
+
30
+ def learn_and_respond(self, user_input):
31
+ response = self.find_response(user_input)
32
+ if response is None:
33
+ response = st.text_input(f"I don't have a response for '{user_input}'. Please teach me:", key="response_input")
34
+ if response: # Only teach a response if something is entered
35
+ self.teach_response(user_input, response)
36
+ st.success("Learned successfully!")
37
+
38
+ # Save the updated knowledge base to the JSON file
39
+ self.save_knowledge_base()
40
+ return response
41
 
42
  def find_response(self, user_input):
43
+ tokens = word_tokenize(user_input.lower())
44
  for question in self.knowledge_base.get("questions", []):
45
+ if word_tokenize(question['question'].lower()) == tokens:
46
  return question['response']
47
  return None
48
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49
  def teach_response(self, user_input, response):
 
50
  new_question = {'question': user_input.lower(), 'response': response}
51
+ if 'questions' not in self.knowledge_base:
52
+ self.knowledge_base['questions'] = []
53
  self.knowledge_base['questions'].append(new_question)
 
54
 
55
  if __name__ == "__main__":
56
  # Initialize the chatbot with the JSON file
 
58
 
59
  # User interaction with Streamlit UI
60
  user_input = st.text_input("Enter your query below:", key="user_input")
61
+ if user_input:
62
+ response = chatbot.learn_and_respond(user_input)
63
+ if response:
64
+ st.write(f"Bot: {response}")