{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "c31a012f", "metadata": {}, "outputs": [], "source": [ "import random" ] }, { "cell_type": "code", "execution_count": 2, "id": "21c8e0a4", "metadata": {}, "outputs": [], "source": [ "def nlg(system_act):\n", " intent, domain, slot, value = system_act\n", "\n", " if domain == 'payment' and intent == 'inform':\n", " if slot == 'type':\n", " if value == 'blik' or value == 'gotówka' or value == 'karta kredytowa' or value == 'karta restauracyjna' or value == 'bon upominkowy':\n", " return f\"Informuję, że {value} jest możliwą formą płatności w naszej restauracji.\"\n", " else:\n", " return f\"Informuję, że {value} nie jest możliwą formą płatności w naszej restauracji.\"\n", " if slot == 'vat':\n", " return f\"Twój vat jest {value} w rachunek.\"\n", " if slot == 'amount':\n", " return f\"Kwota Twojej płatności to {value}.\"\n", " else:\n", " return \"Nie mogę wykonać takiej operacji.\"\n", " elif domain == 'booking' and intent == 'inform':\n", " if slot == 'area':\n", " return f\"Ta restauracja znajduje się w dzielnicy {value}.\"\n", " if slot == 'restaurant_name':\n", " return f\"Oto twoja rezerwacja w {value}.\"\n", " if slot == \"book_people\":\n", " if value == 0:\n", " return f'Nie można zarezerwować stolika dla 0 osób.'\n", " elif value == 1:\n", " return f'Można zarezerwować stolik dla Ciebie.'\n", " elif value <= 10:\n", " return f'Znalazłem stolik dla {value} osób.'\n", " elif value >= 11:\n", " return f'Nie ma stoliku dla {value} osób.'\n", " else:\n", " return f'Nie znalazłem stolików dla podanych kryterów.'\n", " if slot == \"book_day\":\n", " return f\"Dzień Twojej rezerwacji to: {value}.\"\n", " if slot == \"book_time\":\n", " return f\"Godzina Twojej rezerwacji to: {value}.\"\n", " elif domain == \"order\" and intent == \"inform\":\n", " if slot == \"type\":\n", " if value == \"na wynos\":\n", " return f'Twoje zamówienie zostanie może zostać przygotowane do odbioru na wynos.'\n", " elif value == \"na miejscu\":\n", " return f'Możesz odebrać zamówienie na miejscu.'\n", " elif value == \"dostawa\":\n", " return f'Twoje zamówienie może być zrealizowane w formie dostawy.'\n", " if slot == \"price_range\":\n", " return f\"Porównując do cen w innych restauracjach, kwota Twojego zamówienia jest: {value}.\"\n", " if slot == \"restaurant_name\":\n", " return f\"Zamówienie zostanie wykonane przez {value}.\"\n", " if slot == \"area\":\n", " return f\"Zamówienie zostanie zrealizowane w dzielnicy {value}.\"\n", " if slot == \"book_time\":\n", " return f\"Godzina Twojego zamówienia to: {value}.\"\n", " if slot == \"book_day\":\n", " return f\"Dzień Twojego zamówienia to: {value}.\" \n", " \n", " \n", " elif domain == 'food' and intent == 'inform':\n", " if slot == 'size':\n", " if value == 'mała':\n", " return f\"Posiadamy dania w kategorii {value}, szczególnie dotyczy to pizzy, która ma średnice 30cm.\"\n", " elif value == 'średnia':\n", " return f\"Kategoria {value}, dotyczy tylko pizzy, która ma średnice 42cm.\"\n", " elif value == 'duża':\n", " return f\"Posiadamy dania w kategorii {value}, szczególnie dotyczy to pizzy, która ma średnice 50cm.\"\n", " else:\n", " return f\"Informuje, że nie posiadamy {value} w naszej ofercie.\"\n", " \n", " if slot == 'type':\n", " \n", " #Pizza\n", " if value == 'pizza':\n", " return f\"Informuje, że z kategorii {value} posiadamy w ofercie między innymi Margherite, Pepperoni czy Milano.\"\n", " \n", " #Makarony\n", " elif value == 'makaron':\n", " return f\"Informuje, że z kategorii {value} posiadamy w ofercie między innymi spaghetti bolognese, spaghetti napoli czy lasagne.\"\n", " \n", " #Zupy\n", " elif value == 'zupa':\n", " return f\"Informuje, że z kategorii {value} posiadamy w ofercie między innymi pomidorowa, ogórkowa czy grzybowa.\"\n", " \n", " #Sushi\n", " elif value == 'sushi':\n", " return f\"Inforumuję, że mamy jedzenie w kategorii {value}.\"\n", " \n", " #Pierogi\n", " elif value == 'pierogi':\n", " return f\"Informuje, że z kategorii {value} posiadamy w ofercie między innymi ruskie, mięsne lub z serem.\"\n", " \n", " #owoce morza\n", " elif value == 'owoce morza':\n", " return f\"Inforumuję, że mamy jedzenie w kategorii {value}.\"\n", " \n", " #ryby\n", " elif value == 'ryba':\n", " return f\"Informuje, że z kategorii {value} posiadamy w ofercie między innymi filet z dorsza lub łososia.\"\n", " \n", " #sałatka\n", " elif value == 'sałatka':\n", " return f\"Informuje, że z kategorii {value} posiadamy w ofercie między innymi grecką, cezar lub z grillowanym serem kozim.\"\n", " \n", " #bao\n", " elif value == 'bao':\n", " return f\"Inforumuję, że mamy jedzenie w kategorii {value}.\"\n", " \n", " #mięso\n", " elif value == 'mięso':\n", " return f\"Informuje, że z kategorii {value} posiadamy w ofercie między innymi kotlet schabowy, kebab lub stek z wołowiny.\"\n", " \n", " #fast food\n", " elif value == 'fast food':\n", " return f\"Informuje, że z kategorii {value} posiadamy w ofercie między innymi kebaba lub też burgera.\"\n", " \n", " #śniadania\n", " elif value == 'śniadania':\n", " return f\"Informuje, że z kategorii {value} posiadamy w ofercie między innymi szakszuke.\"\n", " \n", " else:\n", " return f\"Informuje, że nie posiadamy dania z podanej kategorii.\"\n", " \n", " \n", " if slot == 'price_range':\n", " if value == 'niska':\n", " return f\"Inforumuje, że {value} cena dotyczy dań do 15 zł.\"\n", " elif value == 'średnia':\n", " return f\"Inforumuje, że {value} cena dotyczy dań od 15zł do 25 zł.\"\n", " elif value == 'wysoka':\n", " return f\"Inforumuje, że {value} cena dotyczy dań od 25zł.\"\n", " \n", " if slot == 'name':\n", " if value in [\"pizza margherita\",\"pizza poznańska\",\"pizza peperoni\",\"pizza nowojorska\",\"pizza milano\",\"xiaolongbao\", \\\n", " \"Burger Butcher\",\"sałatka z grillowanym serem kozim\",\"pizza nolita\",\"szakszuka\",\"sałatka cezar\", \\\n", " \"spaghetti bolognese\",\"spaghetti napoli\",\"kotlet schabowy\",\"zupa pomidorowa\",\"pierogi ruskie\",\"ryba Dorsz\", \\\n", " \"krewetki na grillu\",\"kurczak curry\",\"tarta szpinakowa\",\"kebab\",\"zupa ogórkowa\",\"sushi maki\",\"pierogi z serem\",\\\n", " \"calamari\",\"gomen\",\"karp smażony\",\"pizza vegetariana\",\"sałatka z grillowanym kurczakiem\",\"steak z wieprzowiny\", \\\n", " \"ravioli ze szpinakiem i ricottą\",\"kotlet mielony\",\"zupa grzybowa\",\"sushi nigiri\",\"pierogi z mięsem\", \\\n", " \"krewetki w panierce\",\"filet z dorsza\",\"pizza hawajska\",\"sałatka cezar\", \"stek z kurczaka\", \"lasagne\", \\\n", " \"dushi california roll\",\"krewetki w sosie czosnkowym\",\"filet z łososia\",\"pizza capricciosa\",\"sałatka grecka\", \\\n", " \"stek z wołowiny\"]:\n", " return f\"Informuje, że posiadamy {value} w naszej ofercie.\"\n", " else:\n", " return f\"Informuje, że nie posiadamy {value} w naszej ofercie.\"\n", " \n", " \n", " \n", " \n", " elif domain == 'drink' and intent == 'inform':\n", " if slot == 'size':\n", " if value == 'mała':\n", " return f\"Informuje, że napój o rozmiarze {value} jest serwowany w małej szklance lub filiżance.\"\n", " elif value == 'standardowa':\n", " return f\"Informuje, że napój o rozmiarze {value} jest serwowany w dużej szklance.\"\n", " elif value == 'duża':\n", " return f\"Informuje, że napój o rozmiarze {value} jest serwowany w dzbanku lub w przypadku piwa w specjalnym kuflu.\"\n", " else:\n", " return f\"Informuje, że nie posiadamy {value} w naszej ofercie.\"\n", " \n", " if slot == 'price_range':\n", " if value == 'niska':\n", " return f\"Inforumuje, że {value} cena dotyczy napojów do 5 zł.\"\n", " elif value == 'średnia':\n", " return f\"Inforumuje, że {value} cena dotyczy napojów od 5 zł do 15 zł.\"\n", " elif value == 'wysoka':\n", " return f\"Inforumuje, że {value} cena dotyczy napojów od 15 zł.\"\n", " else:\n", " return f\"Informuje, że nie posiadamy {value} w naszej ofercie.\"\n", " \n", " if slot == 'name':\n", " if value in ['kawa', 'cola', 'herbata', 'pepsi', 'sok pomarańczowy', 'koktajl owocowy', 'sok ze świeżych pomarańczy', 'lemoniada', 'sprite', 'piwo', 'fanta']:\n", " return f\"Informuje, że posiadamy {value} w naszej ofercie.\"\n", " else:\n", " return f\"Informuje, że nie posiadamy {value} w naszej ofercie.\"\n", " \n", " elif domain == 'sauce' and intent == 'inform':\n", " if slot == 'size':\n", " if value == 'mała':\n", " return f\"Inforumuje, że sos o rozmiarze {value} jest serwowany w pojemniku plastikowym.\"\n", " elif value == 'duża':\n", " return f\"Inforumuje, że sos o rozmiarze {value} jest serwowany w szklanej misce.\"\n", " \n", " if slot == 'price_range':\n", " if value == 'niska':\n", " return f\"Inforumuje, {value} cena dotyczy sosów podawanych w plastikowym pojemniku.\"\n", " elif value == 'duża':\n", " return f\"Inforumuje, {value} cena dotyczy sosów podawanych w szklanej miseczce.\"\n", " \n", " if slot == 'name':\n", " 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\"]:\n", " return f\"Informuje, że posiadamy {value} w naszej ofercie.\"\n", " else: return f\"Informuje, że nie posiadamy {value} w naszej ofercie.\"\n", " \n", " \n", "\n", " elif intent == 'end_conversation':\n", " return random.choice(['Żegnam i dziękuję za skorzystanie z usługi.', 'Do widzenia.', \"Dziękuję za skorzystanie z usługi, do kolejnego razu.\"])\n", " elif intent == 'start_conversation':\n", " 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?\"])\n", " elif intent == 'affirm':\n", " return random.choice(['Tak.', 'Potwierdzam.', \"Mozliwe.\"])\n", " elif intent == 'deny':\n", " return random.choice(['Nie.', 'Nie potwierdzam.', \"Niemożliwe.\"]) \n", " elif intent == 'recommend' and slot==\"name\":\n", " if domain==\"food\":\n", " return f\"Rekomendowany posiłek to: {value}.\"\n", " if domain==\"drink\":\n", " return f\"Rekomendowany napój to: {value}.\" \n", " if domain==\"sauce\":\n", " return f\"Rekomendowany sos to: {value}.\"\n", " elif intent == 'recommend' and slot==\"type\":\n", " if domain==\"booking\":\n", " return f\"Rekomenduję następującą rezerwację stolika: {value}.\" \n", " if domain==\"order\":\n", " return f\"Rekomenduję takie zamówienie: {value}.\"\n", " if domain==\"payment\":\n", " return f\"Rekomendowana metoda płatności to: {value}.\" " ] }, { "cell_type": "code", "execution_count": 3, "id": "185b85f0", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'Informuję, że gotówka jest możliwą formą płatności w naszej restauracji.'" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nlg(['inform', 'payment', 'type', 'gotówka'])" ] }, { "cell_type": "code", "execution_count": 4, "id": "b276b31f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'Twoje zamówienie zostanie może zostać przygotowane do odbioru na wynos.'" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nlg(['inform', 'order', 'type', 'na wynos'])" ] }, { "cell_type": "code", "execution_count": 5, "id": "3ae7e57f", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'Oto twoja rezerwacja w biały kwiat.'" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nlg(['inform', 'booking', 'restaurant_name', 'biały kwiat'])" ] }, { "cell_type": "code", "execution_count": 6, "id": "f3cd64f8", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'Informuje, że z kategorii pizza posiadamy w ofercie między innymi Margherite, Pepperoni czy Milano.'" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nlg(['inform', 'food', 'type', 'pizza'])" ] }, { "cell_type": "code", "execution_count": 7, "id": "992cb313", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'Informuje, że posiadamy pepsi w naszej ofercie.'" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nlg(['inform', 'drink', 'name', 'pepsi'])" ] }, { "cell_type": "code", "execution_count": 8, "id": "252fe4b5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'Inforumuje, że sos o rozmiarze mała jest serwowany w pojemniku plastikowym.'" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nlg(['inform', 'sauce', 'size', 'mała'])" ] }, { "cell_type": "code", "execution_count": 9, "id": "90303149", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'Żegnam i dziękuję za skorzystanie z usługi.'" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nlg(['end_conversation', '', '', ''])" ] }, { "cell_type": "code", "execution_count": 10, "id": "b78e9d4a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'Cześć, w czym mogę pomóc?'" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nlg(['start_conversation', '', '', ''])" ] }, { "cell_type": "code", "execution_count": 11, "id": "37782f98", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'Rekomendowany posiłek to: zupa grzybowa.'" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nlg(['recommend', 'food', 'name', 'zupa grzybowa'])" ] }, { "cell_type": "code", "execution_count": 12, "id": "c74610a3", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'Rekomendowana metoda płatności to: blik.'" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nlg(['recommend', 'payment', 'type', 'blik'])" ] }, { "cell_type": "code", "execution_count": null, "id": "1f6859ea", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.2" } }, "nbformat": 4, "nbformat_minor": 5 }