Filtrado con ranuras excluidas
Ahora vas a reunir algunas de las ideas de los ejercicios anteriores para permitir que las personas le digan a tu bot lo que quieren y lo que no quieren, repartido en varios mensajes.
La función negated_ents() ya está definida para ti. Además, se ha definido una versión ligeramente ajustada de la función find_hotels(), que acepta un diccionario neg_params además de un diccionario params.
Este ejercicio forma parte del curso
Creación de chatbots en Python
Instrucciones del ejercicio
- Define una función
respond()que aceptemessage,paramsyneg_paramscomo argumentos. - Usa la función
negated_ents()conmessageyent_valscomo argumentos. Guarda el resultado ennegated. - Usa la versión ajustada de
find_hotels()con los diccionariosparamsyneg_paramscomo argumentos para encontrar hoteles que coincidan. Guarda el resultado enresults. - Inicializa los diccionarios
paramsyneg_paramsfuera de la funciónrespond()y pulsa "Enviar respuesta" para ver las respuestas del bot.
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
# Define the respond function
def ____:
# Extract the entities
entities = interpreter.parse(message)["entities"]
ent_vals = [e["value"] for e in entities]
# Look for negated entities
negated = ____
for ent in entities:
if ent["value"] in negated and negated[ent["value"]]:
neg_params[ent["entity"]] = str(ent["value"])
else:
params[ent["entity"]] = str(ent["value"])
# Find the hotels
results = ____
names = [r[0] for r in results]
n = min(len(results),3)
# Return the correct response
return responses[n].format(*names), params, neg_params
# Initialize params and neg_params
params = ____
neg_params = ____
# Pass the messages to the bot
for message in ["I want a cheap hotel", "but not in the north of town"]:
print("USER: {}".format(message))
response, params, neg_params = respond(message, params, neg_params)
print("BOT: {}".format(response))