Bonjour à tous.
Voici ce que je propose en Python...
Code extrait et adapté du programme que j'utilise pour communiquer avec mon robot KRT1
Ca vaut ce que ça vaut et il existe certainement mieux mais ça fonctionne pas trop mal.
Didier.
(A bientôt, peut-être)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Test d'un chatbot
# Importation des librairies nécessaires et suffisantes
import random
import time
#import os # Seulement si l'on veut utiliser le TTS...
# OK avec Raspberry Pi > Linux Rasbian Pixel + Pico TTS
# "Dé-commenter" les lignes #os.system("...
# Initialisation des variables
# Variables modifiables
LeNom = "Crétin" # Nom du robot
# Variables de réglages
ColA = "\x1b[1;32;40m" # Couleur des messages d'actions : Vert
ColK = "\x1b[1;36;40m" # Couleur des messages de KRT1 : Bleu
ColM = "\x1b[1;31;40m" # Couleur de mes messages : Rouge
ColX = "\x1b[1;30;40m" # Couleur des autres messages : Noir
FCol = "\x1b[0m" # Fin de la coloration du message
# Variables utilisées par le système ( NE PAS MODIFIER - Touche pas à ça p'tit con ! )
MessageEcrit = "" # Message vide
MonMessage = "" # Message vide
# Dictionnaire - Orthographe non respectée pour tenter de trouver un meilleur phrasé TTS...
ReponsesAleatoires = ["Comment ?",
"Avant peut-être, mais ça cétait avant",
"Bain voyons",
"Sai quand même pas très clair tout ça",
"Cet aussi mon avis et je le partage",
"Et puis quoi encore ?",
"Indubitablement",
"Jallais dire exactement la même chose",
"Mais zencore ?",
"Mais oui mais oui, moi aussi",
"Mauvais choix, auto destruction dans 10, 9, 8, 7, boum, oupsss",
"Plait-il ?",
"Quoi ?",
"Sacrebleu",
"Saperlipopette",
"Soyez un peu plus précis, jcomprends rien à cque vous dites",
"Tiens donc",
"Tout tà fait",
"Vous allez bien ?",
"Haahaahaa, la grosse marave"]
ReponsesPrevues = {"bonjou":"Bonjour à vous chef",
# Les mots clés doivent être tronqués après le sixième caractère
# Les mots clés avec accent(s) ne fonctionnent pas toujours
# correctement, il convient donc de les éviter
# Actions - Penser à mettre à jour la fonction Actions()...
# Actions sur mots reconnus type ORDRE : "action KRT1" ou "KRT1 action"
"+avanc":"Ok chef",
"+avant":"Ok chef",
"+recul":"OK chef",
"+stop":"OK chef, oufff, Une petite pause ça fait du bien",
"+top":"OK chef, oufff, Une petite pause ça fait du bien",
"+appro":"OK chef, jarrive chef",
"+viens":"OK chef, jarrive chef",
"+repos":"OK chef, chef oui chef, merci chef",
"+rompe":"OK chef, chef oui chef, merci chef",
"+date":"La date...",
"+heure":"L'heure...",
# Actions sur un seul mot reconnu
"bazoom":"Bazoum bazoum",
"bazou":"Bazoum bazoum",
"bazoum":"Bazoum bazoum",
"zumba":"Bazoum bazoum",
"binouz":"Une petite bière ?",
"star":"En route vers linfini et au dela",
"trek":"En route vers linfini et au dela",
# Divers
"chocol":"Jpeux pas, jai pas dbras",
"con":"Meunon, meunon",
"connar":"Sai celui qui dit qui y est, tralalalalère",
"demain":"Demain est un autre jour, alors on verra",
"desser":"Moi je suis plutot fromage que dessert",
"faim":"Quand sai quon mange ?",
"froid":"Faut se bouger un peu aussi",
"fromag":"Fromage ou dessert ? il faut choisir",
"gueule":"Quoi ma gueule, caisse quel a ma gueule, ta pas vula tienne ?",
"humour":"Auto destruction dans 5, 4, 3, 2, 1, boum",
"merde":"Je savais bien que vous diriez ça à un moment ou un autre",
"pain":"Le pain, jle met sur la table hou dans ta gueule ?",
"prout":"Proute proute ma chère, je my attendais",
"salut":"Je vous salut également, a qui aije lhonneur ?",
"soif":"Sai lheure de lapéro ?",
"voyage":"Moi jaime bien les voyages, sai quand quon va ou ?",
"yes":"Pas danglais avec moi, déjà quils nous ont brulé la Janne",
"you":"Pas danglais avec moi, déjà quils nous ont brulé la Janne",
"zut":"O la boulette"}
# Les fonctions
def Dialoguer():
global MonMessage
global LeNom
MonMessage = MessageEcrit
print ColM + "Moi - " + MonMessage + ColX
MonMessage = MonMessage.lower()
LeNom = LeNom.lower()
if MonMessage[0:len(LeNom)] == LeNom:
MonMessage = "+" + MonMessage[len(LeNom)+1:len(MonMessage)]
elif MonMessage[len(MonMessage)-len(LeNom):len(MonMessage)] == LeNom:
MonMessage = "+" + MonMessage[0:len(MonMessage)-len(LeNom)-1]
ReponseKRT1 = ChercherLaReponse(MonMessage)
if ReponseKRT1:
print ColK + "KRT1 - " + ReponseKRT1 + ColX
#os.system("pico2wave -l fr-FR -w /dev/shm/krt1.wav " + "'" + ReponseKRT1 + "'")
#os.system("omxplayer -o local /dev/shm/krt1.wav")
# On va ensuite exécuter l'action demandée
Actions()
else:
ReponseChoisie = random.randint(1, len(ReponsesAleatoires))-1
#os.system("pico2wave -l fr-FR -w /dev/shm/krt1.wav " + "'" + ReponsesAleatoires[ReponseChoisie] + "'")
#os.system("omxplayer -o local /dev/shm/krt1.wav")
print ColK + "KRT1 - " + ReponsesAleatoires[ReponseChoisie] + ColX
ReponsesAleatoires[ReponseChoisie] = ""
def ChercherLaReponse(MessageSaisi):
global Mot
MessageSaisi = MessageSaisi.lower()
Mots = MessageSaisi.split()
LesReponses = []
for Mot in Mots:
if len(Mot) >= 6:
Mot = Mot[0:6]
if Mot in ReponsesPrevues:
UneReponse = ReponsesPrevues[Mot]
LesReponses.append(UneReponse)
print
print ColA + "xxxxxxxxxxxxxxxxxxxx" + ColX
print ColA + "Mot reconnu = " + Mot + ColX
print ColA + "xxxxxxxxxxxxxxxxxxxx" + ColX
print
if LesReponses:
ReponseChoisie = random.randint(1, len(LesReponses))-1
return LesReponses[ReponseChoisie]
return ""
def Actions(): # Penser à mettre à jour le dictionnaire...
Action = Mot
if len(Action) >= 6:
Action = Action[0:6]
# Actions sur mots reconnus type ORDRE : "action KRT1" ou "KRT1 action"
if Action == "+avanc" or Action == "+avant":
print ColK + "-> Exécution de l'action..." + ColX
elif Action == "+recul":
print ColK + "-> Exécution de l'action..." + ColX
elif Action == "+stop" or Action == "+top":
print ColK + "-> Exécution de l'action..." + ColX
elif (Action == "+appro" or Action == "+viens"):
print ColK + "-> Exécution de l'action..." + ColX
elif (Action == "+repos" or Action == "+rompe"):
print ColK + "-> Exécution de l'action..." + ColX
elif Action == "+date":
Maintenant = time.localtime(time.time())
Date = "Nous sommes le " + time.strftime("%d/%m/%y") + ", chef"
print ColK + "KRT1 - " + Date + ColX
#os.system("pico2wave -l fr-FR -w /dev/shm/krt1.wav " + "'" + Date + "'")
#os.system("omxplayer -o local /dev/shm/krt1.wav")
elif Action == "+heure":
Maintenant = time.localtime(time.time())
Heure = "Il est " + time.strftime("%H") + " heure " + time.strftime("%M") + ", chef"
print ColK + "KRT1 - " + Heure + ColX
#os.system("pico2wave -l fr-FR -w /dev/shm/krt1.wav " + "'" + Heure + "'")
#os.system("omxplayer -o local /dev/shm/krt1.wav")
# Actions sur un seul mot reconnu
elif Action == "bazoom" or Action == "bazou" or Action == "bazoum" or Action == "zumba":
print
#os.system("omxplayer -o local static/BAZOOM.mp3")
elif Action == "binouz":
print
#os.system("omxplayer -o local static/BIERE.mp3")
elif Action == "star" or Action == "trek":
print
#os.system("omxplayer -o local static/STARTREK.mp3")
# En route...
while True :
print ColA
MessageEcrit = raw_input ("Ecrire le message... : ")
print ColX
Dialoguer()