Creating a Basic hardcoded ChatBot using Python -NLTK

Chatbots are automated programs that simulate conversations with users using natural language. Python's NLTK (Natural Language Toolkit) library provides powerful tools for building chatbots that can understand and respond to user input through text processing and pattern matching.

Core Concepts of Chatbot Creation

Understanding these fundamental concepts is essential for building effective chatbots

  • Natural Language Processing (NLP) Enables chatbots to understand human language through tokenization, part-of-speech tagging, and named entity recognition.

  • Dialog Management Manages conversation flow and maintains context across multiple interactions.

  • Pattern Matching Uses regular expressions to identify user intents and trigger appropriate responses.

  • Text Preprocessing Cleans and standardizes input text by removing stopwords and punctuation.

Prerequisites

Before starting, ensure you have the following installed

  • Python 3.7 or higher

  • NLTK library: pip install nltk

  • Basic understanding of Python and regular expressions

Installing and Importing Required Libraries

First, we'll install and import the necessary libraries for our chatbot

import nltk
import re
import random
import string
from string import punctuation

# Download required NLTK data
nltk.download('punkt')
nltk.download('stopwords')

Text Preprocessing Functions

We need functions to clean and tokenize user input

import nltk
from string import punctuation

# Download required NLTK data
nltk.download('punkt')
nltk.download('stopwords')

# Get English stopwords
stop_words = set(nltk.corpus.stopwords.words('english'))

def sentence_tokenizer(data):
    """Split text into sentences"""
    return nltk.sent_tokenize(data.lower())

def word_tokenizer(data):
    """Split text into words"""
    return nltk.word_tokenize(data.lower())

def remove_noise(word_tokens):
    """Remove stopwords and punctuation"""
    cleaned_tokens = []
    for token in word_tokens:
        if token not in stop_words and token not in punctuation:
            cleaned_tokens.append(token)
    return cleaned_tokens

# Test the functions
test_text = "Hello! How are you doing today?"
words = word_tokenizer(test_text)
clean_words = remove_noise(words)
print("Original:", test_text)
print("Tokenized:", words)
print("Cleaned:", clean_words)
Original: Hello! How are you doing today?
Tokenized: ['hello', '!', 'how', 'are', 'you', 'doing', 'today', '?']
Cleaned: ['hello', 'today']

Building the Pattern-Based Chatbot

Now we'll create a chatbot that uses pattern matching to generate responses

import nltk
import re
import random
from string import punctuation

# Download required NLTK data
nltk.download('punkt')
nltk.download('stopwords')
stop_words = set(nltk.corpus.stopwords.words('english'))

def word_tokenizer(data):
    return nltk.word_tokenize(data.lower())

def remove_noise(word_tokens):
    cleaned_tokens = []
    for token in word_tokens:
        if token not in stop_words and token not in punctuation:
            cleaned_tokens.append(token)
    return cleaned_tokens

# Define patterns and responses
patterns = [
    (r'hi|hello|hey|greetings', ['Hi there!', 'Hello!', 'Hey! How can I help you?']),
    (r'how.*you', ['I'm doing well, thank you!', 'I'm great! How about you?']),
    (r'name', ['I'm a Python chatbot!', 'You can call me ChatBot.']),
    (r'weather', ['I can't check the weather, but I hope it's nice!', 'Weather is unpredictable!']),
    (r'bye|goodbye|exit', ['Goodbye!', 'See you later!', 'Have a great day!']),
    (r'.*', ['Tell me more!', 'That's interesting.', 'I see. Go on.'])
]

def match_pattern(user_input):
    """Find matching pattern and return response"""
    for pattern, responses in patterns:
        if re.search(pattern, user_input.lower()):
            return random.choice(responses)
    return "I don't understand. Could you rephrase?"

def chatbot():
    """Main chatbot function"""
    print("ChatBot: Hello! I'm a simple chatbot. Type 'bye' to exit.")
    
    while True:
        user_input = input("You: ")
        
        # Check for exit condition
        if re.search(r'bye|goodbye|exit', user_input.lower()):
            print("ChatBot: Goodbye! Have a great day!")
            break
        
        # Process input and generate response
        response = match_pattern(user_input)
        print(f"ChatBot: {response}")

# Start the chatbot
chatbot()
ChatBot: Hello! I'm a simple chatbot. Type 'bye' to exit.
You: Hello
ChatBot: Hi there!
You: What's your name?
ChatBot: I'm a Python chatbot!
You: How are you?
ChatBot: I'm doing well, thank you!
You: bye
ChatBot: Goodbye! Have a great day!

Enhanced Chatbot with Better Pattern Matching

Here's an improved version that uses more sophisticated pattern matching

import nltk
import re
import random
from string import punctuation

class SimpleChatBot:
    def __init__(self):
        nltk.download('punkt', quiet=True)
        nltk.download('stopwords', quiet=True)
        self.stop_words = set(nltk.corpus.stopwords.words('english'))
        
        self.patterns = {
            'greeting': {
                'patterns': [r'hi|hello|hey|greetings|good morning|good evening'],
                'responses': ['Hello! How can I help you?', 'Hi there!', 'Greetings! What can I do for you?']
            },
            'name': {
                'patterns': [r'what.*name|who.*you|your name'],
                'responses': ['I'm a Python chatbot!', 'You can call me SimpleBot.', 'I'm your friendly AI assistant.']
            },
            'wellbeing': {
                'patterns': [r'how.*you|how.*doing|how.*going'],
                'responses': ['I'm doing well, thank you!', 'All systems running smoothly!', 'I'm great! How about you?']
            },
            'goodbye': {
                'patterns': [r'bye|goodbye|exit|quit|see you'],
                'responses': ['Goodbye!', 'See you later!', 'Have a wonderful day!']
            },
            'default': {
                'patterns': [r'.*'],
                'responses': ['That's interesting! Tell me more.', 'I see. Could you elaborate?', 'Hmm, can you explain that differently?']
            }
        }
    
    def find_response(self, user_input):
        """Find appropriate response based on input patterns"""
        for intent, data in self.patterns.items():
            for pattern in data['patterns']:
                if re.search(pattern, user_input.lower()):
                    return random.choice(data['responses']), intent
        return "I don't understand.", 'unknown'
    
    def chat(self):
        """Start the conversation"""
        print("SimpleBot: Hello! I'm here to chat. Type 'bye' to exit.\n")
        
        while True:
            user_input = input("You: ").strip()
            
            if not user_input:
                print("SimpleBot: Please say something!")
                continue
            
            response, intent = self.find_response(user_input)
            print(f"SimpleBot: {response}")
            
            if intent == 'goodbye':
                break

# Create and run the chatbot
if __name__ == "__main__":
    bot = SimpleChatBot()
    bot.chat()

Key Features of Our Chatbot

Feature Description Implementation
Pattern Matching Uses regex to identify user intent re.search()
Text Processing Tokenization and cleanup NLTK functions
Random Responses Varied replies for same patterns random.choice()
Conversation Flow Maintains chat loop until exit While loop with exit condition

Conclusion

We successfully created a pattern-based chatbot using Python and NLTK. This chatbot demonstrates fundamental NLP concepts like tokenization, pattern matching, and response generation. While simple, it provides a solid foundation for building more sophisticated conversational AI systems.

Updated on: 2026-03-27T05:59:04+05:30

2K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements