Running Example: A Psychotherapist Server Our running example for this and the next two chapters uses the Chatbot::Eliza module, John Nolan's marvelous pure-Perl clone of Joseph Weizenbaum's classic psychotherapist simulation. Chatbot::Eliza works very simply. It accepts a line of input from the user, transforms it according to a clever set of transformational rules, and echoes it back to the user in the form of a question. The effect is a lot like talking to a particularly robotlike Freudian psychoanalyst. The Chatbot::Eliza module is available on CPAN. It is simple to use. You load it, create a new Chatbot::Eliza object with the new() method, and then invoke the object's command_interface() method. This method conducts a conversation with the user, reading from standard input and writing to standard output. The lines of code in Figure 10.2 are all that are needed to run a psychotherapist session. Figure 10.2. Command-line Eliza program Lines 1 “2: Load modules We load the Chatbot::Eliza module. Line 3: Turn on autoflush We turn on autoflush mode for STDOUT so that, rather than be buffered, data is output immediately with each call to print() . Although this isn't necessary for the command-line version of the program, it is necessary for the server version. Line 4: Create a new Chatbot::Eliza object We call Chatbot::Eliza->new() to create a new object named $bot . Line 5: Enter Chatbot object's IO loop We now call the Chatbot object's command_interface() method. This starts a simple I/O loop, which prints out a prompt, accepts user input, transforms the input into a statement from the " psychiatrist ," and then repeats. Here's a transcript of a conversation with Eliza (yours will vary): % eliza.pl Eliza: Hello, I am a computer program. you: I am a human being. Eliza: How long have you been a human being? you: About 39 years. Eliza: That is interesting. Please continue. you: It started when I was born... Eliza: Why do you tell me you were born now? you: Because you asked. Eliza: We were discussing you -- not me. you: bye Eliza: Goodbye. It was nice talking to you. The psychotherapist application calls for a connection-oriented interface because the interaction between client and server is long-lived and because there is state associated with each connection. The Chatbot::Eliza object keeps track of the history of the conversation in order to construct its utterances based on the user's previous statements. |