README.md 2.6 KB

Eliza-Go

Author: Gary Leeson based on the work of Matthew Shiel at https://github.com/mattshiel/eliza-go

How to Run The Chatbot

Assumes that Git and Go are installed along with the prerequisites. If not, they can be found from https://golang.org/dl/ and https://git-scm.com/downloads

1. Clone the Repository

> git clone https://git.riomhaire.com/gremlin/elizaservice.git

2. Change Directory to the Folder

Open the terminal/command line and navigate into the folder 
eg. > cd elizaservice

2. Compile the Chatbot

> make

3. Run the Chatbot

To run the chatbot enter './' followed by the executable produced
For Mac/Linux:
> ./eliza-server

Alternatively:
> go run server.go

4. Open the localhost

Go to your browser and type:
> 127.0.0.1:8080

Design Components

The primary design components that went into this project were as follows, a web server to serve a HTML as the root, Javascript to get the user input with ajax and finally all functionality and responses are contained in the eliza package.

Problems and Features

To give Eliza the impression she was thinking Matthew implemented a delay to her responses, adding to this the delay will also randomise between 0.6 and 4 seconds per response.

Eliza crafts her responses by examining the user's text input for a keyword. When the keyword is found it goes through a pre-processing procedure. This includes things like transforming all letters to lower case and trimming unnecessary whitespace. After this the word is tested against keywords in the 'responses.go' file. If a regex group is matched, the program gets the first match, the matched group then makes up a fraction of the response for added realism. If Eliza does not find a match then there are a number of fallback default response she will chose from. All responses are chosen randomly.

A problem Matthew encountered with this method is that selecting answers from the map of responses may be slightly non-deterministic, and the map will be out of order. In Weizenbaum's original design of Eliza he used a method of decomposition where all keywords held a certain value or 'precedence number'. This weighted approach is definitely another approach I could have taken when designing my program and something I might change in the future.

References

This implementation of Eliza gave Matthew many ideas and provided Matthew with the main method of implementing Matthew Eliza functionality https://github.com/kennysong/goeliza

I consulted both the the Golang, Bootstrap and JQuery documentation frequently over the course of my assignment.