telegram-bot-systemy-dialogowe/main.py
2021-06-17 11:30:22 +02:00

103 lines
3.5 KiB
Python

from Modules import NLU
from typing import List, Tuple
import random
nlu = NLU()
def is_in_sentence(*args: str) -> bool:
sentence, *words = args
return any(word for word in words if word in sentence)
def act_hello() -> str:
return random.choice(
[
"Dzień dobry, witam w interaktywnej bibliotece",
"Witam w interaktywnej biblitece",
"Dzień dobry, w czym mogę pomóc?",
"Witam w interaktywnej bibliotece książnicy płockiej, jak mogę pomóc?",
]
)
def act_bye() -> str:
return random.choice(
["Do zobaczenia", "Dziękuję i życzę miłej lektury", "Do widzenia"]
)
def act_request(sentence: str, slots: List[Tuple[str, str]]) -> str:
if is_in_sentence(sentence, "wypożyczyć", "interesuje", "wypożyczenie"):
book = " ".join(slot[1] for slot in slots)
return f"Książka {book} została dla Ciebie zapisana i czeka na odbiór"
elif is_in_sentence(sentence, "oddać", "zwrócić"):
return "Proszę przynieść książkę/i do naszej biblioteki"
elif is_in_sentence(sentence, "rezerwacja", "zarezerwować", "rezerwacji"):
if slots:
book = " ".join(slot[1] for slot in slots)
return f"Książka {book} została zarezerwowana"
return "Niestety nie mamy tej książki"
elif is_in_sentence(sentence, "biblioteka", "otwarta"):
return "Biblioteka jest otwarta od poniedziałku do soboty w godzinach 8-20, bez świąt"
elif is_in_sentence(sentence, "założyć kartę", "założyć konto", "założyć"):
return """Założyć kartę biblioteczną można przez naszą stronę www.biblioteka.pl,
karta przyjdzie pocztą a opłata to 5 zł."""
elif is_in_sentence(
sentence,
"zgubiona",
"zgubiłem kartę",
"zgubiłam kartę",
"zniszczyłem kartę",
"zniszczyłam kartę",
):
return "W razie zgubienia lub zniszczenia karty należy przyjść do biblioteki w celu jej zablokowania."
return "Nie rozumiem pytania lub nie posiadamy takiej książki"
def act_thankyou() -> str:
return random.choice(["Proszę!", "Nie ma za co", "Po to tutaj jestem!"])
def act_negate() -> str:
return "Akcja została cofnięta"
def act_confirm(sentence: str, slots: List[Tuple[str, str]]) -> str:
if slots:
book = " ".join(slot[1] for slot in slots)
if is_in_sentence(sentence, "wypożyczona"):
return f"Książka {book} została wypożyczona"
elif is_in_sentence(sentence, "zarezerwowana"):
return f"Książka {book} została zarezerwowana"
return "Nie rozumiem pytania lub nie posiadamy takiej książki"
def act_ack() -> str:
return random.choice(["W czymś jeszcze mogę pomóc?", "Co mogę jeszcze zrobić"])
def answer(sentence: str) -> str:
nlu_match = nlu.match(sentence)
act, slots = nlu_match["act"], nlu_match["slots"]
if act == "hello":
return act_hello()
elif act == "bye":
return act_bye()
elif act == "request":
return act_request(sentence, slots)
elif act == "thankyou":
return act_thankyou()
elif act == "negate":
return act_negate()
elif act == "confirm":
return act_confirm(sentence, slots)
elif act == "ack":
return act_ack()
return "Nie rozumiem pytania lub nie posiadamy takiej książki"
while True:
sentence = input("Wiadomość użytkowniak: ")
print(answer(sentence))