2023-03-16 15:59:40 +01:00
import random
import re
2023-03-17 12:57:44 +01:00
#test
2023-03-12 12:40:07 +01:00
2023-03-16 15:59:40 +01:00
reflections = {
" ja jestem " : " ty jesteś " ,
2023-03-17 12:01:28 +01:00
" jestem " : " jesteś " ,
2023-03-16 15:59:40 +01:00
" ja byłem " : " ty byłeś " ,
2023-03-17 12:01:28 +01:00
" byłem " : " byłeś " ,
2023-03-16 15:59:40 +01:00
" ja byłam " : " ty byłaś " ,
2023-03-17 12:01:28 +01:00
" byłam " : " byłaś " ,
2023-03-16 15:59:40 +01:00
" ja " : " ty " ,
" ja będę " : " ty będziesz " ,
2023-03-17 12:01:28 +01:00
" będę " : " będziesz " ,
2023-03-16 15:59:40 +01:00
" mój " : " twój " ,
" moja " : " twoja " ,
" mi " : " ci " ,
" mnie " : " tobie " ,
2023-03-17 12:01:28 +01:00
" tobie " : " mnie " ,
2023-03-16 15:59:40 +01:00
" ty jesteś " : " ja jestem " ,
2023-03-17 12:01:28 +01:00
" jesteś " : " jestem " ,
2023-03-16 15:59:40 +01:00
" ty byłeś " : " ja byłem " ,
2023-03-17 12:01:28 +01:00
" byłeś " : " byłem " ,
2023-03-16 15:59:40 +01:00
" ty byłaś " : " ja byłam " ,
2023-03-17 12:01:28 +01:00
" byłaś " : " byłam " ,
2023-03-16 15:59:40 +01:00
" ty " : " ja " ,
" ty będziesz " : " ja będę " ,
2023-03-17 12:01:28 +01:00
" będziesz " : " będę " ,
2023-03-16 15:59:40 +01:00
" twój " : " mój " ,
" twoja " : " moja "
}
2023-03-12 12:40:07 +01:00
pairs = (
(
2023-03-12 13:18:22 +01:00
r " Potrzebuję (.*) " ,
2023-03-12 12:40:07 +01:00
(
2023-03-12 13:18:22 +01:00
" Dlaczego potrzebujesz % 1? " ,
" Czy naprawdę pomoże Ci posiadanie % 1? " ,
" Jesteś pewny, że potrzebujesz % 1? " ,
2023-03-12 12:40:07 +01:00
) ,
) ,
(
2023-03-12 13:18:22 +01:00
r " Dlaczego by nie (.*) " ,
2023-03-12 12:40:07 +01:00
(
2023-03-12 13:18:22 +01:00
" Naprawdę uważasz, dlaczego by nie % 1? " ,
" Możliwe, że w końcu % 1. " ,
" Naprawdę chcesz abym % 1? " ,
2023-03-12 12:40:07 +01:00
) ,
) ,
(
2023-03-12 13:18:22 +01:00
r " Dlaczego nie mogę (.*) " ,
2023-03-12 12:40:07 +01:00
(
2023-03-12 13:18:22 +01:00
" 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ś? " ,
2023-03-12 12:40:07 +01:00
) ,
) ,
(
2023-03-12 13:18:22 +01:00
r " Nie mogę (.*) " ,
2023-03-12 12:40:07 +01:00
(
2023-03-12 13:18:22 +01:00
" 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? " ,
2023-03-12 12:40:07 +01:00
) ,
) ,
(
2023-03-12 13:18:22 +01:00
r " Jestem (.*) " ,
2023-03-12 12:40:07 +01:00
(
2023-03-12 13:18:22 +01:00
" Czy przyszedłeś do mnie, bo jesteś % 1? " ,
" Jak długo byłeś % 1? " ,
" Jak się czujesz będąc % 1? " ,
2023-03-12 12:40:07 +01:00
) ,
) ,
(
2023-03-12 13:18:22 +01:00
r " Jest mi (.*) " ,
2023-03-12 12:40:07 +01:00
(
2023-03-12 13:18:22 +01:00
" 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? " ,
2023-03-12 12:40:07 +01:00
) ,
) ,
(
2023-03-12 13:18:22 +01:00
r " Czy jesteś (.*) " ,
2023-03-12 12:40:07 +01:00
(
2023-03-12 13:18:22 +01:00
" 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? " ,
2023-03-12 12:40:07 +01:00
) ,
) ,
(
2023-03-12 13:18:22 +01:00
r " Co (.*) " ,
2023-03-12 12:40:07 +01:00
(
2023-03-12 13:18:22 +01:00
" Dlaczego pytasz? " ,
" W jaki sposób odpowiedź na to pomoże? " ,
" Co o tym myślisz? " ,
2023-03-12 12:40:07 +01:00
) ,
) ,
(
2023-03-12 13:18:22 +01:00
r " Jak (.*) " ,
2023-03-12 12:40:07 +01:00
(
2023-03-12 13:18:22 +01:00
" Jak myślisz? " ,
" Być może sam możesz odpowiedzieć sobie na to pytanie. " ,
" O co tak naprawdę pytasz? " ,
2023-03-12 12:40:07 +01:00
) ,
) ,
(
2023-03-12 13:18:22 +01:00
r " Ponieważ (.*) " ,
2023-03-12 12:40:07 +01:00
(
2023-03-12 13:18:22 +01:00
" 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ą? " ,
2023-03-12 12:40:07 +01:00
) ,
) ,
(
2023-03-16 20:24:53 +01:00
r " (.*) przepraszam (.*) " ,
2023-03-12 12:40:07 +01:00
(
2023-03-16 20:24:53 +01:00
" W wielu przypadkach nie trzeba przepraszać " ,
" Co czujesz kiedy przepraszasz? " ,
2023-03-12 12:40:07 +01:00
) ,
) ,
(
2023-03-16 20:24:53 +01:00
r " Cześć(.*) " ,
2023-03-12 12:40:07 +01:00
(
2023-03-16 20:24:53 +01:00
" Cześć... Miło że wpadłeś dzisiaj " ,
" Witaj... Jak się czujesz dzisiaj? " ,
" Cześć, jak dziś się czujesz? " ,
2023-03-12 12:40:07 +01:00
) ,
) ,
(
2023-03-16 20:24:53 +01:00
r " Myślę, że (.*) " ,
( " Czy wątpisz, że % 1? " , " Naprawdę tak myślisz? " , " Ale nie jesteś pewien, że % 1? " ) ,
2023-03-12 12:40:07 +01:00
) ,
(
2023-03-16 20:24:53 +01:00
r " (.*) przyjaciel (.*) " ,
2023-03-12 12:40:07 +01:00
(
2023-03-16 20:24:53 +01:00
" 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? " ,
2023-03-12 12:40:07 +01:00
) ,
) ,
2023-03-16 20:24:53 +01:00
( r " Tak " , ( " Zdaje się, że jesteś pewien tego o czym mówisz. " , " Ok, mógłyś o tym opowiedzieć trochę więcej? " ) ) ,
2023-03-12 12:40:07 +01:00
(
2023-03-16 20:24:53 +01:00
r " (.*) komputer(.*) " ,
2023-03-12 12:40:07 +01:00
(
2023-03-16 20:24:53 +01:00
" 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? " ,
2023-03-12 12:40:07 +01:00
) ,
) ,
(
2023-03-16 20:24:53 +01:00
r " To jest (.*) " ,
2023-03-12 12:40:07 +01:00
(
2023-03-16 20:24:53 +01:00
" 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. " ,
2023-03-12 12:40:07 +01:00
) ,
) ,
(
2023-03-16 20:24:53 +01:00
r " To jest (.*) " ,
2023-03-12 12:40:07 +01:00
(
2023-03-16 20:24:53 +01:00
" Sprawiasz wrażenie, że wiesz o czym mówisz " ,
" Gdybym stwierdziła, że wcale tak nie jest % 1, jakbyś się poczuł/poczuła? " ,
2023-03-12 12:40:07 +01:00
) ,
) ,
(
2023-03-16 20:24:53 +01:00
r " (Czy możesz|Mogłabyś) (.*) " ,
2023-03-12 12:40:07 +01:00
(
2023-03-16 20:24:53 +01:00
" Dlaczego myślisz, że nie mogę % 1? " ,
" Gdybym mogła % 1, to co wtedy? " ,
" Dlaczego się pytasz, czy mogę % 1? " ,
2023-03-12 12:40:07 +01:00
) ,
) ,
(
2023-03-16 20:24:53 +01:00
r " Muszę (.*) " ,
2023-03-12 12:40:07 +01:00
(
2023-03-16 20:24:53 +01:00
" 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? " ,
2023-03-12 12:40:07 +01:00
) ,
2023-03-16 03:16:06 +01:00
) ,
2023-03-12 12:40:07 +01:00
(
2023-03-16 03:14:00 +01:00
r " Ty jesteś (.*) " ,
2023-03-12 12:40:07 +01:00
(
2023-03-16 03:14:00 +01:00
" 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? " ,
2023-03-12 12:40:07 +01:00
) ,
) ,
(
2023-03-16 03:14:00 +01:00
r " Jesteś (.*) " ,
2023-03-12 12:40:07 +01:00
(
2023-03-16 03:14:00 +01:00
" Dlaczego mówisz, że jestem % 1? " ,
" Jak myślisz, dlaczego jestem % 1? " ,
" Mówimy o tobie, czy o mnie? " ,
2023-03-12 12:40:07 +01:00
) ,
) ,
(
2023-03-16 03:14:00 +01:00
r " Ja nie (.*) " ,
( " Czy naprawdę nie % 1? " , " Dlaczego nie % 1? " , " Czy chcesz % 1? " ) ,
2023-03-12 12:40:07 +01:00
) ,
(
2023-03-16 03:14:00 +01:00
r " Czuję (.*) " ,
2023-03-12 12:40:07 +01:00
(
2023-03-16 03:14:00 +01:00
" Dobrze, opowiedz mi więcej o tych uczuciach. " ,
" Jak często czujesz % 1? " ,
" Kiedy zwykle czujesz % 1? " ,
" Kiedy czujesz % 1, co robisz? " ,
2023-03-12 12:40:07 +01:00
) ,
) ,
(
2023-03-16 03:14:00 +01:00
r " Mam (.*) " ,
2023-03-12 12:40:07 +01:00
(
2023-03-16 03:14:00 +01:00
" Dlaczego mi mówisz, że masz % 1? " ,
" Czy naprawdę % 1? " ,
" Teraz, gdy masz % 1, co zamierzasz zrobić dalej? " ,
2023-03-12 12:40:07 +01:00
) ,
) ,
(
2023-03-16 03:14:00 +01:00
r " Ja bym (.*) " ,
2023-03-12 12:40:07 +01:00
(
2023-03-16 03:14:00 +01:00
" Czy mógłbyś wyjaśnić dlaczego miałbyś % 1? " ,
" Dlaczego miałbyś % 1? " ,
" Kto inny wie, że byś % 1? " ,
2023-03-12 12:40:07 +01:00
) ,
) ,
(
2023-03-16 03:14:00 +01:00
r " Istnieje (.*) " ,
2023-03-12 12:40:07 +01:00
(
2023-03-16 03:14:00 +01:00
" Czy myślisz, że istnieje % 1? " ,
" Jest to prawdopodobne, że istnieje % 1. " ,
" Chciałbyś żeby w tym miejscu istniało % 1? " ,
2023-03-12 12:40:07 +01:00
) ,
) ,
(
2023-03-16 03:14:00 +01:00
r " Mój (.*) " ,
2023-03-12 12:40:07 +01:00
(
2023-03-16 03:14:00 +01:00
" Widzę, twój % 1. " ,
" Dlaczego twierdzisz, że twój % 1? " ,
" Kiedy twój % 1, jak się czujesz? " ,
2023-03-12 12:40:07 +01:00
) ,
) ,
(
2023-03-16 03:14:00 +01:00
r " Ty (.*) " ,
2023-03-12 12:40:07 +01:00
(
2023-03-16 03:14:00 +01:00
" Powinniśmy rozmawiać o tobie, nie o mnie. " ,
" Dlaczego tak o mnie mówisz? " ,
" Co Cię obchodzi, czy ja % 1? " ,
2023-03-12 12:40:07 +01:00
) ,
) ,
2023-03-16 03:14:00 +01:00
( r " Dlaczego (.*) " , ( " Dlaczego nie podasz mi powodu, dla którego % 1? " , " Dlaczego myślisz że % 1? " ) ) ,
2023-03-12 13:55:46 +01:00
2023-03-12 12:40:07 +01:00
(
2023-03-12 13:55:46 +01:00
r " Ja chcę (.*) " ,
2023-03-12 12:40:07 +01:00
(
2023-03-12 13:55:46 +01:00
" Jak ważne dla Ciebie jest % 1? " ,
" Dlaczego chcesz % 1? " ,
2023-03-12 14:42:46 +01:00
" Co zrobiłbyś, gdybyś dostał % 1? " ,
2023-03-12 13:55:46 +01:00
" Jeśli dostałbyś % 1, co byś zrobił? " ,
2023-03-12 12:40:07 +01:00
) ,
) ,
(
2023-03-16 20:24:53 +01:00
r " (.*) (ma(m|tk)a|stara)(.*) " ,
2023-03-12 12:40:07 +01:00
(
2023-03-12 14:42:46 +01:00
" 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 " ,
2023-03-12 12:40:07 +01:00
) ,
) ,
(
2023-03-16 20:24:53 +01:00
r " (.*) (tata|ojciec|stary)(.*) " ,
2023-03-12 12:40:07 +01:00
(
2023-03-12 14:42:46 +01:00
" 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? " ,
2023-03-12 12:40:07 +01:00
) ,
) ,
(
2023-03-12 14:42:46 +01:00
r " (.*) dziecko(.*) " ,
2023-03-12 12:40:07 +01:00
(
2023-03-12 14:42:46 +01:00
" 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? " ,
2023-03-12 12:40:07 +01:00
) ,
) ,
(
r " (.*) \ ? " ,
(
2023-03-12 14:42:46 +01:00
" 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? " ,
2023-03-12 12:40:07 +01:00
) ,
) ,
(
2023-03-12 14:42:46 +01:00
r " koniec " ,
2023-03-12 12:40:07 +01:00
(
2023-03-12 14:42:46 +01:00
" Dziękuję za rozmowę. " ,
" Do widzenia " ,
" To będzie 150zł. Miłego dnia! " ,
2023-03-12 12:40:07 +01:00
) ,
) ,
2023-03-16 20:24:53 +01:00
(
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! "
) ,
) ,
2023-03-12 12:40:07 +01:00
(
r " (.*) " ,
(
2023-03-12 14:42:46 +01:00
" 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. " ,
2023-03-12 12:40:07 +01:00
" % 1. " ,
2023-03-12 14:42:46 +01:00
" 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? " ,
2023-03-12 12:40:07 +01:00
) ,
) ,
)
def eliza_chat ( ) :
2023-03-12 14:42:46 +01:00
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ć. " )
2023-03-12 12:40:07 +01:00
print ( " = " * 72 )
2023-03-12 14:42:46 +01:00
print ( " Dzień dobry. Jak się dzisiaj czujesz? " )
2023-03-12 12:40:07 +01:00
eliza_chatbot . converse ( )
2023-03-16 15:59:40 +01:00
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 ( )
)
2023-03-12 12:40:07 +01:00
2023-03-16 15:59:40 +01:00
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
2023-03-12 12:40:07 +01:00
2023-03-16 15:59:40 +01:00
def respond ( self , str ) :
2023-03-12 12:40:07 +01:00
2023-03-16 15:59:40 +01:00
# 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 ( )