Compare commits
17 Commits
Author | SHA1 | Date | |
---|---|---|---|
ab975f844e | |||
0eb08ba2ef | |||
|
398728d092 | ||
|
255c0cc538 | ||
|
6ef21ab6ec | ||
|
efdc8a0cf2 | ||
|
f70cc20f62 | ||
|
7925f4e4e8 | ||
|
568dbc8e1b | ||
|
b2c57b0699 | ||
606fe742d2 | |||
0fe9d4a844 | |||
|
3048cf77be | ||
|
91b69f49d6 | ||
1d56384a61 | |||
|
7376965708 | ||
|
4ca22a6f00 |
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
*.vs
|
456
eliza.py
Normal file
456
eliza.py
Normal file
@ -0,0 +1,456 @@
|
||||
import random
|
||||
import re
|
||||
#test
|
||||
|
||||
reflections = {
|
||||
"ja jestem": "ty jesteś",
|
||||
"jestem" : "jesteś",
|
||||
"ja byłem": "ty byłeś",
|
||||
"byłem" : "byłeś",
|
||||
"ja byłam": "ty byłaś",
|
||||
"byłam" : "byłaś",
|
||||
"ja": "ty",
|
||||
"ja będę": "ty będziesz",
|
||||
"będę" : "będziesz",
|
||||
"mój": "twój",
|
||||
"moja": "twoja",
|
||||
"mi": "ci",
|
||||
"mnie": "tobie",
|
||||
"tobie" : "mnie",
|
||||
"ty jesteś": "ja jestem",
|
||||
"jesteś" : "jestem",
|
||||
"ty byłeś": "ja byłem",
|
||||
"byłeś" : "byłem",
|
||||
"ty byłaś": "ja byłam",
|
||||
"byłaś" : "byłam",
|
||||
"ty": "ja",
|
||||
"ty będziesz": "ja będę",
|
||||
"będziesz" : "będę",
|
||||
"twój": "mój",
|
||||
"twoja": "moja"
|
||||
|
||||
}
|
||||
|
||||
pairs = (
|
||||
(
|
||||
r"Potrzebuję (.*)",
|
||||
(
|
||||
"Dlaczego potrzebujesz %1?",
|
||||
"Czy naprawdę pomoże Ci posiadanie %1?",
|
||||
"Jesteś pewny, że potrzebujesz %1?",
|
||||
),
|
||||
),
|
||||
(
|
||||
r"Dlaczego by nie (.*)",
|
||||
(
|
||||
"Naprawdę uważasz, dlaczego by nie %1?",
|
||||
"Możliwe, że w końcu %1.",
|
||||
"Naprawdę chcesz abym %1?",
|
||||
),
|
||||
),
|
||||
(
|
||||
r"Dlaczego nie mogę (.*)",
|
||||
(
|
||||
"Czy uważasz, że powinieneś być w stanie %1?",
|
||||
"Jeśli mógłbyś %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?",
|
||||
"Możliwe, że mógłbyś %1 jeśli byś spróbował.",
|
||||
"Co by cię to kosztowało aby %1?",
|
||||
),
|
||||
),
|
||||
(
|
||||
r"Jestem (.*)",
|
||||
(
|
||||
"Czy przyszedłeś do mnie, bo jesteś %1?",
|
||||
"Jak długo byłeś %1?",
|
||||
"Jak się czujesz będąc %1?",
|
||||
),
|
||||
),
|
||||
(
|
||||
r"Jest mi (.*)",
|
||||
(
|
||||
"Jak bycie %1 wpływa na Ciebie?",
|
||||
"CZy jesteś szczęśliwy bedąc %1?",
|
||||
"Dlaczego mówisz mi o tym, że jesteś %1?",
|
||||
"Dlaczego myślisz, że jesteś %1?",
|
||||
),
|
||||
),
|
||||
(
|
||||
r"Czy jesteś (.*)",
|
||||
(
|
||||
"Dlaczego to ma znaczenie, że jestem %1?",
|
||||
"Wolałbyś abym nie był %1?",
|
||||
"Możliwe, że wierzysz, że jestem %1.",
|
||||
"Być może jestem %1 -- co o tym sądzisz?",
|
||||
),
|
||||
),
|
||||
(
|
||||
r"Co (.*)",
|
||||
(
|
||||
"Dlaczego pytasz?",
|
||||
"W jaki sposób odpowiedź na to pomoże?",
|
||||
"Co o tym myślisz?",
|
||||
),
|
||||
),
|
||||
(
|
||||
r"Jak (.*)",
|
||||
(
|
||||
"Jak myślisz?",
|
||||
"Być może sam możesz odpowiedzieć sobie na to pytanie.",
|
||||
"O co tak naprawdę pytasz?",
|
||||
),
|
||||
),
|
||||
(
|
||||
r"Ponieważ (.*)",
|
||||
(
|
||||
"Czy to jednyny powód?",
|
||||
"Jakie inne przyczyny przychodzą Ci do głowy?",
|
||||
"Czy ten powód odwołuje się jeszcze do czegoś innego?",
|
||||
"Jeśli %1, to co innego musi być prawdą?",
|
||||
),
|
||||
),
|
||||
(
|
||||
r"(.*) przepraszam (.*)",
|
||||
(
|
||||
"W wielu przypadkach nie trzeba przepraszać",
|
||||
"Co czujesz kiedy przepraszasz?",
|
||||
),
|
||||
),
|
||||
(
|
||||
r"Cześć(.*)",
|
||||
(
|
||||
"Cześć... Miło że wpadłeś dzisiaj",
|
||||
"Witaj... Jak się czujesz dzisiaj?",
|
||||
"Cześć, jak dziś się czujesz?",
|
||||
),
|
||||
),
|
||||
(
|
||||
r"Myślę, że (.*)",
|
||||
("Czy wątpisz, że %1?", "Naprawdę tak myślisz?", "Ale nie jesteś pewien, że %1?"),
|
||||
),
|
||||
(
|
||||
r"(.*) przyjaciel (.*)",
|
||||
(
|
||||
"Powiedz mi o swoich przyjacielach.",
|
||||
"Kiedy myślisz o przyjacielu, co Tobie przychodzi do głowy?",
|
||||
"Chy chciałbyś/chciałabyś mi opowiedzieć o przyjacielu z dzieciństwa?",
|
||||
),
|
||||
),
|
||||
(r"Tak", ("Zdaje się, że jesteś pewien tego o czym mówisz.", "Ok, mógłyś o tym opowiedzieć trochę więcej?")),
|
||||
(
|
||||
r"(.*) komputer(.*)",
|
||||
(
|
||||
"Czy rzeczywiście mówisz o mnie?",
|
||||
"Czy rozmawianie z komputerem nie wygląda na coś dziwnego?",
|
||||
"Jak się czujesz, kiedy myślisz o komputerach?",
|
||||
"Czy czujesz się zagrożony przez komputery?",
|
||||
),
|
||||
),
|
||||
(
|
||||
r"To jest (.*)",
|
||||
(
|
||||
"Myślisz, że to jest %1?",
|
||||
"Możliwe, że to jest %1 -- co o tym myślisz?",
|
||||
"Jeśliby to było %1, co byś zrobił/zrobiła?",
|
||||
"Całkiem może być, że %1.",
|
||||
),
|
||||
),
|
||||
(
|
||||
r"To jest (.*)",
|
||||
(
|
||||
"Sprawiasz wrażenie, że wiesz o czym mówisz",
|
||||
"Gdybym stwierdziła, że wcale tak nie jest %1, jakbyś się poczuł/poczuła?",
|
||||
),
|
||||
),
|
||||
(
|
||||
r"(Czy możesz|Mogłabyś) (.*)",
|
||||
(
|
||||
"Dlaczego myślisz, że nie mogę %1?",
|
||||
"Gdybym mogła %1, to co wtedy?",
|
||||
"Dlaczego się pytasz, czy mogę %1?",
|
||||
),
|
||||
),
|
||||
(
|
||||
r"Muszę (.*)",
|
||||
(
|
||||
"Nic nie musisz, tylko chcesz",
|
||||
),
|
||||
),
|
||||
(
|
||||
r"Czy mogę (.*)",
|
||||
(
|
||||
"Być może nie chcesz %1.",
|
||||
"Chciałbyś/chciałabyś być w stanie %1?",
|
||||
"Jeślibyś %1, zrobiłbyś/zrobiłabyś to?",
|
||||
),
|
||||
),
|
||||
(
|
||||
r"Ty jesteś (.*)",
|
||||
(
|
||||
"Dlaczego myślisz, że jestem %1?",
|
||||
"Czy sprawia Ci przyjemność myślenie, że jestem %1?",
|
||||
"Może chciałbyś, żebym był %1.",
|
||||
"Być może tak 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"Czuję (.*)",
|
||||
(
|
||||
"Dobrze, opowiedz mi więcej o tych uczuciach.",
|
||||
"Jak często czujesz %1?",
|
||||
"Kiedy zwykle czujesz %1?",
|
||||
"Kiedy czujesz %1, co robisz?",
|
||||
),
|
||||
),
|
||||
(
|
||||
r"Mam (.*)",
|
||||
(
|
||||
"Dlaczego mi mówisz, że masz %1?",
|
||||
"Czy naprawdę %1?",
|
||||
"Teraz, gdy masz %1, co zamierzasz zrobić dalej?",
|
||||
),
|
||||
),
|
||||
(
|
||||
r"Ja bym (.*)",
|
||||
(
|
||||
"Czy mógłbyś wyjaśnić dlaczego miałbyś %1?",
|
||||
"Dlaczego miałbyś %1?",
|
||||
"Kto inny wie, że byś %1?",
|
||||
),
|
||||
),
|
||||
(
|
||||
r"Istnieje (.*)",
|
||||
(
|
||||
"Czy myślisz, że istnieje %1?",
|
||||
"Jest to prawdopodobne, że istnieje %1.",
|
||||
"Chciałbyś żeby w tym miejscu istniało %1?",
|
||||
),
|
||||
),
|
||||
(
|
||||
r"Mój (.*)",
|
||||
(
|
||||
"Widzę, twój %1.",
|
||||
"Dlaczego twierdzisz, ż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?",
|
||||
"Co Cię obchodzi, czy ja %1?",
|
||||
),
|
||||
),
|
||||
(r"Dlaczego (.*)", ("Dlaczego nie podasz mi powodu, dla którego %1?", "Dlaczego myślisz że %1?")),
|
||||
|
||||
|
||||
(
|
||||
r"Ja chcę (.*)",
|
||||
(
|
||||
"Jak ważne dla Ciebie jest %1?",
|
||||
"Dlaczego chcesz %1?",
|
||||
"Co zrobiłbyś, gdybyś dostał %1?",
|
||||
"Jeśli dostałbyś %1, co byś zrobił?",
|
||||
),
|
||||
),
|
||||
(
|
||||
r"(.*) (ma(m|tk)a|stara)(.*)",
|
||||
(
|
||||
"Opowiedz mi więcej o Twojej matce.",
|
||||
"Jaka jest Twoja relacja z matką?",
|
||||
"Co czujesz, gdy myślisz o swojej matce?",
|
||||
"Jak to się ma do tego, jak się dzisiaj czujesz?",
|
||||
"Dobre relacje w rodzinie są ważne",
|
||||
),
|
||||
),
|
||||
(
|
||||
r"(.*) (tata|ojciec|stary)(.*)",
|
||||
(
|
||||
"Opowiedz mi więcej o Twoim ojcu.",
|
||||
"Jaka jest Twoja relacja z ojcem?",
|
||||
"Co czujesz, gdy myślisz o swoim ojcu?",
|
||||
"Jak to się ma do tego, jak się dzisiaj czujesz?",
|
||||
"Czy masz problemy z okazywaniem czułości członkom Twojej rodziny?",
|
||||
),
|
||||
),
|
||||
(
|
||||
r"(.*) dziecko(.*)",
|
||||
(
|
||||
"Czy jako dziecko miałeś bliskich przyjaciół?",
|
||||
"Jakie jest Twoje najlepsze wspomnienie z dzieciństwa?",
|
||||
"Pamiętasz jakieś nawracające sny lub koszmary z dzieciństwa?",
|
||||
"Czy zdarzało się, aby inne dzieci Cię dręczyły?",
|
||||
"Jak myślisz, jak twoje doświadczenia z dzieciństwa wpływają na to, jak się dzisiaj czujesz?",
|
||||
),
|
||||
),
|
||||
(
|
||||
r"(.*)\?",
|
||||
(
|
||||
"Dlaczego o to pytasz?",
|
||||
"Zastanów się, czy sam odpowiesz na to pytanie.",
|
||||
"Być może znasz już odpowiedź na to pytanie?",
|
||||
"Dlaczego Ty mi o tym nie opowiesz?",
|
||||
),
|
||||
),
|
||||
(
|
||||
r"koniec",
|
||||
(
|
||||
"Dziękuję za rozmowę.",
|
||||
"Do widzenia",
|
||||
"To będzie 150zł. Miłego dnia!",
|
||||
),
|
||||
),
|
||||
(
|
||||
r"Wiesz co się liczy",
|
||||
(
|
||||
"Szacunek ludzi ulicy",
|
||||
"SZACUNEK LUDZI ULICY",
|
||||
),
|
||||
),
|
||||
(
|
||||
r"Kamień i skała",
|
||||
(
|
||||
"Kamień i skała!",
|
||||
"Kamień i skała nawieki!",
|
||||
"Kamień i skała do zgonu!",
|
||||
"Kamień i skała, nigdy nie jesteś samotny!",
|
||||
"Skała i kamień... Oj...",
|
||||
"Kamień i skała, jakby nie było jutra!"
|
||||
),
|
||||
),
|
||||
(
|
||||
r"(.*)",
|
||||
(
|
||||
"Opowiedz mi więcej.",
|
||||
"Przejdźmy do czegoś innego... Opowiedz mi trochę o swojej rodzinie",
|
||||
"Czy mógłbyś opowiedzieć mi więcej o tym?",
|
||||
"Dlaczego mówisz, że %1?",
|
||||
"Rozumiem.",
|
||||
"Naprawdę ciekawe.",
|
||||
"%1.",
|
||||
"Rozumiem. I co Ci to mówi?",
|
||||
"Jak to wpływa na Twoje samopoczucie?",
|
||||
"Jak się czujesz, gdy o tym mówisz?",
|
||||
),
|
||||
),
|
||||
(
|
||||
r"Ja lubię (.*)",
|
||||
(
|
||||
"Jak ważne dla Ciebie jest %1?",
|
||||
"Dlaczego lubisz %1?",
|
||||
"Co czujesz, gdy myślisz o %1?",
|
||||
),
|
||||
),
|
||||
(
|
||||
r"(.*) smutek(.*)",
|
||||
(
|
||||
"Czym jest smutek dla Ciebie?",
|
||||
"Jakie jest twoje najsmutniejsze wspomnienie?",
|
||||
"Jak często jesteś smutny?",
|
||||
),
|
||||
),
|
||||
(
|
||||
r"(.*) radość(.*)",
|
||||
(
|
||||
"Czym jest radość dla Ciebie?",
|
||||
"Jakie jest twoje najradośniejsze wspomnienie?",
|
||||
"Jak często jesteś radosny?",
|
||||
),
|
||||
),
|
||||
)
|
||||
|
||||
def eliza_chat():
|
||||
print("Psychoterapueta\n---------")
|
||||
print("Rozmawiaj z programem, używając języka polskiego, korzystaj z małych i wielkich liter, a także interpunkcji.\n Wpisz \"koniec\", aby zakończyć.")
|
||||
print("=" * 72)
|
||||
print("Dzień dobry. Jak się dzisiaj czujesz?")
|
||||
|
||||
eliza_chatbot.converse()
|
||||
|
||||
|
||||
|
||||
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="koniec"):
|
||||
user_input = ""
|
||||
while user_input != "koniec":
|
||||
user_input = "koniec"
|
||||
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))
|
||||
|
||||
|
||||
eliza_chatbot = Chat(pairs, reflections)
|
||||
eliza_chat()
|
Loading…
Reference in New Issue
Block a user