diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..93d2055
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,213 @@
+### 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
+
diff --git a/cheddar.py b/cheddar.py
deleted file mode 100644
index a4b332c..0000000
--- a/cheddar.py
+++ /dev/null
@@ -1,123 +0,0 @@
-from nltk.chat.util import Chat
-
-# "cheddar" chatbot
-
-reflections = {
- "jestem": "jestes",
- "bylem": "byles",
- "bylam": "bylas",
- "ja": "ty",
- "chcialbym": "chcialbys",
- "chcialabym": "chcialabys",
- "mam": "masz",
- "bede": "bedziesz",
- "moj": "twoj",
- "twoja": "moja",
- "moim": "twoim",
- "mojego": "twojego",
- "jestes": "jestem",
- "byles": "bylem",
- "masz": "mam",
- "bedziesz": "bede",
- "twoj": "moj",
- "twoim": "moim",
- "twojego": "mojego",
- "ty": "ja",
- "nasz": "wasz",
- "moge": "mozesz"
-}
-
-pairs = (
- (
- r"Potrzebuje (.*)",
- (
- "Dlaczego potrzebujesz %1?",
- "Czy naprawdę pomogloby Ci zdobycie %1?",
- "Czy jestes pewien, ze potrzebujesz %1?",
- ),
- ),
- (
- r"Dlaczego nie moge (.*)",
- (
- "Czy uwazasz, ze powinienes moc %1?",
- "Gdybys mogl %1, co bys zrobil?",
- "Nie wiem, dlaczego nie mozesz %1?",
- "Czy naprawde probowales?",
- ),
- ),
- (
- 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?",
- ),
- ),
- (
- r"quit", (
- "Do uslyszenia",
- "Czesc"
- ),
- ),
- (
- r"(.*)",
- (
- "Zmienmy na chwile temat, powiedz mi o swojej rodzinie",
- "%1?",
- "Dlaczego tak mowisz?",
- ),
- ),
-)
-
-cheddar = Chat(pairs, reflections)
-
-print("\nNapisz 'quit' aby zakonczyc.")
-print("-" * 70)
-
-print("Witaj. Jak sie dzisiaj czujesz?")
-cheddar.converse()
\ No newline at end of file
diff --git a/eliza.py b/eliza.py
deleted file mode 100644
index b032d50..0000000
--- a/eliza.py
+++ /dev/null
@@ -1,2 +0,0 @@
-from nltk.chat import eliza
-eliza.demo()
\ No newline at end of file
diff --git a/lab/01-rodzaje-systemow-dialogowych.ipynb b/lab/01-rodzaje-systemow-dialogowych.ipynb
new file mode 100644
index 0000000..0a30941
--- /dev/null
+++ b/lab/01-rodzaje-systemow-dialogowych.ipynb
@@ -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",
+ "
\n",
+ "
Systemy Dialogowe
\n",
+ " 1. Rodzaje system\u00f3w dialogowych [laboratoria]
\n",
+ " Marek Kubis (2021)
\n",
+ "\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 (Jurafsky and Martin, 2020):\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) (Weizenbaum, 1966).\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 (Bobrow, 1977) 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
+}
\ No newline at end of file
diff --git a/tasks/zad1/cheddar.py b/tasks/zad1/cheddar.py
new file mode 100644
index 0000000..c8c845a
--- /dev/null
+++ b/tasks/zad1/cheddar.py
@@ -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()
diff --git a/tasks/zad1/consts.py b/tasks/zad1/consts.py
new file mode 100644
index 0000000..0b37d87
--- /dev/null
+++ b/tasks/zad1/consts.py
@@ -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ę"
+ }
\ No newline at end of file