reformat files

This commit is contained in:
Bartosz 2021-06-17 11:30:22 +02:00
parent 3aa43e2361
commit 31df87c99d
2 changed files with 96 additions and 49 deletions

View File

@ -1,10 +1,10 @@
#JSGF V1.0 UTF-8 pl;
grammar confirm;
public <potwierdzenie1> = Czy ta książka to <book>;
public <potwierdzenie1> = Czy ta książka to <books> {books};
public <potwierdzenie2> = Czy ta książka to <book> <author>;
public <potwierdzenie3> = Ksiażka <book> została wypożyczona;
public <potwierdzenie4> = Książka <book> została zarezerwowana;
public <potwierdzenie3> = Ksiażka <books> {books} została wypożyczona;
public <potwierdzenie4> = Książka <books> {books} została zarezerwowana;
<book> = <books> {books};
<author> = <authors> {authors};

139
main.py
View File

@ -1,55 +1,102 @@
from Modules import NLU
from typing import List, Tuple
import random
nlu = NLU()
def answer(sentence):
nlu_match = nlu.match(sentence)
act, slots = nlu_match['act'], nlu_match['slots']
if act == 'hello':
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?'])
if act == 'bye':
return random.choice(['Do zobaczenia', 'Dziękuję i życzę miłej lektury', 'Do widzenia'])
if act == 'request':
if 'wypożyczyć' in sentence or 'interesuje' in sentence or 'wypożyczenie' in sentence:
for slot in slots:
return f'Książka {slot[1]} została dla Ciebie zapisana i czeka na odbiór'
return 'Niestety nie mamy tej książki'
elif 'oddać' in sentence or 'zwrócić' in sentence:
return f'Proszę przynieść książkę/i do naszej biblioteki'
elif 'rezerwacja' in sentence or 'zarezerwować' in sentence or 'rezerwacji' in sentence:
s = 'Książka '
for slot in slots:
s += slot[1] + ' '
if slots:
s+= 'została zarezerwowana'
return s
return 'Nie mamy tej książki, więc nie da się jej zarezerwować'
elif 'biblioteka' in sentence or 'otwarta' in sentence:
return 'Biblioteka jest otwarta od poniedziałku do soboty w godzinach 8-20, bez świąt'
elif 'karta' in sentence or 'biblioteczna' in sentence or 'założyć' in sentence:
return """Założyć kartę biblioteczną można przez naszą stronę www.biblioteka.pl,
karta przyjdzie pocztą a opłata to 5 .
Również można odebrać w naszej bibliotece od poniedziałku do soboty w godzinach 8-20"""
elif 'zgubiłem' in sentece or 'zgubiłam' in sentence or 'zniszczyłam' in sentence or 'zniszczyłem':
return 'W razie zgubienia lub zniszczenia karty należy przyjść do biblioteki w celu jej zablokowania.'
if act == 'thankyou':
return random.choice(['Proszę!', 'Nie ma za co', 'Po to tutaj jestem!'])
if act == 'negate':
return 'Akcja została cofnięta'
if act == 'confirm':
if slots:
if 'wypożyczona' in sentence:
return f'Książka {slots[0][1]} została wypożyczona'
elif 'zarezerwowana' in sentence:
return f'Książka {slots[0][1]} została zarezerwowana'
if act == 'ack':
return random.choice(['W czymś jeszcze mogę pomóc?', 'Co mogę jeszcze zrobić'])
return 'Nie rozumiem pytania lub nie posiadamy takiej książki'
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 ."""
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))
sentence = input("Wiadomość użytkowniak: ")
print(answer(sentence))