systemy_dialogowe/NLG.ipynb
2023-06-01 22:59:42 +02:00

18 KiB

import random
def nlg(system_act):
    intent, domain, slot, value = system_act

    if domain == 'payment' and intent == 'inform':
        if slot == 'type':
            if value == 'blik' or value == 'gotówka' or value == 'karta kredytowa' or value == 'karta restauracyjna' or value == 'bon upominkowy':
                return f"Informuję, że {value} jest możliwą formą płatności w naszej restauracji."
            else:
                return f"Informuję, że {value} nie jest możliwą formą płatności w naszej restauracji."
        if slot == 'vat':
            return f"Twój vat jest {value} w rachunek."
        if slot == 'amount':
            return f"Kwota Twojej płatności to {value}."
        else:
            return "Nie mogę wykonać takiej operacji."
    elif domain == 'booking' and intent == 'inform':
        if slot == 'area':
            return f"Ta restauracja znajduje się w dzielnicy {value}."
        if slot == 'restaurant_name':
            return f"Oto twoja rezerwacja w {value}."
        if slot == "book people":
            if value == 0:
                return f'Nie można zarezerwować stolika dla 0 osób.'
            elif value == 1:
                return f'Można zarezerwować stolik dla Ciebie.'
            elif value <= 10:
                return f'Znalazłem stolik dla {value} osób.'
            elif value >= 11:
                return f'Nie ma stoliku dla {value} osób.'
            else:
                return f'Nie znalazłem stolików dla podanych kryterów.'
        if slot == "book day":
            return f"Dzień Twojej rezerwacji to: {value}."
        if slot == "book time":
            return f"Godzina Twojej rezerwacji to: {value}."
    elif domain == "order" and intent == "inform":
        if slot == "type":
            if value == "na wynos":
                return f'Twoje zamówienie zostanie może zostać przygotowane do odbioru na wynos.'
            elif value == "na miejscu":
                return f'Możesz odebrać zamówienie na miejscu.'
            elif value == "dostawa":
                return f'Twoje zamówienie może być zrealizowane w formie dostawy.'
        if slot == "price range":
            return f"Porównując do cen w innych restauracjach, kwota Twojego zamówienia jest: {value}."
        if slot == "restaurant_name":
            return f"Zamówienie zostanie wykonane przez {value}."
        if slot == "area":
            return f"Zamówienie zostanie zrealizowane w dzielnicy {value}."
        if slot == "book time":
            return f"Godzina Twojego zamówienia to: {value}."
        if slot == "book day":
            return f"Dzień Twojego zamówienia to: {value}."   
        
        
    elif domain == 'food' and intent == 'inform':
        if slot == 'size':
            if value == 'mała':
                return f"Posiadamy dania w kategorii {value}, szczególnie dotyczy to pizzy, która ma średnice 30cm."
            elif value == 'średnia':
                return f"Kategoria {value}, dotyczy tylko pizzy, która ma średnice 42cm."
            elif value == 'duża':
                return f"Posiadamy dania w kategorii {value}, szczególnie dotyczy to pizzy, która ma średnice 50cm."
            else:
                return f"Informuje, że nie posiadamy {value} w naszej ofercie."
        
        if slot == 'type':
                
        #Pizza
            if value == 'pizza':
                return f"Informuje, że z kategorii {value} posiadamy w ofercie między innymi Margherite, Pepperoni czy Milano."
        
        #Makarony
            elif value == 'makaron':
                return f"Informuje, że z kategorii {value} posiadamy w ofercie między innymi spaghetti bolognese, spaghetti napoli czy lasagne."
        
        #Zupy
            elif value == 'zupa':
                return f"Informuje, że z kategorii {value} posiadamy w ofercie między innymi pomidorowa, ogórkowa czy grzybowa."
        
        #Sushi
            elif value == 'sushi':
                return f"Inforumuję, że mamy jedzenie w kategorii {value}."
        
        #Pierogi
            elif value == 'pierogi':
                return f"Informuje, że z kategorii {value} posiadamy w ofercie między innymi ruskie, mięsne lub z serem."
        
        #owoce morza
            elif value == 'owoce morza':
                return f"Inforumuję, że mamy jedzenie w kategorii {value}."
        
        #ryby
            elif value == 'ryba':
                return f"Informuje, że z kategorii {value} posiadamy w ofercie między innymi filet z dorsza lub łososia."
            
        #sałatka
            elif value == 'sałatka':
                return f"Informuje, że z kategorii {value} posiadamy w ofercie między innymi grecką, cezar lub z grillowanym serem kozim."
            
        #bao
            elif value == 'bao':
                return f"Inforumuję, że mamy jedzenie w kategorii {value}."
            
        #mięso
            elif value == 'mięso':
                return f"Informuje, że z kategorii {value} posiadamy w ofercie między innymi kotlet schabowy, kebab lub stek z wołowiny."
               
        #fast food
            elif value == 'fast food':
                return f"Informuje, że z kategorii {value} posiadamy w ofercie między innymi kebaba lub też burgera."
            
        #śniadania
            elif value == 'śniadania':
                return f"Informuje, że z kategorii {value} posiadamy w ofercie między innymi szakszuke."
            
            else:
                return f"Informuje, że nie posiadamy dania z podanej kategorii."
                
        
        if slot == 'price range':
            if value == 'niska':
                return f"Inforumuje, że {value} cena dotyczy dań do 15 zł."
            elif value == 'średnia':
                return f"Inforumuje, że {value} cena dotyczy dań od 15zł do 25 zł."
            elif value == 'wysoka':
                return f"Inforumuje, że {value} cena dotyczy dań od 25zł."
                
        if slot == 'name':
            if value in ["pizza margherita","pizza poznańska","pizza peperoni","pizza nowojorska","pizza milano","xiaolongbao", \
                        "Burger Butcher","sałatka z grillowanym serem kozim","pizza nolita","szakszuka","sałatka cezar", \
                        "spaghetti bolognese","spaghetti napoli","kotlet schabowy","zupa pomidorowa","pierogi ruskie","ryba Dorsz", \
                        "krewetki na grillu","kurczak curry","tarta szpinakowa","kebab","zupa ogórkowa","sushi maki","pierogi z serem",\
                        "calamari","gomen","karp smażony","pizza vegetariana","sałatka z grillowanym kurczakiem","steak z wieprzowiny", \
                        "ravioli ze szpinakiem i ricottą","kotlet mielony","zupa grzybowa","sushi nigiri","pierogi z mięsem", \
                        "krewetki w panierce","filet z dorsza","pizza hawajska","sałatka cezar", "stek z kurczaka", "lasagne", \
                        "dushi california roll","krewetki w sosie czosnkowym","filet z łososia","pizza capricciosa","sałatka grecka", \
                        "stek z wołowiny"]:
                return f"Informuje, że posiadamy {value} w naszej ofercie."
            else:
                return f"Informuje, że nie posiadamy {value} w naszej ofercie."
            
            
                 
        
    elif domain == 'drink' and intent == 'inform':
        if slot == 'size':
            if value == 'mała':
                return f"Informuje, że napój o rozmiarze {value} jest serwowany w małej szklance lub filiżance."
            elif value == 'standardowa':
                return f"Informuje, że napój o rozmiarze {value} jest serwowany w dużej szklance."
            elif value == 'duża':
                return f"Informuje, że napój o rozmiarze {value} jest serwowany w dzbanku lub w przypadku piwa w specjalnym kuflu."
            else:
                return f"Informuje, że nie posiadamy {value} w naszej ofercie."
                
        if slot == 'price range':
            if value == 'niska':
                return f"Inforumuje, że {value} cena dotyczy napojów do 5 zł."
            elif value == 'średnia':
                return f"Inforumuje, że {value} cena dotyczy napojów od 5 zł do 15 zł."
            elif value == 'wysoka':
                return f"Inforumuje, że {value} cena dotyczy napojów od 15 zł."
            else:
                return f"Informuje, że nie posiadamy {value} w naszej ofercie."
            
        if slot == 'name':
            if value in ['kawa', 'cola', 'herbata', 'pepsi', 'sok pomarańczowy', 'koktajl owocowy', 'sok ze świeżych pomarańczy', 'lemoniada', 'sprite', 'piwo', 'fanta']:
                return f"Informuje, że posiadamy {value} w naszej ofercie."
            else:
                return f"Informuje, że nie posiadamy {value} w naszej ofercie."
            
    elif domain == 'sauce' and intent == 'inform':
        if slot == 'size':
            if value == 'mała':
                return f"Inforumuje, że sos o rozmiarze {value} jest serwowany w pojemniku plastikowym."
            elif value == 'duża':
                return f"Inforumuje, że sos o rozmiarze {value} jest serwowany w szklanej misce."
        
        if slot == 'price range':
            if value == 'niska':
                return f"Inforumuje, {value} cena dotyczy sosów podawanych w plastikowym pojemniku."
            elif value == 'duża':
                return f"Inforumuje, {value} cena dotyczy sosów podawanych w szklanej miseczce."
            
        if slot == 'name':
            if value in ["sos pomidorowy","sos czosnkowy","sos bbq","sos tatarski","sos Meksykański","sos aioli","sos śmietanowo-koperkowy","sos pikantny","sos curry","sos hollandaise"]:
                 return f"Informuje, że posiadamy {value} w naszej ofercie."
            else:                return f"Informuje, że nie posiadamy {value} w naszej ofercie."
        
        

    elif intent == 'end_conversation':
        return random.choice(['Żegnam i dziękuję za skorzystanie z usługi.', 'Do widzenia.', "Dziękuję za skorzystanie z usługi, do kolejnego razu."])
    elif intent == 'start_conversation':
        return random.choice(['Witaj, jestem asystentem dialogowym, dzięki któremu złożysz zamówienie w restuaracji.', 'Cześć, w czym mogę pomóc?', "Witam w usłudze, w czym mogę pomóc?"])
    elif intent == 'affirm':
        return random.choice(['Tak.', 'Potwierdzam.', "Mozliwe."])
    elif intent == 'deny':
        return random.choice(['Nie.', 'Nie potwierdzam.', "Niemożliwe."])   
    elif intent == 'recommend' and slot=="name":
        if domain=="food":
            return f"Rekomendowany posiłek to: {value}."
        if domain=="drink":
            return f"Rekomendowany napój to: {value}."    
        if domain=="sauce":
            return f"Rekomendowany sos to: {value}."
    elif intent == 'recommend' and slot=="type":
        if domain=="booking":
            return f"Rekomenduję następującą rezerwację stolika: {value}."  
        if domain=="order":
            return f"Rekomenduję takie zamówienie: {value}."
        if domain=="payment":
            return f"Rekomendowana metoda płatności to: {value}."  
nlg(['inform', 'payment', 'type', 'gotówka'])
'Informuję, że gotówka jest możliwą formą płatności w naszej restauracji.'
nlg(['inform', 'order', 'type', 'na wynos'])
'Twoje zamówienie zostanie może zostać przygotowane do odbioru na wynos.'
nlg(['inform', 'booking', 'restaurant_name', 'biały kwiat'])
'Oto twoja rezerwacja w biały kwiat.'
nlg(['inform', 'food', 'type', 'pizza'])
'Informuje, że z kategorii pizza posiadamy w ofercie między innymi Margherite, Pepperoni czy Milano.'
nlg(['inform', 'drink', 'name', 'pepsi'])
'Informuje, że posiadamy pepsi w naszej ofercie.'
nlg(['inform', 'sauce', 'size', 'mała'])
'Inforumuje, że sos o rozmiarze mała jest serwowany w pojemniku plastikowym.'
nlg(['end_conversation', '', '', ''])
'Żegnam.'
nlg(['start_conversation', '', '', ''])
'Cześć, w czym mogę pomóc?'
nlg(['recommend', 'food', 'name', 'zupa grzybowa'])
'Rekomendowany posiłek to: Zupa grzybowa.'
nlg(['recommend', 'payment', 'type', 'blik'])
'Rekomendowana metoda płatności to: blik.'