Merge pull request 'dialogue_system' (#3) from dialogue_system into master

Reviewed-on: #3
Reviewed-by: Iwona Christop <iwochr2@st.amu.edu.pl>
Reviewed-by: Adrian Charkiewicz <adrcha2@st.amu.edu.pl>
This commit is contained in:
Mikołaj Krzymiński 2022-03-23 11:56:30 +01:00
commit 316afb5eef
7 changed files with 722 additions and 134 deletions

214
.gitignore vendored Normal file
View File

@ -0,0 +1,214 @@
### Python template
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
.pybuilder/
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
# For a library or package, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
# .python-version
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
__pypackages__/
# Celery stuff
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
# pytype static type analyzer
.pytype/
# Cython debug symbols
cython_debug/
### JetBrains template
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf
# Generated files
.idea/**/contentModel.xml
# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml
# Gradle
.idea/**/gradle.xml
.idea/**/libraries
# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn. Uncomment if using
# auto-import.
# .idea/artifacts
# .idea/compiler.xml
# .idea/jarRepositories.xml
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# *.iml
# *.ipr
# CMake
cmake-build-*/
# Mongo Explorer plugin
.idea/**/mongoSettings.xml
# File-based project format
*.iws
# IntelliJ
out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Cursive Clojure plugin
.idea/replstate.xml
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
# Editor-based Rest Client
.idea/httpRequests
# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser
.idea

View File

@ -1,134 +0,0 @@
import re
import random
class Elizabeth:
questions = ((r'Potrzebuję (.*)',
('Czemu potrzebujesz %1?',
'Naprawdę pomogłoby, gdybyś miał %1?',
'Czy aby na pewno potrzebujesz %1?')),
(r'Jestem (.*)',
('Czy przyszedłeś dziś do mnie, ponieważ jesteś %1?',
'Jak długo jesteś %1?',
'Jak czujesz się z byciem %1?')),
('Jesteś (.*)',
('Czemu to ważne, że jestem %1?',
'Chciałbyś, abym nie był %1?',
'Mozę to ty uważasz, że jestem %1.',
'Mogę być %1, co o tym sądzisz?')),
(r'Co (.*)',
('Czemu pytasz?',
'W jaki sposób odpowiedź na to pytania by ci pomogą?',
'A co ty myślisz?')),
(r'Jak (.*)',
('A jak myślisz?',
'Może sam odpowiedz sobie na to pytanie',
"Jakie jest twoje PRAWDZIWE pytanie")),
(r'Ponieważ (.*)',
('Czy to na pewno prawdziwy powód?',
'Jakie inne powody przychodzą ci na myśl?',
'Skoro %1, to jakie inne powody są prawdziwe?')),
(r'(.*) przepraszam (.*)',
('Nie masz za co przepraszać',
'Jakie uczucia masz w sobie, gdy przepraszasz?')),
(r'Myślę, że (.*)',
('Jesteś niepewny co do %1?', 'Naprawdę tak myślisz?', "Ale nie jesteś pewien czy %1?")),
(r'Dlaczego (.*)',
("Czemu to ty nie powiesz mi dlaczego %1?", 'CZemu myślisz, że %1?')),
(r'Chcę (.*)',
('Co to by dla ciebie oznaczało, gdybyś dostał %1?',
'Czemu chcesz %1?',
'Co byś zrobił, gdybyś dostał %1?',
'Gdybyś dostał %1, to co byś zrobił?')),
(r'(.*)matka(.*)',
('Powiedz mi więcej o swojej matce.',
'Jak wyglądałą relacja z twoją matką?',
'Jakie są twoje uczucia dziś?')),
(r'(.*) ojciec(.*)',
('Powiedz mi więcej o swoim ojcu.',
'Jak twój ojciec sprawia, że się czujesz?'
)),
(r'(.*)\\?',
('Być może odpowiedź jest w tobie?',
'Czemu to TY nie powiesz MI?',
"Czemu o to pytasz?")),
(r'(.*)',
('Proszę, powiedz mi więcej',
"Zmieńmy temat... opowiedz mi o swojej rodzinie.",
'Możesz rozwinąć?',
'Możesz powiedzieć mi więcej o %1?',
'Rozumiem.',
'To bardzo interesujące',
'Rozumiem.. i co Ci to mówi?',
'Jakie uczucia to w tobie wywołuje?',
'Jak się czujesz, mówiąc to?')),
(
r"Nie moge (.*)",
(
"Skad wiesz, ze nie mozesz %1?",
"Byc moze moglbys %1, gdybys sprobowal.",
"Co musialbys zrobic zeby %1?",
)),
(
r"Jestem (.*)",
(
"Czy rozmawiasz ze mna poniewaz jestes %1?",
"Od jak dawna jestes %1?",
"Jak sie czujesz z tym, ze jestes %1?",
"Jak sie czujesz bedac %1?",
"Dlaczego mowisz mi, ze jestes %1?",
"Dlaczego uwazasz, ze jestes %1?",
)),
(
r"Czy jestes (.*)",
(
"Dlaczego ma to znaczenie czy jestem %1?",
"Czy wolabys gdybym nie byl %1?",
"Byc moze uwazasz, ze jestem %1.",
"Byc moze jestem %1, co o tym sadzisz?",
)),
(
r"Co (.*)",
(
"Dlaczego pytasz?",
"W jaki sposob pomoglaby ci odpowiedz na to pytanie?",
"Co o tym myslisz?",
)),
(
r"Jak (.*)",
(
"Jak sadzisz?",
"Byc moze potrafisz odpowiedziec na swoje wlasne pytanie.",
"O co tak naprawde pytasz?",
)),
(
r"Poniewaz (.*)",
(
"Czy to jest prawdziwy powod?",
"Jakie inne powody przychodza Ci na mysl?",
"Czy ten powod odnosi sie do czegos innego?",
"Jesli %1, to co jeszcze musi byc prawda?",
))
)
def ask(self, question):
question = question.lower()
for i in self.questions:
result = re.match(i[0], question)
if result:
print(random.choice(i[1]))
return
ela = Elizabeth()
print("Cześć, o czym chcesz porozmawiać?")
while True:
question = input().lower()
if question == "cześć" or question == "do widzenia":
print("Do widzenia")
break
ela.ask(question)

View File

@ -0,0 +1,137 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"collapsed": false
},
"source": [
"![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n",
"<div class=\"alert alert-block alert-info\">\n",
"<h1> Systemy Dialogowe </h1>\n",
"<h2> 1. <i>Rodzaje system\u00f3w dialogowych</i> [laboratoria]</h2> \n",
"<h3> Marek Kubis (2021)</h3>\n",
"</div>\n",
"\n",
"![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Rodzaje system\u00f3w dialogowych\n",
"============================\n",
"\n",
"Wprowadzenie\n",
"------------\n",
"\n",
"Systemy dialogowe mo\u017cna zgrubnie podzieli\u0107 na dwie kategorie <cite>(Jurafsky and Martin, 2020)</cite>:\n",
"\n",
" 1. chatboty,\n",
"\n",
" 2. systemy ukierunkowane na wykonywanie zada\u0144 (ang. task-oriented dialogue agents).\n",
"\n",
"### Chatboty\n",
"Przeznaczeniem chatbota\n",
"jest prowadzenie swobodnej dyskusji z u\u017cytkownikiem na dowolny (nienarzucony z g\u00f3ry) temat.\n",
"Konwersacja z chatbotem nie s\u0142u\u017cy wype\u0142nieniu \u017cadnego z g\u00f3ry okre\u015blonego zadania.\n",
"\n",
"Klasycznym przyk\u0142adem chatbota jest [ELIZA](https://en.wikipedia.org/wiki/ELIZA) <cite>(Weizenbaum, 1966)</cite>.\n",
"Program ten,\n",
"udaj\u0105c psychoanalityka, mia\u0142 zademonstrowa\u0107 potencja\u0142 tkwi\u0105cy w komunikacji cz\u0142owieka z komputerem w\n",
"j\u0119zyku naturalnym. Jego pythonow\u0105 implementacj\u0119 znajdziemy w pakiecie [nltk](www.nltk.org)."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from nltk.chat import eliza\n",
"eliza.demo()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"ELIZA sk\u0142ada si\u0119 ze zbioru wzorc\u00f3w, kt\u00f3re s\u0105 dopasowywane do wypowiedzi u\u017cytkownika.\n",
"Z ka\u017cdym wzorcem jest powi\u0105zany zestaw szablon\u00f3w, kt\u00f3re s\u0105 wykorzystywane do przygotowania\n",
"odpowiedzi dla u\u017cytkownika."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"eliza.pairs[:3]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Systemy dialogowe ukierunkowane na wykonywanie zada\u0144\n",
"Systemy ukierunkowane na wykonywanie zada\u0144 b\u0119d\u0105 stanowi\u0107 g\u0142\u00f3wny temat tego przedmiotu.\n",
"Dla uproszenia b\u0119dziemy je nazywa\u0107 *agentami dialogowymi*.\n",
"\n",
"Pierwotnie agenty dialogowe by\u0142y ukierunkowywane na jedno, \u015bci\u015ble okre\u015blone zadanie.\n",
"Systemem tego typu by\u0142 GUS <cite>(Bobrow, 1977)</cite> umo\u017cliwiaj\u0105cy planowanie podr\u00f3\u017cy.\n",
"\n",
"Obecnie zar\u00f3wno w praktyce badawczej jak i w zastosowaniach przemys\u0142owych rozwijane s\u0105 systemy\n",
"ukierunkowane na wykonywanie wielu zada\u0144 r\u00f3wnocze\u015bnie.\n",
"*Inteligentne asystenty osobiste* (ang. *IPA*, *Intelligent Personal Assistant*) takie, jak:\n",
"\n",
" - [Alexa](https://developer.amazon.com/en-US/alexa),\n",
" - [Bixby](http://bixby.samsung.com/),\n",
" - [Google Assistant](https://assistant.google.com/),\n",
" - [Siri](https://www.apple.com/siri/)\n",
"\n",
"realizuj\u0105 wiele cel\u00f3w u\u017cytkownika, do kt\u00f3rych nale\u017c\u0105 m.in.:\n",
"\n",
" - wyszukiwanie kontakt\u00f3w w ksi\u0105\u017cce adresowej,\n",
" - zarz\u0105dzanie kalendarzem,\n",
" - zmiana ustawie\u0144 telefonu.\n",
"\n",
"Zadanie\n",
"-------\n",
"Zaimplementowa\u0107 program typu ELIZA prowadz\u0105cy konwersacj\u0119 w j\u0119zyku polskim.\n",
"Kod \u017ar\u00f3d\u0142owy umie\u015bci\u0107 w ga\u0142\u0119zi `chatbot` repozytorium projektowego.\n",
"\n",
"Literatura\n",
"----------\n",
" 1. Dan Jurafsky and James H. Martin, *Speech and Language Processing*, 3rd ed. draft,\n",
"\tch. 24, Chatbots and Dialogue Systems,\n",
" https://web.stanford.edu/~jurafsky/slp3/24.pdf\n",
" data dost\u0119pu: 14 marca 2021.\n",
"\n",
" 2. J. Weizenbaum, ELIZA - A Computer Program For the Study of Natural Language Communication\n",
" Between Man And Machine Communications of the ACM, Vol 9, No 1, January 1966,\n",
" https://cse.buffalo.edu/~rapaport/572/S02/weizenbaum.eliza.1966.pdf\n",
" data dost\u0119pu: 14 marca 2021.\n",
"\n",
" 3. Bobrow, D. G., Kaplan, R. M., Kay, M., Norman, D. A., Thompson, H., and Winograd, T. (1977).\n",
" GUS, A frame driven dialog system. Artificial Intelligence 8, 155\u2013173."
]
}
],
"metadata": {
"jupytext": {
"cell_metadata_filter": "-all",
"main_language": "python",
"notebook_metadata_filter": "-all"
},
"author": "Marek Kubis",
"email": "mkubis@amu.edu.pl",
"lang": "pl",
"subtitle": "1.Rodzaje system\u00f3w dialogowych[laboratoria]",
"title": "Systemy Dialogowe",
"year": "2021"
},
"nbformat": 4,
"nbformat_minor": 4
}

View File

@ -0,0 +1,122 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"collapsed": false
},
"source": [
"![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n",
"<div class=\"alert alert-block alert-info\">\n",
"<h1> Systemy Dialogowe </h1>\n",
"<h2> 2. <i>Analiza wymaga\u0144</i> [laboratoria]</h2> \n",
"<h3> Marek Kubis (2021)</h3>\n",
"</div>\n",
"\n",
"![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Analiza Wymaga\u0144\n",
"===============\n",
"\n",
"Projektowanie system\u00f3w dialogowych\n",
"----------------------------------\n",
"\n",
"Projektowanie systemu dialogowego jest procesem [zorientowanym na u\u017cytkownika](https://en.wikipedia.org/wiki/User-centered_design) <cite>(por. Jurafsky and Martin, 2020; Gould and Lewis, 1985)</cite>, kt\u00f3ry wymaga:\n",
"\n",
" 1. Analizy tego kim jest docelowy u\u017cytkownik systemu i na czym polegaj\u0105 zadania (cele), kt\u00f3re chce on zrealizowa\u0107.\n",
"\n",
" 2. Budowy symulator\u00f3w i prototyp\u00f3w.\n",
"\n",
" 3. Przyrostowego rozwoju i testowania z udzia\u0142em u\u017cytkownik\u00f3w.\n",
"\n",
"Punktami 2 i 3 zajmiemy si\u0119 na kolejnych zaj\u0119ciach. Tematem dzisiejszych zaj\u0119\u0107 jest punkt 1.\n",
"\n",
"Zadania\n",
"-------\n",
" 1. Wybra\u0107 temat projektu.\n",
"\n",
" 2. Zidentyfikowa\u0107 podstawowe zadania (cele), kt\u00f3re u\u017cytkownik chce zrealizowa\u0107 korzystaj\u0105c z systemu.\n",
"\n",
" 3. Dla ka\u017cdego zidentyfikowanego zadania napisa\u0107 przyk\u0142adowy dialog, w toku kt\u00f3rego system zrealizuje cel u\u017cytkownika.\n",
"\n",
" 4. Dialogi zapisa\u0107 w dokumencie `requirements-analysis.md` i umie\u015bci\u0107 w katalogu g\u0142\u00f3wnym ga\u0142\u0119zi\n",
" `master` repozytorium projektowego. Dokument prosz\u0119 przygotowa\u0107 korzystaj\u0105c z\n",
" [szablonu](requirements-analysis.md).\n",
"\n",
"Przyk\u0142adowe tematy projekt\u00f3w\n",
"----------------------------\n",
"\n",
" - System przyjmowania zam\u00f3wie\u0144 w restauracji\n",
"\n",
" - System rezerwacji pokoi hotelowych\n",
"\n",
" - System rezerwacji wizyt u lekarza\n",
"\n",
" - System sprzeda\u017cy bilet\u00f3w kinowych\n",
"\n",
" - System sprzeda\u017cy bilet\u00f3w kolejowych\n",
"\n",
" - System obs\u0142ugi wypo\u017cycze\u0144 w bibliotece\n",
"\n",
" - Asystent zarz\u0105dzaj\u0105cy kalendarzem spotka\u0144\n",
"\n",
" - Asystent wykonuj\u0105cy podstawowe czynno\u015bci w systemie operacyjnym"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Metody pozyskiwania danych do budowy system\u00f3w dialogowych\n",
"---------------------------------------------------------\n",
" 1. Eksperymenty typu Czarnoksi\u0119\u017cnik z Oz (temat naszych nast\u0119pnych zaj\u0119\u0107).\n",
"\n",
" 2. Zapisy rozm\u00f3w z operatorami infolinii (RODO!).\n",
"\n",
" 3. Dokumenty typu FAQ.\n",
"\n",
" 3. Dialogi z innych, zbli\u017conych dziedzin.\n",
"\n",
" 4. Dane dialogowe og\u00f3lnego przeznaczenia:\n",
"\n",
" - napisy filmowe: [OpenSubtitles](https://opus.nlpl.eu/OpenSubtitles-v2018.php)\n",
"\n",
" - logi z IRCa: [Ubuntu Dialogue Corpus](https://github.com/rkadlec/ubuntu-ranking-dataset-creator)\n",
"\n",
" - dyskusje na twitterze.\n",
"\n",
"Literatura\n",
"----------\n",
" 1. Dan Jurafsky and James H. Martin, *Speech and Language Processing*, 3rd ed. draft,\n",
"\tch. 24, Chatbots and Dialogue Systems,\n",
" https://web.stanford.edu/~jurafsky/slp3/24.pdf,\n",
" data dost\u0119pu: 14 lutego 2021.\n",
"\n",
" 2. Gould, J. D. and Lewis, C. (1985). Designing for usability:\n",
" Key principles and what designers think. CACM 28(3), 300\u2013311.\n",
" http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.84.8860&rep=rep1&type=pdf,\n",
" data dost\u0119pu: 21 lutego 2021."
]
}
],
"metadata": {
"jupytext": {
"cell_metadata_filter": "-all",
"main_language": "python",
"notebook_metadata_filter": "-all"
},
"author": "Marek Kubis",
"email": "mkubis@amu.edu.pl",
"lang": "pl",
"subtitle": "2.Analiza wymaga\u0144[laboratoria]",
"title": "Systemy Dialogowe",
"year": "2021"
},
"nbformat": 4,
"nbformat_minor": 4
}

8
tasks/zad1/cheddar.py Normal file
View File

@ -0,0 +1,8 @@
from nltk.chat.util import Chat
import consts as consts
cheddy = Chat(consts.questions, reflections=consts.reflections)
print("\nNapisz 'quit' aby zakonczyc.")
print("-" * 70)
print("Witaj. Co chcesz mi powiedzieć?")
cheddy.converse()

117
tasks/zad1/consts.py Normal file
View File

@ -0,0 +1,117 @@
# questions and reflections for cheddar chatbot
questions = [(r"Potrzebuję (.*)",
('Czemu potrzebujesz %1?',
'Czy aby na pewno potrzebujesz %1?')),
(r'Jestem (.*)',
('Czy przyszedłeś dziś do mnie, ponieważ jesteś %1?',
'Jak długo jesteś %1?',
'Jak czujesz się z byciem %1?')),
(r'Jesteś (.*)',
('Czemu to ważne, że jestem %1?',
'Chciałbyś, abym nie był %1?',
'Możę to ty uważasz, że jestem %1.',
'Mogę być %1, co o tym sądzisz?',
"Czy rozmawiasz że mną, ponieważ jesteś %1?",
"Od jak dawna jesteś %1?",
"Dlaczego mówisz mi, że jesteś %1?",
"Dlaczego uważasz, że jesteś %1?"
)),
(r'Co (.*)',
('Czemu pytasz?',
'W jaki sposób odpowiedź na to pytania by ci pomogła?',
'A co ty myślisz?')),
(r'Jak (.*)',
('A jak myślisz?',
'Może sam odpowiedz sobie na to pytanie',
"Jakie jest twoje PRAWDZIWE pytanie")),
(r'Ponieważ (.*)',
('Czy to na pewno prawdziwy powód?',
'Jakie inne powody przychodzą ci na myśl?',
'Skoro %1, to jakie inne powody są prawdziwe?')),
(r'(.*) przepraszam (.*)',
('Nie masz za co przepraszać',
'Jakie uczucia masz w sobie, gdy przepraszasz?')),
(r'Myślę, że (.*)',
('Jesteś niepewny co do tego?', 'Naprawdę tak myślisz?', "Ale nie jesteś pewien?")),
(r'Dlaczego (.*)',
("Czemu to ty nie powiesz mi dlaczego %1?", 'Czemu myślisz, że %1?')),
(r'Chcę (.*)',
('Co to by dla ciebie oznaczało, gdybyś to dostał?',
'Czemu chcesz %1?',
'Co byś zrobił, gdybyś dostał %1?',
'Gdybyś dostał %1, to co byś zrobił?')),
(r'(.*)matka(.*)',
('Powiedz mi więcej o swojej matce.',
'Jak wyglądałą relacja z twoją matką?',
'Jakie są twoje uczucia dziś?')),
(r'(.*) ojciec(.*)',
('Powiedz mi więcej o swoim ojcu.',
'Jak twój ojciec sprawia, że się czujesz?')),
(r"Nie mogę (.*)",
("Skąd wiesz, że nie możesz %1?",
"Byc może mogłbyś %1, gdybyś spróbował.",
"Co musialbyś zrobić żeby %1?")),
(r"Czy jesteś (.*)",
("Dlaczego ma to znaczenie czy jestem %1?",
"Czy wolabys gdybym nie był %1?",
"Byc moze uważasz, że jestem %1.",
"Byc moze jestem %1, co o tym sadzisz?",)),
(r"Co (.*)",
("Dlaczego pytasz?",
"W jaki sposob pomogłaby ci odpowiedz na to pytanie?",
"Co o tym myślisz?",)),
(r"Jak (.*)",
("Jak sadzisz?",
"Byc moze potrafisz odpowiedziec na swoje wlasne pytanie.",
"O co tak naprawde pytasz?",)),
(r"Poniewaz (.*)",
("Czy to jest prawdziwy powod?",
"Jakie inne powody przychodzą Ci na myśl?",
"Czy ten powod odnosibędącdo czegoś innego?",
"Jesli %1, to co jeszcze musi byc prawda?",
)),
(r'quit',
('Do usłyszenia!',
'Miłego dnia!',)),
(r'(.*)\?',
('Być może odpowiedź jest w tobie?',
'Czemu to TY nie powiesz MI?',
"Czemu o to pytasz?")),
(r'(.*)',
('Proszę, powiedz mi więcej',
"Zmieńmy temat... opowiedz mi o swojej rodzinie.",
'Możesz rozwinąć?',
'Możesz powiedzieć mi więcej o %1?',
'Rozumiem.',
'To bardzo interesujące',
'Rozumiem.. i co Ci to mówi?',
'Jakie uczucia to w tobie wywołuje?',
'Jak się czujesz, mówiąc to?')),
]
reflections = {
"jestem": "jesteś",
"byłem": "byłeś",
"byłam": "byłaś",
"ja": "ty",
"chciałbym": "chciałbyś",
"chciałabym": "chciałabyś",
"mam": "masz",
"będę": "będziesz",
"mój": "twój",
"twoja": "moja",
"moim": "twoim",
"mojego": "twojego",
"jesteś": "jestem",
"byleś": "byłem",
"masz": "mam",
"będziesz": "będę",
"twój": "mój",
"twoim": "moim",
"twojego": "mojego",
"ty": "ja",
"nasz": "wasz",
"mogę": "możesz",
"mnie": "cię"
}

View File

@ -0,0 +1,124 @@
Nachos dialogue system
==============
Zadanie 1: Dokonanie rezerwacji
--------------------------------
*system:* Witamy w systemie kinowym Nachos, jak mogę Ci pomóc?
*user:* Dzień dobry, chciałbym dokonać rezerwacji
*system:* Jaki film Cię interesuje?
*user:* Alicja w Krainie Czarów?
*system:* Film nie znajduje się w repertuarze, podaj inny tytuł.
*user:* Batman
*system:* Jaki termin Cię interesuje?
*user:* Dzisiaj, popołudniu?
*system:* Dostępne godziny to: 13:30, 15:20, 17:45
*user:* 15:20
*system:* Ile potrzebujesz biletów?
*user:* 2
*system:* Gdzie chciałbyś usiąść?
*user:* Z tyłu, na środku
*system:* Zostały Ci przydzielone miejsca H15, H16, numer Twojej rezerwacji to 123431.
Zadanie 2: Anulowanie rezerwacji
--------------------------------
*system:* Witamy w systemie kinowym Nachos.
*user:* Dzień dobry, chciałbym anulować rezerwację.
*system:* Proszę podać numer rezerwacji.
*user:* 123431
*system:* Rezerwacja nr 123431 w dniu 16.03 na godzinę 15:20 zostałą anulowana.
*user:* Dziękuję <3
Zadanie 3: Podawanie aktualnego repertuaru
--------------------------
*system:* Witamy w systemie kinowym Nachos.
*user:* Chciałbym dowiedzieć się, co jest teraz grane.
*system:* Obecnie w repertuarze znajdują się: Batman, To nie wypanda, Inni ludzie, Ambulans, Uncharted, Ups 2, Nasze magiczne Encanto.
Zadanie 4: Zmiana terminu rezerwacji
--------------------------
*system:* Witamy w systemie kinowym Nachos.
*user:* Chciałbym zmienić termin rezerwacji
*system:* Proszę o podanie numeru rezerwacji.
*user:* 123431
*system:* Proszę podać nowy termin rezerwacji.
*user:* środa 18:30
*system:* Zmiana została dokonana.
Zadanie 5: Podanie oferty gastronomicznej
--------------------------
*system:* Witamy w systemie kinowym Nachos.
*user:* Co można zakupić w barze?
*system:* W barze dostępne są obecnie: zestaw z solonym, słodkim lub maślany popcornem, wraz z colą/fantą/sprite lub zestaw *Nachosów* z wybranym dipem.
Zadanie 6: Pytanie o dostępne metody płatności
--------------------------
*system:* Witamy w systemie kinowym Nachos.
*user:* Czy można płacić kartą?
*system:* Możliwymi metodami płatności przy kasie są: gotówka, karta płatnicza, kod BLIK, przelew bankowy. Na stronie zakupu można dokonać kodem blikem, przelewem bankowym a także PayU.
Zadanie 7: Pytanie o nadchodzące premiery
--------------------------
*system:* Witamy w systemie kinowym Nachos.
*user:* Jakie filmy wejdą do kin niedługo?
*system:* W naszym repetuarze będą obecne: Morbius - od 1 kwietnia, Zaginione miasto - od 1 kwietnia, Fanastyczne zwierzęta: tajemnice Dumbledorea - od 8 kwietnia, doktor strange w multiwersum obłędu - od 6 maja.
Zadanie 8: Podawanie aktualnego repertuaru z podziałem na kategorię
--------------------------
*system:* Witamy w systemie kinowym Nachos.
*user:* Czy puszczane są teraz jakieś komedie romantyczne?
*system:* Obecnie w repertuarze w podanej kategorii znajdują się: Najgorszy człowiek na świecie.
*user:* A czy są jakieś komedie?
*system:* Obecnie w repertuarze w podanej kategorii znajdują się: Pies oraz To nie wypanda.