Zaktualizuj 'eliza_po_polsku.py'

This commit is contained in:
Kornelia Girejko 2022-03-15 22:53:16 +01:00
parent 2fb726e628
commit 7423eb6239

View File

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