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 act_inform(sentence: str) -> str: if is_in_sentence(sentence, "dostępna"): return random.choice( [ "Wskazana przez Ciebie pozycja niestety nie jest dostępna", "Ksiązką, o którą pytasz jest aktualnie dostępna", ] ) elif is_in_sentence(sentence, "wydawcy", "wydawca", "wydawnictwo", "wydawnictwa"): return random.choice( [ "Książka tego wydawcy jest dostępna", "Książka tego wydawcy nie jest dostępna", "Nie znaleziono wydawcy o tej nazwie", ] ) elif is_in_sentence(sentence, "autor", "autora", "autorstwa"): return random.choice( [ "Książka tego autora nie jest dostępna", "Książki tego autora są dostępne w bibliotece", "Nie znaleziono autora o tym imieniu i nazwisku" ] ) elif is_in_sentence(sentence, "godziny", "otwarta", "czynna", "otwarcie"): return "Biblioteka jest otwarta w dni robocze w godzinach 8-16" elif is_in_sentence(sentence, "lokalizacja", "lokalicazji", "adres", "ulica", "placówka"): return "Biblioteka znajduje się na ul. Targowej 10 w Poznaniu" elif is_in_sentence( sentence, "dni", "dzień", "niedziela", "niedziele", "niedzielę", "święta", "święto" ): return "Biblioteka otwarta jest jedynie w dni robocze. Godziny otwarcia: 8-16" elif is_in_sentence(sentence, "numer telefonu", "kontakt", "numer kontaltowy", "telefon"): return "Numer kontaktowy: 123 456 789" elif is_in_sentence( sentence, "wydarzenie", "wydarzenia", "atrakcja", "atrakcje", "spotkanie", "spotkania" ): return random.choice( [ "W najbliższy poniedziałek odbędzie się Dzień młodego czytelnika", "Dzień fantastyki trwać będzie przez cały najbliższy weekend", "Dzień promowania czytelnictwa to najbliższe wydarzenie (najbliższa sobota)", "Obecnie nie ma żadnych zaplanowanych wydarzeń", ] ) return "Niestety nie zrozumiałem? Jakich informacji szukasz?" def act_affirm() -> str: return random.choice( [ "Zgadza się", "Tak", "Tak zgadza się", ] ) 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() elif act == "inform": return act_inform(sentence) elif act == "affirm": return act_affirm(sentence, slots) return "Nie rozumiem pytania lub nie posiadamy takiej książki" while True: sentence = input("Wiadomość użytkownika: ") print(answer(sentence))