update
This commit is contained in:
parent
d5ec325b36
commit
9322052b18
426
.ipynb_checkpoints/AJN_final (1)-checkpoint.ipynb
Normal file
426
.ipynb_checkpoints/AJN_final (1)-checkpoint.ipynb
Normal file
@ -0,0 +1,426 @@
|
|||||||
|
{
|
||||||
|
"cells": [
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"id": "explicit-slovak",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"%%writefile ./grammar/hello.jsgf\n",
|
||||||
|
"#JSGF V1.0 UTF-8 pl;\n",
|
||||||
|
"\n",
|
||||||
|
"grammar hello;\n",
|
||||||
|
"\n",
|
||||||
|
"public <hello> = <words_hello>;\n",
|
||||||
|
"\n",
|
||||||
|
"<words_hello> = czesc | hej | witaj | hey | hello | dzień dobry | siema | siemanko;"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 16,
|
||||||
|
"id": "upset-brunswick",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"Writing ./grammar/bye.jsgf\n"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"%%writefile ./grammar/bye.jsgf\n",
|
||||||
|
"#JSGF V1.0 UTF-8 pl;\n",
|
||||||
|
"\n",
|
||||||
|
"grammar bye;\n",
|
||||||
|
"\n",
|
||||||
|
"public <bye> = <words_bye>;\n",
|
||||||
|
"\n",
|
||||||
|
"<words_bye> = do usłyszenia | do widzenia | do zobaczenia | na razie | bye | zegnaj | nara | musze juz isc;\n"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 26,
|
||||||
|
"id": "amateur-format",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"Overwriting ./grammar/repertuar.jsgf\n"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"%%writefile ./grammar/repertuar.jsgf\n",
|
||||||
|
"#JSGF V1.0 UTF-8 pl;\n",
|
||||||
|
"\n",
|
||||||
|
"grammar repertuar;\n",
|
||||||
|
"\n",
|
||||||
|
"public <repertuar> = <prosba> [aktualny | obecny | aktualnie | obecnie | teraz] [repertuar];\n",
|
||||||
|
"\n",
|
||||||
|
"<prosba> = prosze podac | podaj | jaki jest | co [teraz] gracie | co leci | jakie sa filmy | jakie filmy gracie;\n",
|
||||||
|
"\n",
|
||||||
|
"\n"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"id": "dressed-judge",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"%%writefile ./grammar/cancel.jsgf\n",
|
||||||
|
"#JSGF V1.0 UTF-8 pl;\n",
|
||||||
|
"\n",
|
||||||
|
"grammar cancel;\n",
|
||||||
|
"\n",
|
||||||
|
"public <odwolaj> = <prosba> <anulacja>;\n",
|
||||||
|
"\n",
|
||||||
|
"<prosba> = chce | chcialbym | chcialabym | prosze;\n",
|
||||||
|
"\n",
|
||||||
|
"<anulacja> = odwolac | zrezygnowac | anulowac ([bilety]|[bilet]|[z biletow]|[rezerwacje]|[z rezerwacji]);"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 25,
|
||||||
|
"id": "automated-friendship",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"Overwriting ./grammar/book.jsgf\n"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"%%writefile ./grammar/book.jsgf\n",
|
||||||
|
"#JSGF V1.0 UTF-8 pl;\n",
|
||||||
|
"\n",
|
||||||
|
"grammar book;\n",
|
||||||
|
"\n",
|
||||||
|
"public <rezerwuj> = <prosba> [<ilosc_biletow>] [<tytul_filmu>] [<dzien_rezerwacji>] [<godzina_rezerwacji>];\n",
|
||||||
|
"\n",
|
||||||
|
"<prosba> = (chce | chcialbym | chcialabym | poprosze) [zarezerwowac];\n",
|
||||||
|
"\n",
|
||||||
|
"<ilosc_biletow> = <liczba> {ilosc} (bilety | biletow | bilet);\n",
|
||||||
|
"\n",
|
||||||
|
"<liczba> = jeden | dwa | trzy | cztery | piec | szesc | siedem | osiem | dziewiec | dziesiec |1|2|3|4|5|6|7|8|9|10;\n",
|
||||||
|
"\n",
|
||||||
|
"<tytul_filmu> = na [film] <tytul> {tytul};\n",
|
||||||
|
"\n",
|
||||||
|
"<tytul> = Batman | Batmana | Uncharted | Pitbull | Ambulans | Bunkier strachu | Corka | Corke | Inni ludzie | Śmierć na Nilu | Skarb Mikołajka;\n",
|
||||||
|
"\n",
|
||||||
|
"<dzien_rezerwacji> = na <dzien> {dzien};\n",
|
||||||
|
"\n",
|
||||||
|
"<dzien> = (dzisiaj | jutro | poniedziałek | wtorek | srode | czwartek | piatek | sobotę | niedziele) | <data>;\n",
|
||||||
|
"\n",
|
||||||
|
"<data> = (8|9|10|11|12|13|14|15) [czerwca]; \n",
|
||||||
|
"\n",
|
||||||
|
"<godzina_rezerwacji> = na [godzinę] <godzina_z_minutami> {godzina};\n",
|
||||||
|
"\n",
|
||||||
|
"<godzina_z_minutami> = <godzina> [<minuty>];\n",
|
||||||
|
"\n",
|
||||||
|
"<godzina> = 10|11|12|13|14|15|16|17|18|19|20|21|22|23 | dziesiata | jedenasta | dwunasta | trzynasta | czternasta | pietnasta | szesnasta | siedemnasta | osiemnasta | dziewietnasta | dwudziesta;\n",
|
||||||
|
"\n",
|
||||||
|
"<minuty> = pietnaście | trzydzieści | czterdziesci piec| 15 | 30 | 45;"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 15,
|
||||||
|
"id": "attended-portugal",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"Overwriting ./grammar/ilosc_bil.jsgf\n"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"%%writefile ./grammar/ilosc_bil.jsgf\n",
|
||||||
|
"#JSGF V1.0 UTF-8 pl;\n",
|
||||||
|
"\n",
|
||||||
|
"grammar ilosc_bil;\n",
|
||||||
|
"\n",
|
||||||
|
"public <ilosc_bil> = [<prosba>] [<ilosc_biletow>];\n",
|
||||||
|
"\n",
|
||||||
|
"<prosba> = (chce | chcialbym | chcialabym | poprosze) [zarezerwowac];\n",
|
||||||
|
"\n",
|
||||||
|
"<ilosc_biletow> = <liczba> {ilosc} [(bilety | biletow | bilet)];\n",
|
||||||
|
"\n",
|
||||||
|
"<liczba> = jeden | dwa | trzy | cztery | piec | szesc | siedem | osiem | dziewiec | dziesiec |1|2|3|4|5|6|7|8|9|10;\n"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 24,
|
||||||
|
"id": "floating-lender",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"Overwriting ./grammar/tyt_filmu.jsgf\n"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"%%writefile ./grammar/tyt_filmu.jsgf\n",
|
||||||
|
"#JSGF V1.0 UTF-8 pl;\n",
|
||||||
|
"\n",
|
||||||
|
"grammar tyt_filmu;\n",
|
||||||
|
"\n",
|
||||||
|
"public <tyt_filmu> = [<prosba>] [<tytul_filmu>];\n",
|
||||||
|
"\n",
|
||||||
|
"<prosba> = (chce | chcialbym | chcialabym | poprosze) [zarezerwowac];\n",
|
||||||
|
"\n",
|
||||||
|
"<tytul_filmu> = [na] [film] <tytul> {tytul};\n",
|
||||||
|
"\n",
|
||||||
|
"<tytul> = Batman | Batmana | Uncharted | Pitbull | Ambulans | Bunkier strachu | Corka | Corke | Inni ludzie | Śmierć na Nilu | Skarb Mikołajka;"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 1,
|
||||||
|
"id": "indirect-edward",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"Overwriting ./grammar/dni.jsgf\n"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"%%writefile ./grammar/dni.jsgf\n",
|
||||||
|
"#JSGF V1.0 UTF-8 pl;\n",
|
||||||
|
"\n",
|
||||||
|
"grammar dni;\n",
|
||||||
|
"\n",
|
||||||
|
"public <dni> = [<prosba>] [<dzien_rezerwacji>];\n",
|
||||||
|
"\n",
|
||||||
|
"<prosba> = (chce | chcialbym | chcialabym | poprosze) [zarezerwowac];\n",
|
||||||
|
"\n",
|
||||||
|
"<dzien_rezerwacji> = na <dzien> {dzien};\n",
|
||||||
|
"\n",
|
||||||
|
"<dzien> = (dzisiaj | jutro | poniedziałek | wtorek | srode | czwartek | piatek | sobotę | niedziele) | <data>;\n",
|
||||||
|
"\n",
|
||||||
|
"<data> = (15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30) [czerwca]; \n"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 18,
|
||||||
|
"id": "continental-syria",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"Overwriting ./grammar/godziny.jsgf\n"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"%%writefile ./grammar/godziny.jsgf\n",
|
||||||
|
"#JSGF V1.0 UTF-8 pl;\n",
|
||||||
|
"\n",
|
||||||
|
"grammar godziny;\n",
|
||||||
|
"\n",
|
||||||
|
"public <godziny> = [<prosba>] <godzina_rezerwacji>;\n",
|
||||||
|
"\n",
|
||||||
|
"<prosba> = (chce | chcialbym | chcialabym | poprosze) [zarezerwowac];\n",
|
||||||
|
"\n",
|
||||||
|
"<godzina_rezerwacji> = na [godzine] <godzina_z_minutami> {godzina};\n",
|
||||||
|
"\n",
|
||||||
|
"<godzina_z_minutami> = <godzina> [<minuty>];\n",
|
||||||
|
"\n",
|
||||||
|
"<godzina> = 10|11|12|13|14|15|16|17|18|19|20|21|22|23 | dziesiata | jedenasta | dwunasta | trzynasta | czternasta | pietnasta | szesnasta | siedemnasta | osiemnasta | dziewietnasta | dwudziesta;\n",
|
||||||
|
"\n",
|
||||||
|
"<minuty> = pietnaście | trzydzieści | czterdziesci piec| 15 | 30 | 45;"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 7,
|
||||||
|
"id": "everyday-sullivan",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"Overwriting ./grammar/miejsca.jsgf\n"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"%%writefile ./grammar/miejsca.jsgf\n",
|
||||||
|
"#JSGF V1.0 UTF-8 pl;\n",
|
||||||
|
"\n",
|
||||||
|
"grammar miejsca;\n",
|
||||||
|
"\n",
|
||||||
|
"public <miejsca> = [z | na | w] <miejsce> {miejsce};\n",
|
||||||
|
"\n",
|
||||||
|
"<miejsce> = dole | gorze | srodku | tylu | blizej | przodu;\n"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 12,
|
||||||
|
"id": "unexpected-vietnamese",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"Overwriting ./grammar/nr_tel.jsgf\n"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"%%writefile ./grammar/nr_tel.jsgf\n",
|
||||||
|
"#JSGF V1.0 UTF-8 pl;\n",
|
||||||
|
"\n",
|
||||||
|
"grammar numer;\n",
|
||||||
|
"\n",
|
||||||
|
"public <numer> = <nr> {numer};\n",
|
||||||
|
"\n",
|
||||||
|
"<nr> = <cyfra>+;\n",
|
||||||
|
"\n",
|
||||||
|
"<cyfra> = 0|1|2|3|4|5|6|7|8|9\n"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 15,
|
||||||
|
"id": "annual-bridge",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"Overwriting ./grammar/bye.jsgf\n"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"id": "warming-pharmaceutical",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"id": "upset-inclusion",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"!jupyter nbconvert --to script MST.ipynb"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"id": "absolute-banana",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"!jupyter nbconvert --to script AJN_final.ipynb"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"id": "static-science",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"id": "loose-championship",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"id": "emerging-conviction",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"id": "polished-identification",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"id": "unexpected-quarter",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"id": "minus-archive",
|
||||||
|
"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.9.7"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nbformat": 4,
|
||||||
|
"nbformat_minor": 5
|
||||||
|
}
|
@ -3,7 +3,7 @@
|
|||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": null,
|
"execution_count": null,
|
||||||
"id": "completed-luxury",
|
"id": "explicit-slovak",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
@ -17,10 +17,35 @@
|
|||||||
"<words_hello> = czesc | hej | witaj | hey | hello | dzień dobry | siema | siemanko;"
|
"<words_hello> = czesc | hej | witaj | hey | hello | dzień dobry | siema | siemanko;"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 16,
|
||||||
|
"id": "upset-brunswick",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"Writing ./grammar/bye.jsgf\n"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": [
|
||||||
|
"%%writefile ./grammar/bye.jsgf\n",
|
||||||
|
"#JSGF V1.0 UTF-8 pl;\n",
|
||||||
|
"\n",
|
||||||
|
"grammar bye;\n",
|
||||||
|
"\n",
|
||||||
|
"public <bye> = <words_bye>;\n",
|
||||||
|
"\n",
|
||||||
|
"<words_bye> = do usłyszenia | do widzenia | do zobaczenia | na razie | bye | zegnaj | nara | musze juz isc;\n"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 26,
|
"execution_count": 26,
|
||||||
"id": "stable-teacher",
|
"id": "amateur-format",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
{
|
{
|
||||||
@ -47,7 +72,7 @@
|
|||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": null,
|
"execution_count": null,
|
||||||
"id": "broken-typing",
|
"id": "dressed-judge",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
@ -66,7 +91,7 @@
|
|||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 25,
|
"execution_count": 25,
|
||||||
"id": "moving-dictionary",
|
"id": "automated-friendship",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
{
|
{
|
||||||
@ -113,7 +138,7 @@
|
|||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 15,
|
"execution_count": 15,
|
||||||
"id": "democratic-vietnamese",
|
"id": "attended-portugal",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
{
|
{
|
||||||
@ -142,7 +167,7 @@
|
|||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 24,
|
"execution_count": 24,
|
||||||
"id": "valid-provincial",
|
"id": "floating-lender",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
{
|
{
|
||||||
@ -170,8 +195,8 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 23,
|
"execution_count": 1,
|
||||||
"id": "declared-vessel",
|
"id": "indirect-edward",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
{
|
{
|
||||||
@ -196,13 +221,13 @@
|
|||||||
"\n",
|
"\n",
|
||||||
"<dzien> = (dzisiaj | jutro | poniedziałek | wtorek | srode | czwartek | piatek | sobotę | niedziele) | <data>;\n",
|
"<dzien> = (dzisiaj | jutro | poniedziałek | wtorek | srode | czwartek | piatek | sobotę | niedziele) | <data>;\n",
|
||||||
"\n",
|
"\n",
|
||||||
"<data> = (8|9|10|11|12|13|14|15) [czerwca]; \n"
|
"<data> = (15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30) [czerwca]; \n"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 21,
|
"execution_count": 18,
|
||||||
"id": "animated-guarantee",
|
"id": "continental-syria",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
{
|
{
|
||||||
@ -219,11 +244,11 @@
|
|||||||
"\n",
|
"\n",
|
||||||
"grammar godziny;\n",
|
"grammar godziny;\n",
|
||||||
"\n",
|
"\n",
|
||||||
"public <godziny> = [<prosba>] [<godzina_rezerwacji>];\n",
|
"public <godziny> = [<prosba>] <godzina_rezerwacji>;\n",
|
||||||
"\n",
|
"\n",
|
||||||
"<prosba> = (chce | chcialbym | chcialabym | poprosze) [zarezerwowac];\n",
|
"<prosba> = (chce | chcialbym | chcialabym | poprosze) [zarezerwowac];\n",
|
||||||
"\n",
|
"\n",
|
||||||
"<godzina_rezerwacji> = na [godzinę] <godzina_z_minutami> {godzina};\n",
|
"<godzina_rezerwacji> = na [godzine] <godzina_z_minutami> {godzina};\n",
|
||||||
"\n",
|
"\n",
|
||||||
"<godzina_z_minutami> = <godzina> [<minuty>];\n",
|
"<godzina_z_minutami> = <godzina> [<minuty>];\n",
|
||||||
"\n",
|
"\n",
|
||||||
@ -235,7 +260,7 @@
|
|||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 7,
|
"execution_count": 7,
|
||||||
"id": "registered-product",
|
"id": "everyday-sullivan",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
{
|
{
|
||||||
@ -259,8 +284,8 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 8,
|
"execution_count": 12,
|
||||||
"id": "neutral-thumbnail",
|
"id": "unexpected-vietnamese",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
{
|
{
|
||||||
@ -279,130 +304,39 @@
|
|||||||
"\n",
|
"\n",
|
||||||
"public <numer> = <nr> {numer};\n",
|
"public <numer> = <nr> {numer};\n",
|
||||||
"\n",
|
"\n",
|
||||||
"<nr> = 123456789 | 123123123 | 123456123;\n"
|
"<nr> = <cyfra>+;\n",
|
||||||
|
"\n",
|
||||||
|
"<cyfra> = 0|1|2|3|4|5|6|7|8|9\n"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": 15,
|
||||||
|
"id": "annual-bridge",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"Overwriting ./grammar/bye.jsgf\n"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"source": []
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": null,
|
"execution_count": null,
|
||||||
"id": "confirmed-quantum",
|
"id": "warming-pharmaceutical",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": []
|
"source": []
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": 9,
|
|
||||||
"id": "looking-alias",
|
|
||||||
"metadata": {},
|
|
||||||
"outputs": [],
|
|
||||||
"source": [
|
|
||||||
"import jsgf\n",
|
|
||||||
"from os import listdir\n",
|
|
||||||
"from os.path import isfile, join\n",
|
|
||||||
"\n",
|
|
||||||
"mypath = \"./grammar/\"\n",
|
|
||||||
"onlyfiles = [f for f in listdir(mypath) if isfile(join(mypath, f))]\n",
|
|
||||||
"\n",
|
|
||||||
"grammars = []\n",
|
|
||||||
"\n",
|
|
||||||
"for grammarFile in onlyfiles:\n",
|
|
||||||
" grammar = jsgf.parse_grammar_file(mypath + grammarFile)\n",
|
|
||||||
" grammars.append(grammar)\n",
|
|
||||||
" \n",
|
|
||||||
"\n",
|
|
||||||
"def get_dialog_act(rule):\n",
|
|
||||||
" slots = []\n",
|
|
||||||
" get_slots(rule.expansion, slots)\n",
|
|
||||||
" return {'act': rule.grammar.name, 'slots': slots}\n",
|
|
||||||
"\n",
|
|
||||||
"def get_slots(expansion, slots):\n",
|
|
||||||
" if expansion.tag != '':\n",
|
|
||||||
" slots.append((expansion.tag, expansion.current_match))\n",
|
|
||||||
" return\n",
|
|
||||||
"\n",
|
|
||||||
" for child in expansion.children:\n",
|
|
||||||
" get_slots(child, slots)\n",
|
|
||||||
"\n",
|
|
||||||
" if not expansion.children and isinstance(expansion, jsgf.NamedRuleRef):\n",
|
|
||||||
" get_slots(expansion.referenced_rule.expansion, slots)\n",
|
|
||||||
"\n",
|
|
||||||
"def nlu(utterance):\n",
|
|
||||||
" matched = None\n",
|
|
||||||
" for grammar in grammars:\n",
|
|
||||||
" matched = grammar.find_matching_rules(utterance)\n",
|
|
||||||
" if matched:\n",
|
|
||||||
" break\n",
|
|
||||||
"\n",
|
|
||||||
" if matched:\n",
|
|
||||||
" return get_dialog_act(matched[0])\n",
|
|
||||||
" else:\n",
|
|
||||||
" return {'act': 'null', 'slots': []}\n",
|
|
||||||
"\n",
|
|
||||||
" \n",
|
|
||||||
"def ajn(text):\n",
|
|
||||||
" frame = nlu(text)\n",
|
|
||||||
" return frame\n"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": 4,
|
|
||||||
"id": "statutory-falls",
|
|
||||||
"metadata": {},
|
|
||||||
"outputs": [],
|
|
||||||
"source": [
|
|
||||||
"ajn = Ajn()"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": 5,
|
|
||||||
"id": "through-function",
|
|
||||||
"metadata": {},
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"data": {
|
|
||||||
"text/plain": [
|
|
||||||
"<bound method Ajn.nlu of <__main__.Ajn object at 0x7f2ffa712630>>"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"execution_count": 5,
|
|
||||||
"metadata": {},
|
|
||||||
"output_type": "execute_result"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"source": [
|
|
||||||
"ajn.nlu"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": 7,
|
|
||||||
"id": "fantastic-yemen",
|
|
||||||
"metadata": {},
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"ename": "TypeError",
|
|
||||||
"evalue": "nlu() takes 1 positional argument but 2 were given",
|
|
||||||
"output_type": "error",
|
|
||||||
"traceback": [
|
|
||||||
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
|
|
||||||
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
|
|
||||||
"\u001b[0;32m<ipython-input-7-8ae578ffe68d>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0majn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnlu\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Chcialabym zarezerwowac 10 biletow na film corke na 16 45'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mresult\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
|
|
||||||
"\u001b[0;31mTypeError\u001b[0m: nlu() takes 1 positional argument but 2 were given"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"source": [
|
|
||||||
"result = ajn.nlu('Chcialabym zarezerwowac 10 biletow na film corke na 16 45')\n",
|
|
||||||
"result"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": null,
|
"execution_count": null,
|
||||||
"id": "chemical-athens",
|
"id": "upset-inclusion",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
@ -412,7 +346,7 @@
|
|||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": null,
|
"execution_count": null,
|
||||||
"id": "quantitative-proposition",
|
"id": "absolute-banana",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": [
|
"source": [
|
||||||
@ -422,235 +356,7 @@
|
|||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": null,
|
"execution_count": null,
|
||||||
"id": "based-action",
|
"id": "static-science",
|
||||||
"metadata": {},
|
|
||||||
"outputs": [],
|
|
||||||
"source": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": 1,
|
|
||||||
"id": "cosmetic-beijing",
|
|
||||||
"metadata": {},
|
|
||||||
"outputs": [],
|
|
||||||
"source": [
|
|
||||||
"import jsgf\n",
|
|
||||||
"from os import listdir\n",
|
|
||||||
"from os.path import isfile, join\n",
|
|
||||||
"\n",
|
|
||||||
"mypath = \"./grammar/\"\n",
|
|
||||||
"onlyfiles = [f for f in listdir(mypath) if isfile(join(mypath, f))]\n",
|
|
||||||
"\n",
|
|
||||||
"grammars = []\n",
|
|
||||||
"\n",
|
|
||||||
"for grammarFile in onlyfiles:\n",
|
|
||||||
" grammar = jsgf.parse_grammar_file(mypath + grammarFile)\n",
|
|
||||||
" grammars.append(grammar)\n",
|
|
||||||
"\n",
|
|
||||||
" \n",
|
|
||||||
" \n",
|
|
||||||
"def get_dialog_act(rule):\n",
|
|
||||||
" slots = []\n",
|
|
||||||
" get_slots(rule.expansion, slots)\n",
|
|
||||||
" return {'act': rule.grammar.name, 'slots': slots}\n",
|
|
||||||
"\n",
|
|
||||||
"def get_slots(expansion, slots):\n",
|
|
||||||
" if expansion.tag != '':\n",
|
|
||||||
" slots.append((expansion.tag, expansion.current_match))\n",
|
|
||||||
" return\n",
|
|
||||||
"\n",
|
|
||||||
" for child in expansion.children:\n",
|
|
||||||
" get_slots(child, slots)\n",
|
|
||||||
"\n",
|
|
||||||
" if not expansion.children and isinstance(expansion, jsgf.NamedRuleRef):\n",
|
|
||||||
" get_slots(expansion.referenced_rule.expansion, slots)\n",
|
|
||||||
"\n",
|
|
||||||
"def nlu(utterance):\n",
|
|
||||||
" matched = None\n",
|
|
||||||
" for grammar in grammars:\n",
|
|
||||||
" matched = grammar.find_matching_rules(utterance)\n",
|
|
||||||
" if matched:\n",
|
|
||||||
" break\n",
|
|
||||||
"\n",
|
|
||||||
" if matched:\n",
|
|
||||||
" return get_dialog_act(matched[0])\n",
|
|
||||||
" else:\n",
|
|
||||||
" return {'act': 'null', 'slots': []}\n",
|
|
||||||
" \n",
|
|
||||||
"res = nlu('chcialbym zarezerwowac 2 bilety na corke na 16')"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": null,
|
|
||||||
"id": "detected-crowd",
|
|
||||||
"metadata": {},
|
|
||||||
"outputs": [],
|
|
||||||
"source": [
|
|
||||||
"ajn = Ajn()"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": 2,
|
|
||||||
"id": "technological-applicant",
|
|
||||||
"metadata": {},
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"data": {
|
|
||||||
"text/plain": [
|
|
||||||
"{'act': 'book',\n",
|
|
||||||
" 'slots': [('ilosc', '2'),\n",
|
|
||||||
" ('tytul', 'Corke'),\n",
|
|
||||||
" ('dzien', None),\n",
|
|
||||||
" ('godzina', '16')]}"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"execution_count": 2,
|
|
||||||
"metadata": {},
|
|
||||||
"output_type": "execute_result"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"source": [
|
|
||||||
"res"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": null,
|
|
||||||
"id": "acknowledged-measurement",
|
|
||||||
"metadata": {},
|
|
||||||
"outputs": [],
|
|
||||||
"source": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": 3,
|
|
||||||
"id": "living-reservoir",
|
|
||||||
"metadata": {},
|
|
||||||
"outputs": [],
|
|
||||||
"source": [
|
|
||||||
"\n",
|
|
||||||
"class Dst:\n",
|
|
||||||
" \n",
|
|
||||||
" def __init__(self):\n",
|
|
||||||
" self.messages = []\n",
|
|
||||||
" self.checklist = {\n",
|
|
||||||
" \"ilosc\": None,\n",
|
|
||||||
" \"tytul\": None,\n",
|
|
||||||
" \"dzien\": None,\n",
|
|
||||||
" \"godzina\": None\n",
|
|
||||||
" }\n",
|
|
||||||
" self.history = []\n",
|
|
||||||
" \n",
|
|
||||||
" def store(self, message):\n",
|
|
||||||
" self.messages.append(message)\n",
|
|
||||||
"\n",
|
|
||||||
" def get_messages(self):\n",
|
|
||||||
" return self.messages\n",
|
|
||||||
"\n",
|
|
||||||
" def get_next_question(self):\n",
|
|
||||||
" for key, value in self.checklist.items():\n",
|
|
||||||
" if value == None:\n",
|
|
||||||
" return key\n",
|
|
||||||
"\n",
|
|
||||||
" def save_answer(self, slots):\n",
|
|
||||||
" for slot in slots:\n",
|
|
||||||
" self.checklist[slot[0]] = slot[1]\n",
|
|
||||||
"\n",
|
|
||||||
" self.messages.append(slots)\n",
|
|
||||||
" \n",
|
|
||||||
" def update(self, user_act=None):\n",
|
|
||||||
" for intent, domain, slot, value in user_act:\n",
|
|
||||||
" domain = domain.lower()\n",
|
|
||||||
" intent = intent.lower()\n",
|
|
||||||
" slot = slot.lower()\n",
|
|
||||||
" print(domain,intent,slot)"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": 4,
|
|
||||||
"id": "organizational-overhead",
|
|
||||||
"metadata": {},
|
|
||||||
"outputs": [],
|
|
||||||
"source": [
|
|
||||||
"dst = Dst()"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": 5,
|
|
||||||
"id": "flying-preliminary",
|
|
||||||
"metadata": {},
|
|
||||||
"outputs": [],
|
|
||||||
"source": [
|
|
||||||
"dst.save_answer(res['slots'])"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": 6,
|
|
||||||
"id": "effective-arbitration",
|
|
||||||
"metadata": {},
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"data": {
|
|
||||||
"text/plain": [
|
|
||||||
"[('ilosc', '2'), ('tytul', 'Corke'), ('dzien', None), ('godzina', '16')]"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"execution_count": 6,
|
|
||||||
"metadata": {},
|
|
||||||
"output_type": "execute_result"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"source": [
|
|
||||||
"res['slots']"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": 7,
|
|
||||||
"id": "warming-oracle",
|
|
||||||
"metadata": {},
|
|
||||||
"outputs": [],
|
|
||||||
"source": [
|
|
||||||
"next_question = dst.get_next_question()"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": 8,
|
|
||||||
"id": "immune-conducting",
|
|
||||||
"metadata": {},
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "stdout",
|
|
||||||
"output_type": "stream",
|
|
||||||
"text": [
|
|
||||||
"{'ilosc': '2', 'tytul': 'Corke', 'dzien': None, 'godzina': '16'}\n"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"source": [
|
|
||||||
"print(dst.checklist)"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": null,
|
|
||||||
"id": "therapeutic-ending",
|
|
||||||
"metadata": {},
|
|
||||||
"outputs": [],
|
|
||||||
"source": [
|
|
||||||
"user_act"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": null,
|
|
||||||
"id": "clinical-removal",
|
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": []
|
"source": []
|
||||||
@ -658,31 +364,7 @@
|
|||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": null,
|
"execution_count": null,
|
||||||
"id": "elder-complexity",
|
"id": "loose-championship",
|
||||||
"metadata": {},
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "stdout",
|
|
||||||
"output_type": "stream",
|
|
||||||
"text": [
|
|
||||||
"dzien\n"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"source": [
|
|
||||||
"next_question = dst.get_next_question()\n",
|
|
||||||
"while (next_question):\n",
|
|
||||||
" print(next_question)\n",
|
|
||||||
" response = input()\n",
|
|
||||||
" res = nlu(response)\n",
|
|
||||||
" dst.save_answer(res['slots'])\n",
|
|
||||||
" next_question = dst.get_next_question()"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"cell_type": "code",
|
|
||||||
"execution_count": null,
|
|
||||||
"id": "leading-gospel",
|
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": []
|
"source": []
|
||||||
@ -690,7 +372,7 @@
|
|||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": null,
|
"execution_count": null,
|
||||||
"id": "cleared-malpractice",
|
"id": "emerging-conviction",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": []
|
"source": []
|
||||||
@ -698,7 +380,7 @@
|
|||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": null,
|
"execution_count": null,
|
||||||
"id": "single-browser",
|
"id": "polished-identification",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": []
|
"source": []
|
||||||
@ -706,7 +388,15 @@
|
|||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": null,
|
"execution_count": null,
|
||||||
"id": "sunrise-zoning",
|
"id": "unexpected-quarter",
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"id": "minus-archive",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": []
|
"source": []
|
||||||
@ -714,7 +404,7 @@
|
|||||||
],
|
],
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"kernelspec": {
|
"kernelspec": {
|
||||||
"display_name": "Python 3",
|
"display_name": "Python 3 (ipykernel)",
|
||||||
"language": "python",
|
"language": "python",
|
||||||
"name": "python3"
|
"name": "python3"
|
||||||
},
|
},
|
||||||
@ -728,7 +418,7 @@
|
|||||||
"name": "python",
|
"name": "python",
|
||||||
"nbconvert_exporter": "python",
|
"nbconvert_exporter": "python",
|
||||||
"pygments_lexer": "ipython3",
|
"pygments_lexer": "ipython3",
|
||||||
"version": "3.7.3"
|
"version": "3.9.7"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nbformat": 4,
|
"nbformat": 4,
|
||||||
|
140
chatbot.ipynb
140
chatbot.ipynb
@ -2,101 +2,143 @@
|
|||||||
"cells": [
|
"cells": [
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 2,
|
"execution_count": 1,
|
||||||
"id": "encouraging-december",
|
"id": "surgical-trainer",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
{
|
|
||||||
"name": "stdin",
|
|
||||||
"output_type": "stream",
|
|
||||||
"text": [
|
|
||||||
">>> chce 2 bilety\n"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "stdout",
|
"name": "stdout",
|
||||||
"output_type": "stream",
|
"output_type": "stream",
|
||||||
"text": [
|
"text": [
|
||||||
"tytul\n",
|
"Jeśli chcesz zresetować rozmowę wpisz \"reset\"\n"
|
||||||
"{'ilosc': '2', 'tytul': None, 'dzien': None, 'godzina': None}\n",
|
|
||||||
"Na jaki film ma zostać dokonana rezerwacja?\n"
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "stdin",
|
"name": "stdin",
|
||||||
"output_type": "stream",
|
"output_type": "stream",
|
||||||
"text": [
|
"text": [
|
||||||
">>> chce na film batman\n"
|
">>> chce 2 bilety na batmana na jutro\n"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "stdout",
|
"name": "stdout",
|
||||||
"output_type": "stream",
|
"output_type": "stream",
|
||||||
"text": [
|
"text": [
|
||||||
"ilosc\n",
|
"godzina\n",
|
||||||
"{'ilosc': None, 'tytul': 'Batman', 'dzien': None, 'godzina': None}\n",
|
"{'ilosc': '2', 'tytul': 'Batmana', 'dzien': 'jutro', 'godzina': None, 'miejsce': None, 'numer': None}\n",
|
||||||
"Ile biletów ma zostać zarezerwowanych?\n"
|
"[('ilosc', '2'), ('tytul', 'Batmana'), ('dzien', 'jutro'), ('godzina', None)]\n",
|
||||||
|
"book\n",
|
||||||
|
"Na którą godzinę ma być dokonana rezerwacja?\n"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "stdin",
|
"name": "stdin",
|
||||||
"output_type": "stream",
|
"output_type": "stream",
|
||||||
"text": [
|
"text": [
|
||||||
">>> chce 2 bilety\n"
|
">>> na 17\n"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "stdout",
|
"name": "stdout",
|
||||||
"output_type": "stream",
|
"output_type": "stream",
|
||||||
"text": [
|
"text": [
|
||||||
"tytul\n",
|
"godzina\n",
|
||||||
"{'ilosc': '2', 'tytul': None, 'dzien': None, 'godzina': None}\n",
|
"{'ilosc': '2', 'tytul': 'Batmana', 'dzien': '17', 'godzina': None, 'miejsce': None, 'numer': None}\n",
|
||||||
"Na jaki film ma zostać dokonana rezerwacja?\n"
|
"[('dzien', '17')]\n",
|
||||||
|
"dni\n",
|
||||||
|
"Na którą godzinę ma być dokonana rezerwacja?\n"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "stdin",
|
"name": "stdin",
|
||||||
"output_type": "stream",
|
"output_type": "stream",
|
||||||
"text": [
|
"text": [
|
||||||
">>> chce 2 bilety na film batman\n"
|
">>> na godzine 17\n"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "stdout",
|
"name": "stdout",
|
||||||
"output_type": "stream",
|
"output_type": "stream",
|
||||||
"text": [
|
"text": [
|
||||||
"dzien\n",
|
"miejsce\n",
|
||||||
"{'ilosc': '2', 'tytul': 'Batman', 'dzien': None, 'godzina': None}\n",
|
"{'ilosc': '2', 'tytul': 'Batmana', 'dzien': '17', 'godzina': '17', 'miejsce': None, 'numer': None}\n",
|
||||||
"Na który dzień ma być dokonana rezerwacja?\n"
|
"[('godzina', '17')]\n",
|
||||||
|
"godziny\n",
|
||||||
|
"Czy miejsca mają być z przodu, z tyłu czy na środku?\n"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "stdin",
|
"name": "stdin",
|
||||||
"output_type": "stream",
|
"output_type": "stream",
|
||||||
"text": [
|
"text": [
|
||||||
">>> chce na jutro\n"
|
">>> na środku\n"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "stdout",
|
"name": "stdout",
|
||||||
"output_type": "stream",
|
"output_type": "stream",
|
||||||
"text": [
|
"text": [
|
||||||
"ilosc\n",
|
"numer\n",
|
||||||
"{'ilosc': None, 'tytul': None, 'dzien': 'jutro', 'godzina': None}\n",
|
"{'ilosc': '2', 'tytul': 'Batmana', 'dzien': '17', 'godzina': '17', 'miejsce': 'srodku', 'numer': None}\n",
|
||||||
"Ile biletów ma zostać zarezerwowanych?\n"
|
"[('miejsce', 'srodku')]\n",
|
||||||
|
"miejsca\n",
|
||||||
|
"Na jaki numer telefonu ma zostać dokonana rezerwacja?\n"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ename": "KeyboardInterrupt",
|
"name": "stdin",
|
||||||
"evalue": "Interrupted by user",
|
"output_type": "stream",
|
||||||
"output_type": "error",
|
"text": [
|
||||||
"traceback": [
|
">>> 1\n"
|
||||||
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
|
]
|
||||||
"\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
|
},
|
||||||
"\u001b[0;32m<ipython-input-2-0b584a7b5a30>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 14\u001b[0;31m \u001b[0mtext\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0minput\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'>>>'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 15\u001b[0m \u001b[0mframe\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0majn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtext\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 16\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
|
{
|
||||||
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/ipykernel/kernelbase.py\u001b[0m in \u001b[0;36mraw_input\u001b[0;34m(self, prompt)\u001b[0m\n\u001b[1;32m 849\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_parent_ident\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 850\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_parent_header\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 851\u001b[0;31m \u001b[0mpassword\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 852\u001b[0m )\n\u001b[1;32m 853\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
|
"name": "stdout",
|
||||||
"\u001b[0;32m/usr/local/lib/python3.7/dist-packages/ipykernel/kernelbase.py\u001b[0m in \u001b[0;36m_input_request\u001b[0;34m(self, prompt, ident, parent, password)\u001b[0m\n\u001b[1;32m 890\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mKeyboardInterrupt\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 891\u001b[0m \u001b[0;31m# re-raise KeyboardInterrupt, to truncate traceback\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 892\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mKeyboardInterrupt\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Interrupted by user\"\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 893\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mException\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 894\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlog\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwarning\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Invalid Message:\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mexc_info\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
|
"output_type": "stream",
|
||||||
"\u001b[0;31mKeyboardInterrupt\u001b[0m: Interrupted by user"
|
"text": [
|
||||||
|
"numer\n",
|
||||||
|
"{'ilosc': '2', 'tytul': 'Batmana', 'dzien': '17', 'godzina': '17', 'miejsce': 'srodku', 'numer': None}\n",
|
||||||
|
"[('numer', '1')]\n",
|
||||||
|
"numer\n",
|
||||||
|
"Proszę podać poprawny numer telefonu.\n",
|
||||||
|
"Na jaki numer telefonu ma zostać dokonana rezerwacja?\n"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stdin",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
">>> 1212\n"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"numer\n",
|
||||||
|
"{'ilosc': '2', 'tytul': 'Batmana', 'dzien': '17', 'godzina': '17', 'miejsce': 'srodku', 'numer': None}\n",
|
||||||
|
"[('numer', '1 2 1 2')]\n",
|
||||||
|
"numer\n",
|
||||||
|
"Proszę podać poprawny numer telefonu.\n",
|
||||||
|
"Na jaki numer telefonu ma zostać dokonana rezerwacja?\n"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stdin",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
">>> 123123123\n"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stdout",
|
||||||
|
"output_type": "stream",
|
||||||
|
"text": [
|
||||||
|
"None\n",
|
||||||
|
"{'ilosc': '2', 'tytul': 'Batmana', 'dzien': '17', 'godzina': '17', 'miejsce': 'srodku', 'numer': '123123123'}\n",
|
||||||
|
"[('numer', '1 2 3 1 2 3 1 2 3')]\n",
|
||||||
|
"numer\n",
|
||||||
|
"Rezerwacja została dokonana. Potwierdzenie rezerwacji zostanie niebawem przesłane wiadomością SMS. Proszę o przybycie 15 minut przed rozpoczęciem seansu w celu zakupu biletu, w innym przypadku rezerwacja przepada.\n"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@ -111,19 +153,31 @@
|
|||||||
" \n",
|
" \n",
|
||||||
" dst = Dst()\n",
|
" dst = Dst()\n",
|
||||||
" next_question = dst.get_next_question()\n",
|
" next_question = dst.get_next_question()\n",
|
||||||
|
" print('Jeśli chcesz zresetować rozmowę wpisz \\\"reset\\\"')\n",
|
||||||
|
" \n",
|
||||||
" while (next_question):\n",
|
" while (next_question):\n",
|
||||||
" \n",
|
" \n",
|
||||||
" \n",
|
" \n",
|
||||||
" text = input('>>>')\n",
|
" text = input('>>>')\n",
|
||||||
|
" \n",
|
||||||
|
" \n",
|
||||||
" frame = ajn(text)\n",
|
" frame = ajn(text)\n",
|
||||||
" \n",
|
" \n",
|
||||||
|
" dst.reset_if_needed(text)\n",
|
||||||
|
" \n",
|
||||||
|
" \n",
|
||||||
|
" \n",
|
||||||
" dst.save_answer(frame['slots'])\n",
|
" dst.save_answer(frame['slots'])\n",
|
||||||
" \n",
|
" \n",
|
||||||
" next_question = dst.get_next_question()\n",
|
" next_question = dst.get_next_question()\n",
|
||||||
" print(next_question)\n",
|
" print(next_question)\n",
|
||||||
" print(dst.checklist)\n",
|
" print(dst.checklist)\n",
|
||||||
"# print(frame['act'])\n",
|
" print(frame['slots'])\n",
|
||||||
" nlg(next_question)\n",
|
" print(frame['act'])\n",
|
||||||
|
" nlg(next_question,frame,text)\n",
|
||||||
|
" \n",
|
||||||
|
" if text == \"exit\" or frame['act'] == \"bye\":\n",
|
||||||
|
" break;\n",
|
||||||
"\n",
|
"\n",
|
||||||
" \n",
|
" \n",
|
||||||
" \n",
|
" \n",
|
||||||
@ -133,10 +187,12 @@
|
|||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": null,
|
"execution_count": null,
|
||||||
"id": "yellow-acquisition",
|
"id": "armed-classroom",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"source": []
|
"source": [
|
||||||
|
"chce 2 bilety na batmana na jutro na 17 15"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"metadata": {
|
"metadata": {
|
||||||
|
@ -1,437 +1,437 @@
|
|||||||
import nltk
|
import nltk
|
||||||
import random
|
import random
|
||||||
import re
|
import re
|
||||||
|
|
||||||
reflections = {
|
reflections = {
|
||||||
"ja jestem": "ty jesteś",
|
"ja jestem": "ty jesteś",
|
||||||
"ja byłem": "ty byłeś",
|
"ja byłem": "ty byłeś",
|
||||||
"ja": "ty",
|
"ja": "ty",
|
||||||
"jestem": "jesteś",
|
"jestem": "jesteś",
|
||||||
"chciałbym": "chciałbyś",
|
"chciałbym": "chciałbyś",
|
||||||
"mam": "masz",
|
"mam": "masz",
|
||||||
"będę": "będziesz",
|
"będę": "będziesz",
|
||||||
"moje": "twoje",
|
"moje": "twoje",
|
||||||
"jesteś": "jestem",
|
"jesteś": "jestem",
|
||||||
"byłeś": "byłem",
|
"byłeś": "byłem",
|
||||||
"ty byłeś": "ja byłem",
|
"ty byłeś": "ja byłem",
|
||||||
"będziesz": "będę",
|
"będziesz": "będę",
|
||||||
"nasze": "wasze",
|
"nasze": "wasze",
|
||||||
"twoje": "moje",
|
"twoje": "moje",
|
||||||
"ty" : "ja",
|
"ty" : "ja",
|
||||||
"ja": "ty",
|
"ja": "ty",
|
||||||
"my" : "wy",
|
"my" : "wy",
|
||||||
"jesteśmy": "jesteście",
|
"jesteśmy": "jesteście",
|
||||||
}
|
}
|
||||||
|
|
||||||
class Chat:
|
class Chat:
|
||||||
def __init__(self, pairs, reflections={}):
|
def __init__(self, pairs, reflections={}):
|
||||||
|
|
||||||
self._pairs = [(re.compile(x, re.IGNORECASE), y) for (x, y) in pairs]
|
self._pairs = [(re.compile(x, re.IGNORECASE), y) for (x, y) in pairs]
|
||||||
self._reflections = reflections
|
self._reflections = reflections
|
||||||
self._regex = self._compile_reflections()
|
self._regex = self._compile_reflections()
|
||||||
|
|
||||||
|
|
||||||
def _compile_reflections(self):
|
def _compile_reflections(self):
|
||||||
sorted_refl = sorted(self._reflections, key=len, reverse=True)
|
sorted_refl = sorted(self._reflections, key=len, reverse=True)
|
||||||
return re.compile(
|
return re.compile(
|
||||||
r"\b({})\b".format("|".join(map(re.escape, sorted_refl))), re.IGNORECASE
|
r"\b({})\b".format("|".join(map(re.escape, sorted_refl))), re.IGNORECASE
|
||||||
)
|
)
|
||||||
|
|
||||||
def _substitute(self, str):
|
def _substitute(self, str):
|
||||||
|
|
||||||
return self._regex.sub(
|
return self._regex.sub(
|
||||||
lambda mo: self._reflections[mo.string[mo.start() : mo.end()]], str.lower()
|
lambda mo: self._reflections[mo.string[mo.start() : mo.end()]], str.lower()
|
||||||
)
|
)
|
||||||
|
|
||||||
def _wildcards(self, response, match):
|
def _wildcards(self, response, match):
|
||||||
pos = response.find("%")
|
pos = response.find("%")
|
||||||
while pos >= 0:
|
while pos >= 0:
|
||||||
num = int(response[pos + 1 : pos + 2])
|
num = int(response[pos + 1 : pos + 2])
|
||||||
response = (
|
response = (
|
||||||
response[:pos]
|
response[:pos]
|
||||||
+ self._substitute(match.group(num))
|
+ self._substitute(match.group(num))
|
||||||
+ response[pos + 2 :]
|
+ response[pos + 2 :]
|
||||||
)
|
)
|
||||||
pos = response.find("%")
|
pos = response.find("%")
|
||||||
return response
|
return response
|
||||||
|
|
||||||
def respond(self, str):
|
def respond(self, str):
|
||||||
|
|
||||||
# check each pattern
|
# check each pattern
|
||||||
for (pattern, response) in self._pairs:
|
for (pattern, response) in self._pairs:
|
||||||
match = pattern.match(str)
|
match = pattern.match(str)
|
||||||
|
|
||||||
# did the pattern match?
|
# did the pattern match?
|
||||||
if match:
|
if match:
|
||||||
resp = random.choice(response) # pick a random response
|
resp = random.choice(response) # pick a random response
|
||||||
resp = self._wildcards(resp, match) # process wildcards
|
resp = self._wildcards(resp, match) # process wildcards
|
||||||
|
|
||||||
# fix munged punctuation at the end
|
# fix munged punctuation at the end
|
||||||
if resp[-2:] == "?.":
|
if resp[-2:] == "?.":
|
||||||
resp = resp[:-2] + "."
|
resp = resp[:-2] + "."
|
||||||
if resp[-2:] == "??":
|
if resp[-2:] == "??":
|
||||||
resp = resp[:-2] + "?"
|
resp = resp[:-2] + "?"
|
||||||
return resp
|
return resp
|
||||||
|
|
||||||
|
|
||||||
# Hold a conversation with a chatbot
|
# Hold a conversation with a chatbot
|
||||||
def converse(self, quit="Do widzenia"):
|
def converse(self, quit="Do widzenia"):
|
||||||
user_input = ""
|
user_input = ""
|
||||||
while user_input != quit:
|
while user_input != quit:
|
||||||
user_input = quit
|
user_input = quit
|
||||||
try:
|
try:
|
||||||
user_input = input(">")
|
user_input = input(">")
|
||||||
except EOFError:
|
except EOFError:
|
||||||
print(user_input)
|
print(user_input)
|
||||||
if user_input:
|
if user_input:
|
||||||
while user_input[-1] in "!.":
|
while user_input[-1] in "!.":
|
||||||
user_input = user_input[:-1]
|
user_input = user_input[:-1]
|
||||||
print(self.respond(user_input))
|
print(self.respond(user_input))
|
||||||
|
|
||||||
|
|
||||||
pairs = (
|
pairs = (
|
||||||
(
|
(
|
||||||
r"Potrzebuję (.*)",
|
r"Potrzebuję (.*)",
|
||||||
(
|
(
|
||||||
"Dlaczego potrzebujesz %1?",
|
"Dlaczego potrzebujesz %1?",
|
||||||
"Czy jesteś pewny, że potrzebujesz %1?",
|
"Czy jesteś pewny, że potrzebujesz %1?",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
r"Kto cię stworzył (.*)",
|
r"Kto cię stworzył (.*)",
|
||||||
(
|
(
|
||||||
"ELIZA została wynaleziona w 1966 roku przez Weizenbauma. Dlaczego %1?",
|
"ELIZA została wynaleziona w 1966 roku przez Weizenbauma. Dlaczego %1?",
|
||||||
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
r"Dlaczego ty (.*)",
|
r"Dlaczego ty (.*)",
|
||||||
(
|
(
|
||||||
"Czy naprawdę myślisz, że %1?",
|
"Czy naprawdę myślisz, że %1?",
|
||||||
"Być może w końcu będę %1.",
|
"Być może w końcu będę %1.",
|
||||||
"Czy naprawdę chcesz, żebym %1?",
|
"Czy naprawdę chcesz, żebym %1?",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
r"Dlaczego ja (.*)",
|
r"Dlaczego ja (.*)",
|
||||||
(
|
(
|
||||||
"Czy uważasz, że powinieneś być w stanie %1?",
|
"Czy uważasz, że powinieneś być w stanie %1?",
|
||||||
"Gdybyś mógł %1, co byś zrobił?",
|
"Gdybyś mógł %1, co byś zrobił?",
|
||||||
"Nie wiem -- dlaczego nie możesz %1?",
|
"Nie wiem -- dlaczego nie możesz %1?",
|
||||||
"Czy naprawdę próbowałeś?",
|
"Czy naprawdę próbowałeś?",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
r"Nie mogę (.*)",
|
r"Nie mogę (.*)",
|
||||||
(
|
(
|
||||||
"Skąd wiesz, że nie możesz %1?",
|
"Skąd wiesz, że nie możesz %1?",
|
||||||
"Być może mógłbyś, gdybyś spróbował.",
|
"Być może mógłbyś, gdybyś spróbował.",
|
||||||
"Co byś musiał zrobić, żeby %1?",
|
"Co byś musiał zrobić, żeby %1?",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
r"Jestem (.*)",
|
r"Jestem (.*)",
|
||||||
(
|
(
|
||||||
"Przyszedłeś do mnie, bo jesteś %1?",
|
"Przyszedłeś do mnie, bo jesteś %1?",
|
||||||
"Jak długo jesteś %1?",
|
"Jak długo jesteś %1?",
|
||||||
"Co myślisz o tym, że jesteś %1?",
|
"Co myślisz o tym, że jesteś %1?",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
r"Jestem (.*)",
|
r"Jestem (.*)",
|
||||||
(
|
(
|
||||||
"Jak się czujesz z tym, że jesteś %1?",
|
"Jak się czujesz z tym, że jesteś %1?",
|
||||||
"Czy lubisz być %1?",
|
"Czy lubisz być %1?",
|
||||||
"Dlaczego mówisz mi, że jesteś %1?",
|
"Dlaczego mówisz mi, że jesteś %1?",
|
||||||
"Dlaczego myślisz, że jesteś %1?",
|
"Dlaczego myślisz, że jesteś %1?",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
r"Czy jesteś (.*)",
|
r"Czy jesteś (.*)",
|
||||||
(
|
(
|
||||||
"Dlaczego to ma znaczenie, czy jestem %1?",
|
"Dlaczego to ma znaczenie, czy jestem %1?",
|
||||||
"Wolałbyś, gdybym nie była %1?",
|
"Wolałbyś, gdybym nie była %1?",
|
||||||
"Być może wierzysz, że jestem %1.",
|
"Być może wierzysz, że jestem %1.",
|
||||||
"Mogę być %1 - jak myślisz?",
|
"Mogę być %1 - jak myślisz?",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
r"Co (.*)",
|
r"Co (.*)",
|
||||||
(
|
(
|
||||||
"Dlaczego pytasz?",
|
"Dlaczego pytasz?",
|
||||||
"Jak pomogłaby ci odpowiedź na to?",
|
"Jak pomogłaby ci odpowiedź na to?",
|
||||||
"Co myślisz?",
|
"Co myślisz?",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
r"Jak (.*)",
|
r"Jak (.*)",
|
||||||
(
|
(
|
||||||
"Jak ty sądzisz?",
|
"Jak ty sądzisz?",
|
||||||
"Perhaps you can answer your own question.",
|
"Perhaps you can answer your own question.",
|
||||||
"What is it you're really asking?",
|
"What is it you're really asking?",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
r"Ponieważ (.*)",
|
r"Ponieważ (.*)",
|
||||||
(
|
(
|
||||||
"Czy to prawdziwy powód?",
|
"Czy to prawdziwy powód?",
|
||||||
"Jakie inne powody przychodzą Ci na myśl?”,",
|
"Jakie inne powody przychodzą Ci na myśl?”,",
|
||||||
"Czy ten powód dotyczy czegokolwiek innego?",
|
"Czy ten powód dotyczy czegokolwiek innego?",
|
||||||
"Jeśli %1, co jeszcze musi być prawdą?",
|
"Jeśli %1, co jeszcze musi być prawdą?",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
r"(.*) przepraszam (.*)",
|
r"(.*) przepraszam (.*)",
|
||||||
(
|
(
|
||||||
"Wiele razy przeprosiny nie są potrzebne.",
|
"Wiele razy przeprosiny nie są potrzebne.",
|
||||||
"Co czujesz kiedy przepraszasz?",
|
"Co czujesz kiedy przepraszasz?",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
r"Cześć(.*)",
|
r"Cześć(.*)",
|
||||||
(
|
(
|
||||||
"Cześć... cieszę się, że mogłeś dzisiaj wpaść..",
|
"Cześć... cieszę się, że mogłeś dzisiaj wpaść..",
|
||||||
"Cześć... jak się masz dzisiaj?",
|
"Cześć... jak się masz dzisiaj?",
|
||||||
"Cześć, jak się dzisiaj czujesz?",
|
"Cześć, jak się dzisiaj czujesz?",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
r"Myśle, że (.*)",
|
r"Myśle, że (.*)",
|
||||||
(
|
(
|
||||||
"Czy wątpisz w %1?",
|
"Czy wątpisz w %1?",
|
||||||
"Naprawdę tak myślisz?",
|
"Naprawdę tak myślisz?",
|
||||||
"Ale nie jesteś pewien, że %1?"
|
"Ale nie jesteś pewien, że %1?"
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
r"(.*) przyjaciel (.*)",
|
r"(.*) przyjaciel (.*)",
|
||||||
(
|
(
|
||||||
"Opowiedz mi więcej o swoich przyjaciołach.",
|
"Opowiedz mi więcej o swoich przyjaciołach.",
|
||||||
"Kiedy myślisz o przyjacielu, co przychodzi ci na myśl?",
|
"Kiedy myślisz o przyjacielu, co przychodzi ci na myśl?",
|
||||||
"Dlaczego miałbyś nie opowiedzieć o przyjacielu z dzieciństwa?",
|
"Dlaczego miałbyś nie opowiedzieć o przyjacielu z dzieciństwa?",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
r"Tak",
|
r"Tak",
|
||||||
(
|
(
|
||||||
"Wydajesz się całkiem pewien.", "OK, ale czy możesz trochę rozwinąć?"
|
"Wydajesz się całkiem pewien.", "OK, ale czy możesz trochę rozwinąć?"
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
r"(.*) komputer(.*)",
|
r"(.*) komputer(.*)",
|
||||||
(
|
(
|
||||||
"Naprawdę mówisz o mnie?",
|
"Naprawdę mówisz o mnie?",
|
||||||
"Czy rozmowa z komputerem wydaje się dziwna?",
|
"Czy rozmowa z komputerem wydaje się dziwna?",
|
||||||
"Jak się czujesz przy komputerach?",
|
"Jak się czujesz przy komputerach?",
|
||||||
"Czy czujesz się zagrożony przez komputery?",
|
"Czy czujesz się zagrożony przez komputery?",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
r"To jest (.*)",
|
r"To jest (.*)",
|
||||||
(
|
(
|
||||||
"Czy myślisz, że to %1?",
|
"Czy myślisz, że to %1?",
|
||||||
"Może to %1 -- co myślisz?",
|
"Może to %1 -- co myślisz?",
|
||||||
"Gdyby to był %1, co byś zrobił?",
|
"Gdyby to był %1, co byś zrobił?",
|
||||||
"Może być tak, że %1.",
|
"Może być tak, że %1.",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
r"Jest to (.*)",
|
r"Jest to (.*)",
|
||||||
(
|
(
|
||||||
"Wydajesz się bardzo pewny.",
|
"Wydajesz się bardzo pewny.",
|
||||||
"Gdybym ci powiedziała, że prawdopodobnie nie jest to %1, co byś poczuł?",
|
"Gdybym ci powiedziała, że prawdopodobnie nie jest to %1, co byś poczuł?",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
r"Czy możesz (.*)",
|
r"Czy możesz (.*)",
|
||||||
(
|
(
|
||||||
"Dlaczego myślisz, że nie mogę %1?",
|
"Dlaczego myślisz, że nie mogę %1?",
|
||||||
"Gdybym mógł %1, to co?",
|
"Gdybym mógł %1, to co?",
|
||||||
"Dlaczego pytasz, czy mogę %1?",
|
"Dlaczego pytasz, czy mogę %1?",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
r"Czy mogę (.*)",
|
r"Czy mogę (.*)",
|
||||||
(
|
(
|
||||||
"Być może nie chcesz %1.",
|
"Być może nie chcesz %1.",
|
||||||
"Czy chcesz mieć możliwość %1?",
|
"Czy chcesz mieć możliwość %1?",
|
||||||
"Gdybyś mógł %1, czy byś?",
|
"Gdybyś mógł %1, czy byś?",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
r"Czy mogę (.*)",
|
r"Czy mogę (.*)",
|
||||||
(
|
(
|
||||||
"Być może nie chcesz %1.",
|
"Być może nie chcesz %1.",
|
||||||
"Czy chcesz mieć możliwość %1?",
|
"Czy chcesz mieć możliwość %1?",
|
||||||
"Gdybyś mógł %1, czy byś?",
|
"Gdybyś mógł %1, czy byś?",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
r"Ty jesteś (.*)",
|
r"Ty jesteś (.*)",
|
||||||
(
|
(
|
||||||
"Jak myślisz, dlaczego jestem %1?",
|
"Jak myślisz, dlaczego jestem %1?",
|
||||||
"Czy cieszy cię myśl, że jestem %1?",
|
"Czy cieszy cię myśl, że jestem %1?",
|
||||||
"Być może chciałbyś, żebym był %1.",
|
"Być może chciałbyś, żebym był %1.",
|
||||||
"Może naprawdę mówisz o sobie?",
|
"Może naprawdę mówisz o sobie?",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
r"Jesteś (.*)",
|
r"Jesteś (.*)",
|
||||||
(
|
(
|
||||||
"Dlaczego mówisz, że jestem %1?",
|
"Dlaczego mówisz, że jestem %1?",
|
||||||
"Jak myślisz, dlaczego jestem %1?",
|
"Jak myślisz, dlaczego jestem %1?",
|
||||||
"Mówimy o tobie, czy o mnie?",
|
"Mówimy o tobie, czy o mnie?",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
r"Ja nie (.*)",
|
r"Ja nie (.*)",
|
||||||
("Czy naprawdę nie %1?", "Dlaczego nie %1?", "Czy chcesz %1?"),
|
("Czy naprawdę nie %1?", "Dlaczego nie %1?", "Czy chcesz %1?"),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
r"Ja czuję (.*)",
|
r"Ja czuję (.*)",
|
||||||
(
|
(
|
||||||
"Dobrze, powiedz mi więcej o tych uczuciach.",
|
"Dobrze, powiedz mi więcej o tych uczuciach.",
|
||||||
"Czy często czujesz %1?",
|
"Czy często czujesz %1?",
|
||||||
"Kiedy zwykle czujesz %1?",
|
"Kiedy zwykle czujesz %1?",
|
||||||
"Kiedy czujesz % 1, co robisz?",
|
"Kiedy czujesz % 1, co robisz?",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
r"Mam (.*)",
|
r"Mam (.*)",
|
||||||
(
|
(
|
||||||
"Dlaczego mówisz mi, że masz %1?",
|
"Dlaczego mówisz mi, że masz %1?",
|
||||||
"Czy naprawdę masz %1?",
|
"Czy naprawdę masz %1?",
|
||||||
"Teraz, kiedy masz %1, co zrobisz dalej?",
|
"Teraz, kiedy masz %1, co zrobisz dalej?",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
r"Ja chcę (.*)",
|
r"Ja chcę (.*)",
|
||||||
(
|
(
|
||||||
"Czy możesz wyjaśnić, dlaczego chcesz %1?",
|
"Czy możesz wyjaśnić, dlaczego chcesz %1?",
|
||||||
"Dlaczego %1?",
|
"Dlaczego %1?",
|
||||||
"Kto jeszcze wie, że chcesz %1?",
|
"Kto jeszcze wie, że chcesz %1?",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
r"Jest (.*)",
|
r"Jest (.*)",
|
||||||
(
|
(
|
||||||
"Myślisz, że jest %1?",
|
"Myślisz, że jest %1?",
|
||||||
"Prawdopodobnie istnieje %1.",
|
"Prawdopodobnie istnieje %1.",
|
||||||
"Czy chciałbyś, aby był %1?",
|
"Czy chciałbyś, aby był %1?",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
r"Mój (.*)",
|
r"Mój (.*)",
|
||||||
(
|
(
|
||||||
"Rozumiem, twój %1.",
|
"Rozumiem, twój %1.",
|
||||||
"Dlaczego mówisz, że twój %1?",
|
"Dlaczego mówisz, że twój %1?",
|
||||||
"Kiedy Twój %1, jak się czujesz?",
|
"Kiedy Twój %1, jak się czujesz?",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
r"Ty (.*)",
|
r"Ty (.*)",
|
||||||
(
|
(
|
||||||
"Powinniśmy rozmawiać o Tobie, nie o mnie.",
|
"Powinniśmy rozmawiać o Tobie, nie o mnie.",
|
||||||
"Dlaczego tak o mnie mówisz?",
|
"Dlaczego tak o mnie mówisz?",
|
||||||
"Dlaczego obchodzi cię, czy ja %1?",
|
"Dlaczego obchodzi cię, czy ja %1?",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
r"Dlaczego (.*)",
|
r"Dlaczego (.*)",
|
||||||
(
|
(
|
||||||
"Powiedz mi dlaczego %1?",
|
"Powiedz mi dlaczego %1?",
|
||||||
"Wydaje ci się że, %1?")
|
"Wydaje ci się że, %1?")
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
r"Ja chcę (.*)",
|
r"Ja chcę (.*)",
|
||||||
(
|
(
|
||||||
"Co by dla ciebie znaczyło, gdybyś dostał %1?",
|
"Co by dla ciebie znaczyło, gdybyś dostał %1?",
|
||||||
"Dlaczego chcesz %1?",
|
"Dlaczego chcesz %1?",
|
||||||
"Co byś zrobił, gdybyś dostał %1?",
|
"Co byś zrobił, gdybyś dostał %1?",
|
||||||
"Jeśli masz %1, co byś zrobił?",
|
"Jeśli masz %1, co byś zrobił?",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
r"(.*) mama(.*)",
|
r"(.*) mama(.*)",
|
||||||
(
|
(
|
||||||
"Opowiedz mi więcej o twojej mamie.",
|
"Opowiedz mi więcej o twojej mamie.",
|
||||||
"Jaka była twoja relacja z mamą?",
|
"Jaka była twoja relacja z mamą?",
|
||||||
"Co myślisz o swojej mamie?",
|
"Co myślisz o swojej mamie?",
|
||||||
"Jak to się ma do twoich dzisiejszych uczuć?",
|
"Jak to się ma do twoich dzisiejszych uczuć?",
|
||||||
"Dobre relacje z rodziną są ważne.",
|
"Dobre relacje z rodziną są ważne.",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
r"(.*) tata(.*)",
|
r"(.*) tata(.*)",
|
||||||
(
|
(
|
||||||
"Opowiedz mi więcej o twoim tacie.",
|
"Opowiedz mi więcej o twoim tacie.",
|
||||||
"Jakie uczucia wzbudzał w tobie twój tata?",
|
"Jakie uczucia wzbudzał w tobie twój tata?",
|
||||||
"Co myślisz o swoim tacie?",
|
"Co myślisz o swoim tacie?",
|
||||||
"Czy twoja relacja z tatą ma wpływ na twoje dzisiejsze uczucia?",
|
"Czy twoja relacja z tatą ma wpływ na twoje dzisiejsze uczucia?",
|
||||||
"Czy masz problemy z okazywaniem uczuć swojej rodzinie?",
|
"Czy masz problemy z okazywaniem uczuć swojej rodzinie?",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
r"(.*) dziecko(.*)",
|
r"(.*) dziecko(.*)",
|
||||||
(
|
(
|
||||||
"Miałeś bliskich przyjaciół jako dziecko?",
|
"Miałeś bliskich przyjaciół jako dziecko?",
|
||||||
"Jakie jest twoje ulubione wspomnienie z dzieciństwa?",
|
"Jakie jest twoje ulubione wspomnienie z dzieciństwa?",
|
||||||
"Pamiętasz jakieś sny lub koszmary z dzieciństwa?",
|
"Pamiętasz jakieś sny lub koszmary z dzieciństwa?",
|
||||||
"Czy inne dzieci czasem cię drażniły?",
|
"Czy inne dzieci czasem cię drażniły?",
|
||||||
"Jak myślisz, czy doświadczenia z dzieciństwa wpłynęły na twoje dzisiejsze uczucia?",
|
"Jak myślisz, czy doświadczenia z dzieciństwa wpłynęły na twoje dzisiejsze uczucia?",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
r"(.*)\?",
|
r"(.*)\?",
|
||||||
(
|
(
|
||||||
"Dlaczego o to pytasz?",
|
"Dlaczego o to pytasz?",
|
||||||
"Rozważ proszę, czy byłbyś w stanie odpowiedzieć na swoje pytanie.",
|
"Rozważ proszę, czy byłbyś w stanie odpowiedzieć na swoje pytanie.",
|
||||||
"Być może odpowiedź tkwi w tobie?",
|
"Być może odpowiedź tkwi w tobie?",
|
||||||
"Dlaczego nie powiesz?",
|
"Dlaczego nie powiesz?",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
r"Do widzenia",
|
r"Do widzenia",
|
||||||
(
|
(
|
||||||
"Dziękuję, że ze mną porozmawiałeś.",
|
"Dziękuję, że ze mną porozmawiałeś.",
|
||||||
"Do widzenia.",
|
"Do widzenia.",
|
||||||
"Dziękuję, miłego dnia!",
|
"Dziękuję, miłego dnia!",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
r"(.*)",
|
r"(.*)",
|
||||||
(
|
(
|
||||||
"Opowiedz mi więcej.",
|
"Opowiedz mi więcej.",
|
||||||
"Zmieńmy trochę temat... Opowiedz mi o swojej rodzinie",
|
"Zmieńmy trochę temat... Opowiedz mi o swojej rodzinie",
|
||||||
"Czy możesz to rozwinąć?",
|
"Czy możesz to rozwinąć?",
|
||||||
"Dlaczego mówisz, że %1?",
|
"Dlaczego mówisz, że %1?",
|
||||||
"Rozumiem.",
|
"Rozumiem.",
|
||||||
"Bardzo interesujące.",
|
"Bardzo interesujące.",
|
||||||
"%1.",
|
"%1.",
|
||||||
"Rozumiem, a co ci to mówi?",
|
"Rozumiem, a co ci to mówi?",
|
||||||
"Jak się z tym czujesz?",
|
"Jak się z tym czujesz?",
|
||||||
"Jak się czujesz, kiedy o tym mówisz?",
|
"Jak się czujesz, kiedy o tym mówisz?",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
eliza_chatbot = Chat(pairs, reflections)
|
eliza_chatbot = Chat(pairs, reflections)
|
||||||
|
|
||||||
|
|
||||||
def eliza_chat():
|
def eliza_chat():
|
||||||
print("Psycholog\n---------")
|
print("Psycholog\n---------")
|
||||||
print("Porozmawiaj z programem, wpisując polskie słowa, używając")
|
print("Porozmawiaj z programem, wpisując polskie słowa, używając")
|
||||||
print('dużych oraz małych liter i znaków interpunkcyjnych.')
|
print('dużych oraz małych liter i znaków interpunkcyjnych.')
|
||||||
print('Po zakończeniu wpisz „Do widzenia”')
|
print('Po zakończeniu wpisz „Do widzenia”')
|
||||||
print("=" * 75)
|
print("=" * 75)
|
||||||
print("Dzień dobry. Nazywam się Eliza.\nJak się dzisiaj czujesz?")
|
print("Dzień dobry. Nazywam się Eliza.\nJak się dzisiaj czujesz?")
|
||||||
|
|
||||||
eliza_chatbot.converse()
|
eliza_chatbot.converse()
|
||||||
|
|
||||||
|
|
||||||
def demo():
|
def demo():
|
||||||
eliza_chat()
|
eliza_chat()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
demo()
|
demo()
|
@ -10,41 +10,53 @@ grammars = []
|
|||||||
for grammarFile in onlyfiles:
|
for grammarFile in onlyfiles:
|
||||||
grammar = jsgf.parse_grammar_file(mypath + grammarFile)
|
grammar = jsgf.parse_grammar_file(mypath + grammarFile)
|
||||||
grammars.append(grammar)
|
grammars.append(grammar)
|
||||||
|
|
||||||
class Ajn:
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def __init__(self, grammars = None):
|
|
||||||
self.grammars = grammars
|
|
||||||
|
|
||||||
def get_dialog_act(rule):
|
def get_dialog_act(rule):
|
||||||
slots = []
|
slots = []
|
||||||
get_slots(rule.expansion, slots)
|
get_slots(rule.expansion, slots)
|
||||||
return {'act': rule.grammar.name, 'slots': slots}
|
return {'act': rule.grammar.name, 'slots': slots}
|
||||||
|
|
||||||
def get_slots(expansion, slots):
|
def get_slots(expansion, slots):
|
||||||
if expansion.tag != '':
|
if expansion.tag != '':
|
||||||
slots.append((expansion.tag, expansion.current_match))
|
slots.append((expansion.tag, expansion.current_match))
|
||||||
return
|
return
|
||||||
|
|
||||||
for child in expansion.children:
|
for child in expansion.children:
|
||||||
get_slots(child, slots)
|
get_slots(child, slots)
|
||||||
|
|
||||||
if not expansion.children and isinstance(expansion, jsgf.NamedRuleRef):
|
if not expansion.children and isinstance(expansion, jsgf.NamedRuleRef):
|
||||||
get_slots(expansion.referenced_rule.expansion, slots)
|
get_slots(expansion.referenced_rule.expansion, slots)
|
||||||
|
|
||||||
def nlu(utterance):
|
|
||||||
matched = None
|
|
||||||
for grammar in grammars:
|
|
||||||
matched = grammar.find_matching_rules(utterance)
|
|
||||||
if matched:
|
|
||||||
break
|
|
||||||
|
|
||||||
|
def nlu(utterance):
|
||||||
|
matched = None
|
||||||
|
for grammar in grammars:
|
||||||
|
matched = grammar.find_matching_rules(utterance)
|
||||||
if matched:
|
if matched:
|
||||||
return get_dialog_act(matched[0])
|
break
|
||||||
else:
|
|
||||||
return {'act': 'null', 'slots': []}
|
|
||||||
|
|
||||||
|
if matched:
|
||||||
|
return get_dialog_act(matched[0])
|
||||||
|
else:
|
||||||
|
return {'act': 'null', 'slots': []}
|
||||||
|
|
||||||
|
def preprocess(text):
|
||||||
|
text = text.lower()
|
||||||
|
text = text.replace("ą","a")
|
||||||
|
text = text.replace("ę","e")
|
||||||
|
text = text.replace("ó","o")
|
||||||
|
text = text.replace("ł","l")
|
||||||
|
text = text.replace("ć","c")
|
||||||
|
text = text.replace("ń","n")
|
||||||
|
text = text.replace("ś","s")
|
||||||
|
text = text.replace("ą","a")
|
||||||
|
text = text.replace("ż","z")
|
||||||
|
text = text.replace("ź","z")
|
||||||
|
text = text.replace("ą","a")
|
||||||
|
|
||||||
|
return text
|
||||||
|
|
||||||
ajn = Ajn()
|
|
||||||
|
def ajn(text):
|
||||||
|
frame = nlu(preprocess(text))
|
||||||
|
return frame
|
||||||
|
@ -23,13 +23,19 @@ class Dst:
|
|||||||
if value == None:
|
if value == None:
|
||||||
return key
|
return key
|
||||||
|
|
||||||
def reset(self):
|
def reset_if_needed(self,text):
|
||||||
for key, value in self.checklist.items():
|
if text == "reset":
|
||||||
value = None;
|
for key in self.checklist.keys():
|
||||||
|
self.checklist[key] = None
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def save_answer(self, slots):
|
def save_answer(self, slots):
|
||||||
for slot in slots:
|
for slot in slots:
|
||||||
#print(slot[0],slot[1])
|
if slot[0] == "numer":
|
||||||
self.checklist[slot[0]] = slot[1]
|
if (len(slot[1].replace(" ",""))) == 9:
|
||||||
|
self.checklist[slot[0]] = slot[1].replace(" ","")
|
||||||
|
else:
|
||||||
|
self.checklist[slot[0]] = slot[1]
|
||||||
|
|
||||||
self.messages.append(slots)
|
self.messages.append(slots)
|
@ -1,13 +1,46 @@
|
|||||||
def nlg(query,frame):
|
import random
|
||||||
|
|
||||||
|
unknown = ['Nie rozumiem. Proszę o powtórzenie.',
|
||||||
|
'Czy możesz powiedzieć to innymi słowami?',
|
||||||
|
"Nie wiem co masz na myśli",
|
||||||
|
"Czy możesz powiedzieć to w inny sposób, proszę?"]
|
||||||
|
|
||||||
|
bye = ["Trzymaj się!",
|
||||||
|
"Na razie!",
|
||||||
|
"Do zobaczenia później!",
|
||||||
|
"Do zobaczenia",
|
||||||
|
"Pogadamy później!"
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def nlg(query,frame,text):
|
||||||
if frame['act'] == "hello":
|
if frame['act'] == "hello":
|
||||||
print("Witamy w systemie rezerwacji biletów kinowych. W czym mogę pomóc?")
|
print("Witamy w systemie rezerwacji biletów kinowych. W czym mogę pomóc?")
|
||||||
if frame['act'] == "repertuar":
|
if frame['act'] == "repertuar":
|
||||||
print("Aktualnie repertuar zawiera takie filmy jak: \"Batman\" \"Ambulans\" \"Bunkier strachu\" \"Córka\" \"Uncharted\" \"Inni ludzie\" \"Śmierć na Nilu\" \"Skarb Mikołajka\"")
|
print("Aktualnie repertuar zawiera takie filmy jak: \"Batman\" \"Ambulans\" \"Bunkier strachu\" \"Córka\" \"Uncharted\" \"Inni ludzie\" \"Śmierć na Nilu\" \"Skarb Mikołajka\"")
|
||||||
if frame['act'] == 'null':
|
|
||||||
print('Nie rozumiem. Proszę o powtórzenie')
|
|
||||||
|
|
||||||
|
if frame['act'] == 'null':
|
||||||
|
if text == 'reset':
|
||||||
|
print("Resetowanie dialogu.")
|
||||||
|
if text == "exit":
|
||||||
|
print('Dziękujemy za skorzystanie z naszych usług!')
|
||||||
|
elif text != "reset":
|
||||||
|
print(random.choice(unknown))
|
||||||
|
|
||||||
|
if frame['act'] == "numer":
|
||||||
|
if len(text) != 9:
|
||||||
|
print("Proszę podać poprawny numer telefonu.")
|
||||||
|
elif query == None:
|
||||||
|
print("Rezerwacja została dokonana. Potwierdzenie rezerwacji zostanie niebawem przesłane wiadomością SMS. Proszę o przybycie 15 minut przed rozpoczęciem seansu w celu zakupu biletu, w innym przypadku rezerwacja przepada.")
|
||||||
|
|
||||||
|
if frame['act'] == "bye" :
|
||||||
|
print(random.choice(bye))
|
||||||
|
|
||||||
|
|
||||||
else:
|
# if frame['act'] != "hello" and frame['act'] != "null" and :
|
||||||
|
if frame['act'] not in ['hello','bye','null']:
|
||||||
if query == "miejsce":
|
if query == "miejsce":
|
||||||
print("Czy miejsca mają być z przodu, z tyłu czy na środku?")
|
print("Czy miejsca mają być z przodu, z tyłu czy na środku?")
|
||||||
if query == "numer":
|
if query == "numer":
|
||||||
@ -20,7 +53,7 @@ def nlg(query,frame):
|
|||||||
print("Ile biletów ma zostać zarezerwowanych?")
|
print("Ile biletów ma zostać zarezerwowanych?")
|
||||||
if query == 'tytul':
|
if query == 'tytul':
|
||||||
print("Na jaki film ma zostać dokonana rezerwacja?")
|
print("Na jaki film ma zostać dokonana rezerwacja?")
|
||||||
if query == None:
|
|
||||||
print("Rezerwacja została dokonana. Potwierdzenie rezerwacji zostanie niebawem przesłane wiadomością SMS. Proszę o przybycie 15 minut przed rozpoczęciem seansu w celu zakupu biletu, w innym przypadku rezerwacja przepada.")
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user