From b79b009b8e1652d2302b4b3d4e24633d18e59fb4 Mon Sep 17 00:00:00 2001 From: Kornelia Girejko Date: Tue, 15 Mar 2022 21:57:50 +0100 Subject: [PATCH] =?UTF-8?q?Prze=C5=9Blij=20pliki=20do=20''?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- eliza_po_polsku.py | 444 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 444 insertions(+) create mode 100644 eliza_po_polsku.py diff --git a/eliza_po_polsku.py b/eliza_po_polsku.py new file mode 100644 index 0000000..3d99a8c --- /dev/null +++ b/eliza_po_polsku.py @@ -0,0 +1,444 @@ +# -*- coding: utf-8 -*- +""" +Created on Tue Mar 15 20:14:11 2022 + +@author: korne +""" + +from nltk.chat.util import Chat +import random +import re + +reflections = { + "ja jestem": "ty jesteś", + "ja byłem": "ty byłeś", + "ja": "ty", + "jestem": "jesteś", + "chciałbym": "chciałbyś", + "mam": "masz", + "będę": "będziesz", + "moje": "twoje", + "jesteś": "jestem", + "byłeś": "byłem", + "ty byłeś": "ja byłem", + "będziesz": "będę", + "nasze": "wasze", + "twoje": "moje", + "ty" : "ja", + "ja": "ty", + "my" : "wy", + "jesteśmy": "jesteście", +} + +class Chat: + def __init__(self, pairs, reflections={}): + + self._pairs = [(re.compile(x, re.IGNORECASE), y) for (x, y) in pairs] + self._reflections = reflections + self._regex = self._compile_reflections() + + + def _compile_reflections(self): + sorted_refl = sorted(self._reflections, key=len, reverse=True) + return re.compile( + r"\b({})\b".format("|".join(map(re.escape, sorted_refl))), re.IGNORECASE + ) + + def _substitute(self, str): + + return self._regex.sub( + lambda mo: self._reflections[mo.string[mo.start() : mo.end()]], str.lower() + ) + + def _wildcards(self, response, match): + pos = response.find("%") + while pos >= 0: + num = int(response[pos + 1 : pos + 2]) + response = ( + response[:pos] + + self._substitute(match.group(num)) + + response[pos + 2 :] + ) + pos = response.find("%") + return response + + def respond(self, str): + + # check each pattern + for (pattern, response) in self._pairs: + match = pattern.match(str) + + # did the pattern match? + if match: + resp = random.choice(response) # pick a random response + resp = self._wildcards(resp, match) # process wildcards + + # fix munged punctuation at the end + if resp[-2:] == "?.": + resp = resp[:-2] + "." + if resp[-2:] == "??": + resp = resp[:-2] + "?" + return resp + + + # Hold a conversation with a chatbot + def converse(self, quit="Do widzenia"): + user_input = "" + while user_input != quit: + user_input = quit + try: + user_input = input(">") + except EOFError: + print(user_input) + if user_input: + while user_input[-1] in "!.": + user_input = user_input[:-1] + print(self.respond(user_input)) + + +pairs = ( + ( + r"Potrzebuję (.*)", + ( + "Dlaczego potrzebujesz %1?", + "Czy jesteś pewny, że potrzebujesz %1?", + ), + ), + ( + r"Kto cię stworzył (.*)", + ( + "ELIZA została wynaleziona w 1966 roku przez Weizenbauma. Dlaczego %1?", + + ), + ), + ( + r"Dlaczego ty (.*)", + ( + "Czy naprawdę myślisz, że %1?", + "Być może w końcu będę %1.", + "Czy naprawdę chcesz, żebym %1?", + ), + ), + ( + r"Dlaczego ja (.*)", + ( + "Czy uważasz, że powinieneś być w stanie %1?", + "Gdybyś mógł %1, co byś zrobił?", + "Nie wiem -- dlaczego nie możesz %1?", + "Czy naprawdę próbowałeś?", + ), + ), + ( + r"Nie mogę (.*)", + ( + "Skąd wiesz, że nie możesz %1?", + "Być może mógłbyś, gdybyś spróbował.", + "Co byś musiał zrobić, żeby %1?", + ), + ), + ( + r"Jestem (.*)", + ( + "Przyszedłeś do mnie, bo jesteś %1?", + "Jak długo jesteś %1?", + "Co myślisz o tym, że jesteś %1?", + ), + ), + ( + r"Jestem (.*)", + ( + "Jak się czujesz z tym, że jesteś %1?", + "Czy lubisz być %1?", + "Dlaczego mówisz mi, że jesteś %1?", + "Dlaczego myślisz, że jesteś %1?", + ), + ), + ( + r"Czy jesteś (.*)", + ( + "Dlaczego to ma znaczenie, czy jestem %1?", + "Wolałbyś, gdybym nie była %1?", + "Być może wierzysz, że jestem %1.", + "Mogę być %1 - jak myślisz?", + ), + ), + ( + r"Co (.*)", + ( + "Dlaczego pytasz?", + "Jak pomogłaby ci odpowiedź na to?", + "Co myślisz?", + ), + ), + ( + r"Jak (.*)", + ( + "Jak ty sądzisz?", + "Perhaps you can answer your own question.", + "What is it you're really asking?", + ), + ), + ( + r"Ponieważ (.*)", + ( + "Czy to prawdziwy powód?", + "Jakie inne powody przychodzą Ci na myśl?”,", + "Czy ten powód dotyczy czegokolwiek innego?", + "Jeśli %1, co jeszcze musi być prawdą?", + ), + ), + ( + r"(.*) przepraszam (.*)", + ( + "Wiele razy przeprosiny nie są potrzebne.", + "Co czujesz kiedy przepraszasz?", + ), + ), + ( + r"Cześć(.*)", + ( + "Cześć... cieszę się, że mogłeś dzisiaj wpaść..", + "Cześć... jak się masz dzisiaj?", + "Cześć, jak się dzisiaj czujesz?", + ), + ), + ( + r"Myśle, że (.*)", + ( + "Czy wątpisz w %1?", + "Naprawdę tak myślisz?", + "Ale nie jesteś pewien, że %1?" + ), + ), + ( + r"(.*) przyjaciel (.*)", + ( + "Opowiedz mi więcej o swoich przyjaciołach.", + "Kiedy myślisz o przyjacielu, co przychodzi ci na myśl?", + "Dlaczego miałbyś nie opowiedzieć o przyjacielu z dzieciństwa?", + ), + ), + ( + r"Tak", + ( + "Wydajesz się całkiem pewien.", "OK, ale czy możesz trochę rozwinąć?" + ) + ), + ( + r"(.*) komputer(.*)", + ( + "Naprawdę mówisz o mnie?", + "Czy rozmowa z komputerem wydaje się dziwna?", + "Jak się czujesz przy komputerach?", + "Czy czujesz się zagrożony przez komputery?", + ), + ), + ( + r"To jest (.*)", + ( + "Czy myślisz, że to %1?", + "Może to %1 -- co myślisz?", + "Gdyby to był %1, co byś zrobił?", + "Może być tak, że %1.", + ), + ), + ( + r"Jest to (.*)", + ( + "Wydajesz się bardzo pewny.", + "Gdybym ci powiedziała, że prawdopodobnie nie jest to %1, co byś poczuł?", + ), + ), + ( + r"Czy możesz (.*)", + ( + "Dlaczego myślisz, że nie mogę %1?", + "Gdybym mógł %1, to co?", + "Dlaczego pytasz, czy mogę %1?", + ), + ), + ( + r"Czy mogę (.*)", + ( + "Być może nie chcesz %1.", + "Czy chcesz mieć możliwość %1?", + "Gdybyś mógł %1, czy byś?", + ), + ), + ( + r"Czy mogę (.*)", + ( + "Być może nie chcesz %1.", + "Czy chcesz mieć możliwość %1?", + "Gdybyś mógł %1, czy byś?", + ), + ), + ( + r"Ty jesteś (.*)", + ( + "Jak myślisz, dlaczego jestem %1?", + "Czy cieszy cię myśl, że jestem %1?", + "Być może chciałbyś, żebym był %1.", + "Może naprawdę mówisz o sobie?", + ), + ), + ( + r"Jesteś (.*)", + ( + "Dlaczego mówisz, że jestem %1?", + "Jak myślisz, dlaczego jestem %1?", + "Mówimy o tobie, czy o mnie?", + ), + ), + ( + r"Ja nie (.*)", + ("Czy naprawdę nie %1?", "Dlaczego nie %1?", "Czy chcesz %1?"), + ), + ( + r"Ja czuję (.*)", + ( + "Dobrze, powiedz mi więcej o tych uczuciach.", + "Czy często czujesz %1?", + "Kiedy zwykle czujesz %1?", + "Kiedy czujesz % 1, co robisz?", + ), + ), + ( + r"Mam (.*)", + ( + "Dlaczego mówisz mi, że masz %1?", + "Czy naprawdę masz %1?", + "Teraz, kiedy masz %1, co zrobisz dalej?", + ), + ), + ( + r"Ja chcę (.*)", + ( + "Czy możesz wyjaśnić, dlaczego chcesz %1?", + "Dlaczego %1?", + "Kto jeszcze wie, że chcesz %1?", + ), + ), + ( + r"Jest (.*)", + ( + "Myślisz, że jest %1?", + "Prawdopodobnie istnieje %1.", + "Czy chciałbyś, aby był %1?", + ), + ), + ( + r"Mój (.*)", + ( + "Rozumiem, twój %1.", + "Dlaczego mówisz, że twój %1?", + "Kiedy Twój %1, jak się czujesz?", + ), + ), + ( + r"Ty (.*)", + ( + "Powinniśmy rozmawiać o Tobie, nie o mnie.", + "Dlaczego tak o mnie mówisz?", + "Dlaczego obchodzi cię, czy ja %1?", + ), + ), + ( + r"Dlaczego (.*)", + ( + "Powiedz mi dlaczego %1?", + "Wydaje ci się że, %1?") + ), + ( + r"Ja chcę (.*)", + ( + "Co by dla ciebie znaczyło, gdybyś dostał %1?", + "Dlaczego chcesz %1?", + "Co byś zrobił, gdybyś dostał %1?", + "Jeśli masz %1, co byś zrobił?", + ), + ), + ( + r"(.*) mama(.*)", + ( + "Opowiedz mi więcej o twojej mamie.", + "Jaka była twoja relacja z mamą?", + "Co myślisz o swojej mamie?", + "Jak to się ma do twoich dzisiejszych uczuć?", + "Dobre relacje z rodziną są ważne.", + ), + ), + ( + r"(.*) tata(.*)", + ( + "Opowiedz mi więcej o twoim tacie.", + "Jakie uczucia wzbudzał w tobie twój tata?", + "Co myślisz o swoim tacie?", + "Czy twoja relacja z tatą ma wpływ na twoje dzisiejsze uczucia?", + "Czy masz problemy z okazywaniem uczuć swojej rodzinie?", + ), + ), + ( + r"(.*) dziecko(.*)", + ( + "Miałeś bliskich przyjaciół jako dziecko?", + "Jakie jest twoje ulubione wspomnienie z dzieciństwa?", + "Pamiętasz jakieś sny lub koszmary z dzieciństwa?", + "Czy inne dzieci czasem cię drażniły?", + "Jak myślisz, czy doświadczenia z dzieciństwa wpłynęły na twoje dzisiejsze uczucia?", + ), + ), + ( + r"(.*)\?", + ( + "Dlaczego o to pytasz?", + "Rozważ proszę, czy byłbyś w stanie odpowiedzieć na swoje pytanie.", + "Być może odpowiedź tkwi w tobie?", + "Dlaczego nie powiesz?", + ), + ), + ( + r"Do widzenia", + ( + "Dziękuję, że ze mną porozmawiałeś.", + "Do widzenia.", + "Dziękuję, miłego dnia!", + ), + ), + ( + r"(.*)", + ( + "Opowiedz mi więcej.", + "Zmieńmy trochę temat... Opowiedz mi o swojej rodzinie", + "Czy możesz to rozwinąć?", + "Dlaczego mówisz, że %1?", + "Rozumiem.", + "Bardzo interesujące.", + "%1.", + "Rozumiem, a co ci to mówi?", + "Jak się z tym czujesz?", + "Jak się czujesz, kiedy o tym mówisz?", + ), + ), +) + +eliza_chatbot = Chat(pairs, reflections) + + +def eliza_chat(): + print("Psycholog\n---------") + print("Porozmawiaj z programem, wpisując polskie słowa, używając") + print('dużych oraz małych liter i znaków interpunkcyjnych.') + print('Po zakończeniu wpisz „Do widzenia”') + print("=" * 75) + print("Dzień dobry. Nazywam się Eliza.\nJak się dzisiaj czujesz?") + + eliza_chatbot.converse() + + +def demo(): + eliza_chat() + + +if __name__ == "__main__": + demo() \ No newline at end of file