C'est quoi le NLTK ?
Le guide technique sur NLTK pour aller plus loin.
Combinez la puissance de NLTK (traitement classique) avec GPT-4.1 mini (IA générative) pour créer un chatbot intelligent, économique et facile à déployer.
Les chatbots sont omniprésents : service client, assistance virtuelle, FAQ interactives. Deux approches existent :
Notre chatbot hybride combine le meilleur des deux mondes :
Pour ce cas pratique, vous n'aurez besoin que de quelques centimes d'euros (environ 0,04 EUR). La clé API OpenAI est protégée par variable d'environnement.

Image AVIF à créer – schéma de l'architecture du chatbot hybride.
Téléchargez Python 3.10 ou supérieur sur python.org.
pip install nltk openai python-dotenv
import nltk
nltk.download('punkt')
nltk.download('stopwords')
Créez un compte sur platform.openai.com et ajoutez 5 USD de crédits prépayés.
Ne mettez jamais votre clé API en dur dans le code. Nous allons utiliser un fichier .env.
import nltk
import re
from nltk.tokenize import word_tokenize
# Téléchargement des ressources (une seule fois)
nltk.download('punkt', quiet=True)
nltk.download('stopwords', quiet=True)
# Définition des intentions et des réponses
intents = {
"salutation": {
"mots": ["bonjour", "salut", "coucou", "hello", "hi"],
"reponse": "Bonjour ! Comment puis-je vous aider aujourd'hui ?"
},
"aide": {
"mots": ["aide", "help", "que peux-tu faire", "fonctionnalités"],
"reponse": "Je peux répondre à vos questions, vous saluer, vous aider. Tapez 'au revoir' pour quitter."
},
"au_revoir": {
"mots": ["au revoir", "bye", "salut", "à plus", "quit", "exit"],
"reponse": "Au revoir ! Passez une excellente journée."
},
"merci": {
"mots": ["merci", "thanks", "thank you"],
"reponse": "Avec plaisir ! N'hésitez pas si vous avez d'autres questions."
}
}
def detecter_intention(texte):
"""Détecte l'intention de l'utilisateur en fonction des mots-clés"""
texte = texte.lower()
tokens = word_tokenize(texte, language='french')
for intent_name, intent_data in intents.items():
for mot in intent_data["mots"]:
if mot in texte or mot in tokens:
return intent_name, intent_data["reponse"]
return None, None
# Boucle de conversation
def chatbot_nltk():
print("Chatbot NLTK (tapez 'au revoir' pour quitter)")
print("-" * 50)
while True:
user_input = input("Vous : ").strip()
if not user_input:
continue
intention, reponse = detecter_intention(user_input)
if intention == "au_revoir":
print(f"Assistant : {reponse}")
break
elif reponse:
print(f"Assistant : {reponse}")
else:
print("Assistant : Désolé, je n'ai pas compris. Pouvez-vous reformuler ?")
if __name__ == "__main__":
chatbot_nltk()
Test :
Chatbot NLTK (tapez 'au revoir' pour quitter)
--------------------------------------------------
Vous : Bonjour
Assistant : Bonjour ! Comment puis-je vous aider aujourd'hui ?
Vous : Quel temps fait-il ?
Assistant : Désolé, je n'ai pas compris. Pouvez-vous reformuler ?
Vous : Merci
Assistant : Avec plaisir ! N'hésitez pas si vous avez d'autres questions.
Vous : Au revoir
Assistant : Au revoir ! Passez une excellente journée.

capture de l'exécution du chatbot NLTK (sans la clé API).
Ne montrez jamais votre clé API dans les captures. Nous utilisons un fichier .env pour la stocker.
OPENAI_API_KEY=sk-proj-votre-cle-ici
Floutez ou masquez la valeur de la clé (remplacez par sk-proj-***).
import os
from openai import OpenAI
from dotenv import load_dotenv
# Charger la clé API depuis .env
load_dotenv()
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
def chatbot_gpt():
print("Chatbot GPT-4.1 mini (tapez 'quit' pour quitter)")
print("-" * 50)
# Historique de la conversation
messages = [
{"role": "system", "content": "Tu es un assistant utile, amical et concis. Tu réponds en français."}
]
while True:
user_input = input("Vous : ").strip()
if user_input.lower() in ["quit", "exit", "au revoir"]:
print("Assistant : Au revoir !")
break
if not user_input:
continue
messages.append({"role": "user", "content": user_input})
response = client.chat.completions.create(
model="gpt-4.1-mini",
messages=messages,
max_tokens=500,
temperature=0.7
)
assistant_response = response.choices[0].message.content
print(f"Assistant : {assistant_response}")
messages.append({"role": "assistant", "content": assistant_response})
if __name__ == "__main__":
chatbot_gpt()
Test :
Chatbot GPT-4.1 mini (tapez 'quit' pour quitter)
--------------------------------------------------
Vous : Quel temps fait-il à Paris aujourd'hui ?
Assistant : Je ne dispose pas d'accès en temps réel aux conditions météorologiques. Pour connaître la météo à Paris, je te suggère de consulter un site comme Météo-France ou d'activer la météo sur ton téléphone.
Vous : Comment créer un chatbot ?
Assistant : Pour créer un chatbot, tu peux utiliser des bibliothèques Python comme NLTK pour les règles simples, ou intégrer une API comme OpenAI pour une conversation naturelle. Commence par définir les intentions, puis choisis ton approche.
Vous : Merci !
Assistant : Avec plaisir ! N'hésite pas si tu as d'autres questions.
Vous : quit
Assistant : Au revoir !

capture de l'exécution (sans la clé API visible).
NLTK détecte d'abord les intentions simples (salutations, aide, au revoir). Si aucune intention n'est trouvée, on appelle GPT pour une réponse naturelle.
import os
import nltk
from nltk.tokenize import word_tokenize
from openai import OpenAI
from dotenv import load_dotenv
# Charger la clé API
load_dotenv()
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
# Télécharger les ressources NLTK
nltk.download('punkt', quiet=True)
nltk.download('stopwords', quiet=True)
# Intentions NLTK
intents = {
"salutation": {
"mots": ["bonjour", "salut", "coucou", "hello", "hi"],
"reponse": "Bonjour ! Comment puis-je vous aider ?"
},
"aide": {
"mots": ["aide", "help", "que peux-tu faire"],
"reponse": "Je peux répondre à vos questions, vous saluer, vous aider. Je suis un chatbot hybride NLTK + GPT."
},
"au_revoir": {
"mots": ["au revoir", "bye", "quit", "exit"],
"reponse": "Au revoir ! Passez une excellente journée."
},
"merci": {
"mots": ["merci", "thanks"],
"reponse": "Avec plaisir !"
}
}
def detecter_intention_nltk(texte):
"""Détecte l'intention avec NLTK"""
texte = texte.lower()
for intent_name, intent_data in intents.items():
for mot in intent_data["mots"]:
if mot in texte:
return intent_name, intent_data["reponse"]
return None, None
def reponse_gpt(texte, historique):
"""Appelle GPT-4.1 mini pour une réponse naturelle"""
messages = [
{"role": "system", "content": "Tu es un assistant utile, amical et concis. Tu réponds en français."}
]
messages.extend(historique)
messages.append({"role": "user", "content": texte})
response = client.chat.completions.create(
model="gpt-4.1-mini",
messages=messages,
max_tokens=500,
temperature=0.7
)
return response.choices[0].message.content
def chatbot_hybride():
print("Chatbot Hybride (NLTK + GPT-4.1 mini)")
print(" Tapez 'au revoir' pour quitter")
print("-" * 55)
historique = []
while True:
user_input = input("Vous : ").strip()
if not user_input:
continue
# 1. Détection par NLTK
intention, reponse_nltk = detecter_intention_nltk(user_input)
if intention == "au_revoir":
print(f"Assistant : {reponse_nltk}")
break
elif reponse_nltk:
print(f"Assistant : {reponse_nltk}")
historique.append({"role": "user", "content": user_input})
historique.append({"role": "assistant", "content": reponse_nltk})
else:
# 2. Appel à GPT
reponse = reponse_gpt(user_input, historique)
print(f"Assistant : {reponse}")
historique.append({"role": "user", "content": user_input})
historique.append({"role": "assistant", "content": reponse})
if __name__ == "__main__":
chatbot_hybride()
Test :
Chatbot Hybride (NLTK + GPT-4.1 mini)
Tapez 'au revoir' pour quitter
-------------------------------------------------------
Vous : Bonjour
Assistant : Bonjour ! Comment puis-je vous aider ?
Vous : Quelle est la capitale de la France ?
Assistant : La capitale de la France est Paris.
Vous : Merci
Assistant : Avec plaisir !
Vous : Au revoir
Assistant : Au revoir ! Passez une excellente journée.

capture de l'exécution du chatbot hybride (sans clé API).
.env
__pycache__/
*.pyc

capture Google Colab avec la clé floutée.
Notre version hybride garde déjà l'historique. Vous pouvez limiter la taille pour éviter des coûts trop élevés.
Transformez votre chatbot en application web avec Streamlit en quelques lignes de code.
Utilisez spaCy pour extraire des informations spécifiques (dates, lieux, noms).
Modifiez le rôle système pour adapter la personnalité du chatbot (ex: "Tu es un expert en data science").
import streamlit as st
from chatbot_hybride import reponse_gpt
st.title("Chatbot Hybride")
user_input = st.text_input("Vous :")
if user_input:
reponse = reponse_gpt(user_input, [])
st.write(f"Assistant : {reponse}")
Le code complet est disponible dans les étapes précédentes. Voici la structure finale du projet :
mon_chatbot/
├── .env # Contient OPENAI_API_KEY=...
├── chatbot_nltk.py # Version NLTK only
├── chatbot_gpt.py # Version GPT only
├── chatbot_hybride.py # Version hybride (recommandée)
├── requirements.txt # Dépendances
└── .gitignore # Exclut .env
nltk==3.9.1
openai==1.58.0
python-dotenv==1.0.1
streamlit==1.35.0 # optionnel
Pour ce cas pratique, environ 0,04 EUR. Pour un usage plus intensif, comptez 0,40 USD par million de tokens en entrée et 1,60 USD par million en sortie. Une conversation typique de 10 échanges coûte moins de 0,01 EUR.
Oui. Vous pouvez remplacer gpt-4.1-mini par gpt-4.1, gpt-3.5-turbo, ou tout autre modèle OpenAI. Les prix varient.
Utilisez un logiciel de retouche d'image (GIMP, Paint.NET, Photoshop) ou l'outil de masquage de votre capture d'écran (Snip & Sketch sur Windows, Preview sur Mac). Vous pouvez aussi remplacer la valeur par *** dans le code avant capture.
Les intentions NLTK sont quasi instantanées. GPT ajoute une latence de 1 à 3 secondes (selon la connexion). L'ensemble reste fluide pour un usage conversationnel.
Oui. Utilisez Flask ou FastAPI pour créer une API, puis un frontend en HTML/JavaScript. Attention à ne pas exposer votre clé API côté client.
Réduisez max_tokens (par exemple à 300) ou nettoyez l'historique pour garder seulement les derniers échanges.
Ce cas pratique vous a montré comment créer un chatbot hybride alliant la simplicité de NLTK (gratuit, rapide) et l'intelligence de GPT-4.1 mini (conversation naturelle). Pour moins de 5 USD de crédits prépayés (dont seulement 0,04 USD utilisés pour ce test), vous disposez d'un chatbot fonctionnel et extensible.