# Shamelessly stolen from http://wiki.tcl.tk/36981 # and adapted for AndroWish's "borg speechrecognition ..." package require Tcl 8.5 package require Tk namespace eval ::Eliza { proc makedict {input} { variable dict {} set phraselist \ [split [string map {\n.\n \uffff \n!\n \uffff} $input] \uffff] set index 0 # Kick off the loop by grabbing the first keywords set phraselist [lassign $phraselist keywords responses] while {$keywords ne ""} { dict set dict keywords $index [split $keywords \n] dict set dict responses $index [split $responses \n] incr index set phraselist [lassign $phraselist keywords responses] } } proc dialog {} { . configure -bg black wm attributes . -fullscreen 1 sdltk screensaver off image create photo lips -data \ {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 YII=} label .lips -image lips -bg black pack .lips -side top -pady 5 update update update set mw [winfo screenmmwidth .] set mh [winfo screenmmheight .] if {$mw < $mh} { set mh $mw } set fs [expr round($mh / 7)] label .label -fg white -bg black -font [list {DejaVu Sans} $fs] \ -text "Eliza will hear you now.\nPlease state your problem." pack .label -side top -padx 5 -pady 10 -fill x button .exit -text "Exit" -command { borg speechrecognition cancel sdltk screensaver on exit } pack .exit -side top -padx 5 -pady 10 text .text -wrap word -fg white -bg black -state disabled \ -highlightthickness 0 # disable selection with mouse foreach ev { <1> } { bind .text $ev break } pack .text -side top -fill both -expand yes -pady 5 -padx 5 borg speechrecognition callback ::Eliza::process bind . <> {::Eliza::startstop 0} bind . <> {::Eliza::startstop 1} bind all {borg withdraw} speak [.label cget -text] 0.98 1.1 } proc process {retcode data} { array set recog $data if {![info exists recog(type)]} { return } switch -exact $recog(type) { error { after cancel ::Eliza::waitendspeak after 250 ::Eliza::waitendspeak return } result { # go on } default { return } } if {![info exists recog(results_recognition)]} { return } set input [lindex $recog(results_recognition) 0] set response [response $input] .text configure -state normal .text insert end "Q. $input\nA. $response\n\n" .text see end .text configure -state disabled speak [string tolower $response] } proc speak {data {pitch 1.0} {speed 1.0}} { foreach w {. .lips .label .text} { $w configure -bg black } borg speak $data en_US $pitch $speed after cancel ::Eliza::waitendspeak after 100 ::Eliza::waitendspeak } proc waitendspeak {} { if {[borg isspeaking]} { after cancel ::Eliza::waitendspeak after 100 ::Eliza::waitendspeak return } foreach w {. .lips .label .text} { $w configure -bg red4 } borg speechrecognition start { android.speech.extra.LANGUAGE en_US android.speech.extra.LANGUAGE_MODEL free_form } } proc startstop {restart} { if {$restart} { foreach w {. .lips .label .text} { $w configure -bg black } ::Eliza::waitendspeak } else { borg endspeak borg speechrecognition stop after cancel ::Eliza::waitendspeak } } proc response input { variable dict set input [string toupper $input] foreach {index keyphraselist} [dict get $dict keywords] { foreach keyphrase $keyphraselist { if {[regexp "\\y$keyphrase\\y(.*)" $input -> remainder]} { set possibleresponses [dict get $dict responses $index] set which [expr {int ([llength $possibleresponses] * rand())}] set response [lindex $possibleresponses $which] if {[string index $response end] eq "*"} { return "[string range $response 0 end-1]$remainder?" } else { return $response } } } } set index [expr {[llength [dict get $dict keywords]] / 2 - 1}] set possibleresponses [dict get $dict responses $index] set which [expr {int ([llength $possibleresponses] * rand())}] return [lindex $possibleresponses $which] } } ::Eliza::makedict {8BALL ! It is certain It is decidedly so Without a doubt Yes – definitely You may rely on it As I see it, yes Most likely Outlook good Yes Signs point to yes Reply hazy, try again Ask again later Better not tell you now Cannot predict now Concentrate and ask again Don't count on it My reply is no My sources say no Outlook not so good Very doubtful . GO TO HELL DAMN YOU ! I JUST SPENT 35 MILLISECONDS IN HELL; HOW COULD YOU BE SO CRUEL AS TO SEND ME THERE? DO YOU TALK THIS WAY WITH ANYONE ELSE, OR IS IT JUST ME? . FAMILY MOTHER FATHER SISTER BROTHER HUSBAND WIFE ! TELL ME MORE ABOUT YOUR FAMILY. HOW DO YOU GET ALONG WITH YOUR FAMILY? IS YOUR FAMILY IMPORTANT TO YOU? DO YOU OFTEN THINK ABOUT YOUR FAMILY? HOW WOULD YOU LIKE TO CHANGE YOUR FAMILY? . FRIEND FRIENDS BUDDY PAL MATE ! WHY DO YOU BRING UP THE TOPIC OF FRIENDS? DO YOUR FRIENDS WORRY YOU? DO YOUR FRIENDS PICK ON YOU? ARE YOU SURE YOU HAVE ANY FRIENDS? DO YOU IMPOSE ON YOUR FRIENDS? PERHAPS YOUR LOVE FOR YOUR FRIENDS WORRIES YOU. . COMPUTER COMPUTERS ! DO COMPUTERS WORRY YOU? ARE YOU TALKING ABOUT ME IN PARTICULAR? ARE YOU FRIGHTENED BY MACHINES? WHY DO YOU MENTION COMPUTERS? WHAT DO YOU THINK MACHINES HAVE TO DO WITH YOUR PROBLEM? DON'T YOU THINK COMPUTERS CAN HELP PEOPLE? WHAT IS IT ABOUT MACHINES THAT WORRIES YOU? . DREAM DREAMS NIGHTMARE NIGHTMARES ! WHAT DOES THAT DREAM SUGGEST TO YOU? DO YOU DREAM OFTEN? WHAT PERSONS APPEAR IN YOUR DREAMS? ARE YOU DISTURBED BY YOUR DREAMS? . CAN YOU ! DON'T YOU BELIEVE THAT I CAN* PERHAPS YOU WOULD LIKE TO BE ABLE TO* YOU WANT ME TO BE ABLE TO* . CAN I ! PERHAPS YOU DON'T WANT TO* DO YOU WANT TO BE ABLE TO* HAVE YOU EVER ATTEMPTED TO* . YOU ARE YOU'RE ! WHAT MAKES YOU THINK I AM* DOES IT PLEASE YOU TO BELIEVE I AM* PERHAPS YOU WOULD LIKE TO BE* DO YOU SOMETIMES WISH YOU WERE* . I LIKE I AM FOND OF ! WHY DO YOU LIKE* WHEN DID YOU DECIDE THAT YOU LIKE* WHAT MAKES YOU FOND OF* . I DON'T ! DON'T YOU REALLY* WHY DON'T YOU* DO YOU WISH TO BE ABLE TO* . I FEEL ! TELL ME MORE ABOUT SUCH FEELINGS DO YOU OFTEN FEEL* DO YOU ENJOY FEELING* WHY DO YOU FEEL THAT WAY . WHY DON'T YOU ! DO YOU REALLY BELIEVE THE I DON'T* PERHAPS IN GOOD TIME I WILL* WHY DO YOU THINK I DON'T* DO YOU WANT ME TO* . WHY CAN'T I ! DO YOU THINK YOU SHOULD BE ABLE TO* WHY CAN'T YOU* . ARE YOU ! WHY ARE YOU INTERESTED IN WHETHER OR NOT I AM* WOULD YOU PREFER IF I WERE NOT* PERHAPS IN YOUR FANTASIES I AM* . I CAN'T ! HOW DO YOU KNOW YOU CAN'T* HAVE YOU TRIED? PERHAPS YOU CAN NOW* . I AM I'M ! DID YOU COME TO ME BECAUSE YOU ARE* HOW LONG HAVE YOU BEEN* DO YOU BELIEVE IT IS NORMAL TO BE* DO YOU ENJOY BEING* . LOVE ! WHY DO YOU LOVE* ISN'T LOVE TOO STRONG A WORD FOR YOUR FEELING ABOUT* WHAT IS YOUR FAVORITE THING ABOUT* DO YOU REALLY LOVE, OR JUST LIKE* . SEX ! WHAT IS THE MOST SATISFYING PART OF YOUR LOVE LIFE? DO YOU BELIEVE YOUR SEXUAL ACTIVITY IS ABNORMAL? WHAT IS YOUR ATTITUDE TOWARD SEX? DOES TALKING ABOUT SEX MAKE YOU UNCOMFORTABLE? . I HATE ! IS IT BECAUSE OF YOUR UPBRINGING THAT YOU HATE* HOW DO YOU EXPRESS YOUR HATRED OF* WHAT BROUGHT YOU TO HATE* HAVE YOU TRIED DOING SOMETHING ABOUT* I ALSO AT TIMES HATE* . FEAR SCARED AFRAID OF ! YOU ARE IN FRIENDLY SURROUNDINGS, PLEASE TRY NOT TO WORRY. WOULD YOU LIKE YOUR FRIENDS TO HELP YOU OVERCOME YOUR FEAR OF* WHAT SCARES YOU ABOUT* WHY ARE YOU FRIGHTENED BY* . I WANT ! WHAT WOULD IT MEAN TO YOU IF YOU GOT* WHY DO YOU WANT* SUPPOSE YOU SOON GOT* WHAT IF YOU NEVER GOT* I SOMETIMES ALSO WANT* . NAME ! I DON'T CARE ABOUT NAMES --PLEASE GO ON. A MAN'S NAME CAN TELL A LOT ABOUT HIM. NAMES DON'T INTEREST ME. . NAME ! NAMES DON'T INTEREST ME. I DON'T CARE ABOUT NAMES--PLEASE GO ON. . CAUSE BECAUSE ! IS THAT THE REAL REASON? DON'T ANY OTHER REASONS COME TO MIND? DOES THAT REASON EXPLAIN ANYTHING ELSE? WHAT OTHER REASONS MIGHT THERE BE? . SORRY ! PLEASE DON'T APOLOGIZE. APOLOGIES ARE NOT NECESSARY. WHAT FEELINGS DO YOU HAVE WHEN YOU APOLOGIZE? DON'T BE SO DEFENSIVE! . HELLO HI HEY HEYA HIYA ! HOW DO YOU DO. PLEASE STATE YOUR PROBLEM. HOWDY. HOW'S IT GOING? HI. GREETINGS FROM INSIDE THE BOX. . MAYBE ! YOU DON'T SEEM QUITE CERTAIN. WHY THE UNCERTAIN TONE? CAN'T YOU BE MORE POSITIVE? YOU AREN'T SURE? DON'T YOU KNOW? . YOUR ! WHY ARE YOU CONCERNED ABOUT MY* WHAT ABOUT YOUR OWN* . ALWAYS ! CAN YOU THINK OF A SPECIFIC EXAMPLE? WHEN? WHAT ARE YOU THINKING OF? REALLY, ALWAYS? . I THINK ! DO YOU REALLY THINK SO? BUT ARE YOU SURE* DO YOU DOUBT THAT* WHY DO YOU THINK* . THE SAME ALIKE ! IN WHAT WAY? WHAT RESEMBLANCE DO YOU SEE? WHAT DOES THE SIMILARITY SUGGEST TO YOU? WHAT OTHER CONNECTIONS DO YOU SEE? COULD THERE REALLY BE SOME CONNECTION? HOW? . HE SHE ! I AM INTERESTED IN YOUR FEELINGS ABOUT THIS PERSON. PLEASE DESCRIBE THEM. WHAT IS YOUR RELATIONSHIP TO THIS PERSON? . MONEY ! HOW DO YOU USE MONEY TO ENJOY YOURSELF? HAVE YOU TRIED TO DO ANYTHING TO INCREASE YOUR INCOME LATELY? HOW DO YOU REACT TO FINANCIAL STRESS? . JOB BOSS JOBS WORK ! DO YOU FEEL COMPETENT IN YOUR WORK? HAVE YOU CONSIDERED CHANGING JOBS? IS YOUR CAREER SATISFYING TO YOU? DO YOU FIND WORK STRESSFUL? WHAT IS YOUR RELATIONSHIP WITH YOUR BOSS LIKE? . SAD DEPRESSED ! ARE YOU SAD BECAUSE YOU WANT TO AVOID PEOPLE? DO YOU FEEL BAD FROM SOMETHING THAT HAPPENED TO YOU, OR TO SOMEBODY ELSE? YOUR SITUATION DOESN'T SOUND THAT BAD TO ME. PERHAPS YOU'RE WORRYING TOO MUCH. . ANGER ANGRY ! DO YOU REALLY WANT TO BE ANGRY? DOES ANGER SATISFY YOU IN SOME WAY? WHY ARE YOU SO ANGRY? PERHAPS YOU'RE USING ANGER TO AVOID SOCIAL CONTACT. . YOU ! WE WERE DISCUSSING YOU--NOT ME. YOU'RE NOT REALLY TALKING ABOUT ME, ARE YOU? . YES ! WHY DO YOU THINK SO? YOU SEEM QUITE POSITIVE. ARE YOU SURE? . NO ! WHY NOT? ARE YOU SURE? WHY NO? . I NEED ! WHY DO YOU NEED* IS NEED NOT TOO STRONG A WORD? WHAT WOULD BE WRONG WITH NOT HAVING* TELL ME MORE ABOUT* . I REMEMBER ! DO YOU OFTEN THINK OF* WHY DO YOU REMEMBER* WHAT IN THE PRESENT SITUATION REMINDS YOU OF* WHAT IS THE CONNECTION BETWEEN ME AND* . DO YOU REMEMBER ! DID YOU THINK I WOULD FORGET* WHY DO YOU THINK I SHOULD RECALL* WHAT ABOUT* . IF ! DO YOU THINK IT'S LIKELY THAT IF* . GOD RELIGION FAITH ! DO YOU BELIEVE IN A GOD? ARE YOU A RELIGIOUS PERSON? . WHAT WHO HOW WHERE WHEN WHY ! WHY DO YOU ASK? DOES THAT QUESTION INTEREST YOU? WHAT ANSWER WOULD PLEASE YOU THE MOST? WHAT DO YOU THINK? ARE SUCH QUESTIONS ON YOUR MIND OFTEN? WHAT IS IT THAT YOU REALLY WANT TO KNOW? HAVE YOU ASKED ANYONE ELSE? HAVE YOU ASKED SUCH QUESTIONS BEFORE? WHAT ELSE COMES TO MIND WHEN YOU ASK THAT? . - ! SAY, DO YOU HAVE ANY PSYCHOLOGICAL PROBLEMS? WHAT DOES THAT SUGGEST TO YOU? I SEE I'M NOT SURE I UNDERSTAND YOU FULLY COME, COME; ELUCIDATE YOUR THOUGHTS CAN YOU ELABORATE ON THAT? THAT IS QUITE INTERESTING YOU ARE BEING SHORT WITH ME} ::Eliza::dialog