Code source de Explicator.explicator
# -*- coding: utf-8 -*-
import NaoCreator.Tool.wikipediator as w
import NaoCreator.Tool.speech_move as sm
import NaoCreator.SpeechToText.nao_listen as nl
import NaoSensor.outils as o
import NaoSensor.plant as p
[docs]def get_wikipedia_answer(info):
"""
Permet de faire la recherche sur wikipédia et de donner la première phrase de la page wikipédia
correspondante à la question posée par l'utilisateur.
:param info: message dit par l'utilisateur
:return:
"""
sm.speech_and_move(u"Désolé cette information m'est inconnue, je te redirige sur wikipédia.")
try:
resum = w.get_resum(info, w.FRENCH).split(".")
sm.speech_and_move(u"Voici la réponse a ta question. {}".format(resum[0]))
except Exception as e:
sm.speech_and_move(u"Je n'ai pas réussi à trouver la réponse à ta question sur Wikipédia !")
[docs]def explication(msg):
"""
Regarde si le message contient un fichier dans nos bases de données.
:param msg: message dit par l'utilisateur
:return:
"""
list = p.Plant.get_plantes_obj()
list2 = o.Outils.get_outils_obj()
redirection = False
#On parcourt nos deux listes à la recherche d'un mot correspondant au nom dun de nos fichiers dans nos bdd
for item in list + list2:
if item.get_data("nom") in msg:
explication_obj(msg, item)
redirection = True
break
#Si on ne trouve pas de mot correspondant, on renvoi sur wikipédia
if not redirection:
get_wikipedia_answer(msg)
[docs]def explication_obj(msg, obj):
"""
Permet à partir d'un message et d'un type objet de parcourir le fichier trouvé de notre bdd
:return:
"""
sm.speech_and_move(u"redirecion sur explicator effectuée !")
sm.speech_and_move(u"Quelles informations désires-tu sur {} {}"
.format(obj.get_data(obj.__class__.DETERMINANT), obj.get_data(obj.__class__.NOM)))
list_obj = ["{}".format(key) for key in obj.data]
sm.speech_and_move(u"Tu peux avoir des informations sur {}".format(list_obj))
# On ecoute la question
question = nl.nao_listen()
# On regarde si l'info demandé est dans notre bdd et on boucle tant que l'utilisateur n'a pas dit non
while "non" not in question:
trouve = False
#On récupère chaque mot dans la phrase dite par l'utilisateur
for mot in question.split():
if mot in list_obj:
sm.speech_and_move(u"{} : {}".format(mot, obj.get_data(mot)))
trouve = True
#Si on ne trouve pas de reponse à la question, on renvoi sur wikipédia
if not trouve:
get_wikipedia_answer(question)
sm.speech_and_move(u"Voudrais tu d'autres infos ? Non si tu veux quitter, "
u"et un autre mot clé si tu veux continuer.")
question = nl.nao_listen()