244 lines
7 KiB
Python
244 lines
7 KiB
Python
# Natural Language Toolkit: Eliza
|
|
#
|
|
# Copyright (C) 2001-2018 NLTK Project
|
|
# Authors: Steven Bird <stevenbird1@gmail.com>
|
|
# Edward Loper <edloper@gmail.com>
|
|
# URL: <http://nltk.org/>
|
|
# For license information, see LICENSE.TXT
|
|
|
|
# Based on an Eliza implementation by Joe Strout <joe@strout.net>,
|
|
# Jeff Epler <jepler@inetnebr.com> and Jez Higgins <mailto:jez@jezuk.co.uk>.
|
|
|
|
# a translation table used to convert things you say into things the
|
|
# computer says back, e.g. "I am" --> "you are"
|
|
|
|
from __future__ import print_function
|
|
from nltk.chat.util import Chat, reflections
|
|
|
|
# a table of response pairs, where each pair consists of a
|
|
# regular expression, and a list of possible responses,
|
|
# with group-macros labelled as %1, %2.
|
|
|
|
pairs = (
|
|
(r'I need (.*)',
|
|
( "Why do you need %1?",
|
|
"Would it really help you to get %1?",
|
|
"Are you sure you need %1?")),
|
|
|
|
(r'Why don\'t you (.*)',
|
|
( "Do you really think I don't %1?",
|
|
"Perhaps eventually I will %1.",
|
|
"Do you really want me to %1?")),
|
|
|
|
(r'Why can\'t I (.*)',
|
|
( "Do you think you should be able to %1?",
|
|
"If you could %1, what would you do?",
|
|
"I don't know -- why can't you %1?",
|
|
"Have you really tried?")),
|
|
|
|
(r'I can\'t (.*)',
|
|
( "How do you know you can't %1?",
|
|
"Perhaps you could %1 if you tried.",
|
|
"What would it take for you to %1?")),
|
|
|
|
(r'I am (.*)',
|
|
( "Did you come to me because you are %1?",
|
|
"How long have you been %1?",
|
|
"How do you feel about being %1?")),
|
|
|
|
(r'I\'m (.*)',
|
|
( "How does being %1 make you feel?",
|
|
"Do you enjoy being %1?",
|
|
"Why do you tell me you're %1?",
|
|
"Why do you think you're %1?")),
|
|
|
|
(r'Are you (.*)',
|
|
( "Why does it matter whether I am %1?",
|
|
"Would you prefer it if I were not %1?",
|
|
"Perhaps you believe I am %1.",
|
|
"I may be %1 -- what do you think?")),
|
|
|
|
(r'What (.*)',
|
|
( "Why do you ask?",
|
|
"How would an answer to that help you?",
|
|
"What do you think?")),
|
|
|
|
(r'How (.*)',
|
|
( "How do you suppose?",
|
|
"Perhaps you can answer your own question.",
|
|
"What is it you're really asking?")),
|
|
|
|
(r'Because (.*)',
|
|
( "Is that the real reason?",
|
|
"What other reasons come to mind?",
|
|
"Does that reason apply to anything else?",
|
|
"If %1, what else must be true?")),
|
|
|
|
(r'(.*) sorry (.*)',
|
|
( "There are many times when no apology is needed.",
|
|
"What feelings do you have when you apologize?")),
|
|
|
|
(r'Hello(.*)',
|
|
( "Hello... I'm glad you could drop by today.",
|
|
"Hi there... how are you today?",
|
|
"Hello, how are you feeling today?")),
|
|
|
|
(r'I think (.*)',
|
|
( "Do you doubt %1?",
|
|
"Do you really think so?",
|
|
"But you're not sure %1?")),
|
|
|
|
(r'(.*) friend (.*)',
|
|
( "Tell me more about your friends.",
|
|
"When you think of a friend, what comes to mind?",
|
|
"Why don't you tell me about a childhood friend?")),
|
|
|
|
(r'Yes',
|
|
( "You seem quite sure.",
|
|
"OK, but can you elaborate a bit?")),
|
|
|
|
(r'(.*) computer(.*)',
|
|
( "Are you really talking about me?",
|
|
"Does it seem strange to talk to a computer?",
|
|
"How do computers make you feel?",
|
|
"Do you feel threatened by computers?")),
|
|
|
|
(r'Is it (.*)',
|
|
( "Do you think it is %1?",
|
|
"Perhaps it's %1 -- what do you think?",
|
|
"If it were %1, what would you do?",
|
|
"It could well be that %1.")),
|
|
|
|
(r'It is (.*)',
|
|
( "You seem very certain.",
|
|
"If I told you that it probably isn't %1, what would you feel?")),
|
|
|
|
(r'Can you (.*)',
|
|
( "What makes you think I can't %1?",
|
|
"If I could %1, then what?",
|
|
"Why do you ask if I can %1?")),
|
|
|
|
(r'Can I (.*)',
|
|
( "Perhaps you don't want to %1.",
|
|
"Do you want to be able to %1?",
|
|
"If you could %1, would you?")),
|
|
|
|
(r'You are (.*)',
|
|
( "Why do you think I am %1?",
|
|
"Does it please you to think that I'm %1?",
|
|
"Perhaps you would like me to be %1.",
|
|
"Perhaps you're really talking about yourself?")),
|
|
|
|
(r'You\'re (.*)',
|
|
( "Why do you say I am %1?",
|
|
"Why do you think I am %1?",
|
|
"Are we talking about you, or me?")),
|
|
|
|
(r'I don\'t (.*)',
|
|
( "Don't you really %1?",
|
|
"Why don't you %1?",
|
|
"Do you want to %1?")),
|
|
|
|
(r'I feel (.*)',
|
|
( "Good, tell me more about these feelings.",
|
|
"Do you often feel %1?",
|
|
"When do you usually feel %1?",
|
|
"When you feel %1, what do you do?")),
|
|
|
|
(r'I have (.*)',
|
|
( "Why do you tell me that you've %1?",
|
|
"Have you really %1?",
|
|
"Now that you have %1, what will you do next?")),
|
|
|
|
(r'I would (.*)',
|
|
( "Could you explain why you would %1?",
|
|
"Why would you %1?",
|
|
"Who else knows that you would %1?")),
|
|
|
|
(r'Is there (.*)',
|
|
( "Do you think there is %1?",
|
|
"It's likely that there is %1.",
|
|
"Would you like there to be %1?")),
|
|
|
|
(r'My (.*)',
|
|
( "I see, your %1.",
|
|
"Why do you say that your %1?",
|
|
"When your %1, how do you feel?")),
|
|
|
|
(r'You (.*)',
|
|
( "We should be discussing you, not me.",
|
|
"Why do you say that about me?",
|
|
"Why do you care whether I %1?")),
|
|
|
|
(r'Why (.*)',
|
|
( "Why don't you tell me the reason why %1?",
|
|
"Why do you think %1?" )),
|
|
|
|
(r'I want (.*)',
|
|
( "What would it mean to you if you got %1?",
|
|
"Why do you want %1?",
|
|
"What would you do if you got %1?",
|
|
"If you got %1, then what would you do?")),
|
|
|
|
(r'(.*) mother(.*)',
|
|
( "Tell me more about your mother.",
|
|
"What was your relationship with your mother like?",
|
|
"How do you feel about your mother?",
|
|
"How does this relate to your feelings today?",
|
|
"Good family relations are important.")),
|
|
|
|
(r'(.*) father(.*)',
|
|
( "Tell me more about your father.",
|
|
"How did your father make you feel?",
|
|
"How do you feel about your father?",
|
|
"Does your relationship with your father relate to your feelings today?",
|
|
"Do you have trouble showing affection with your family?")),
|
|
|
|
(r'(.*) child(.*)',
|
|
( "Did you have close friends as a child?",
|
|
"What is your favorite childhood memory?",
|
|
"Do you remember any dreams or nightmares from childhood?",
|
|
"Did the other children sometimes tease you?",
|
|
"How do you think your childhood experiences relate to your feelings today?")),
|
|
|
|
(r'(.*)\?',
|
|
( "Why do you ask that?",
|
|
"Please consider whether you can answer your own question.",
|
|
"Perhaps the answer lies within yourself?",
|
|
"Why don't you tell me?")),
|
|
|
|
(r'quit',
|
|
( "Thank you for talking with me.",
|
|
"Good-bye.",
|
|
"Thank you, that will be $150. Have a good day!")),
|
|
|
|
(r'(.*)',
|
|
( "Please tell me more.",
|
|
"Let's change focus a bit... Tell me about your family.",
|
|
"Can you elaborate on that?",
|
|
"Why do you say that %1?",
|
|
"I see.",
|
|
"Very interesting.",
|
|
"%1.",
|
|
"I see. And what does that tell you?",
|
|
"How does that make you feel?",
|
|
"How do you feel when you say that?"))
|
|
)
|
|
|
|
eliza_chatbot = Chat(pairs, reflections)
|
|
|
|
def eliza_chat():
|
|
print("Therapist\n---------")
|
|
print("Talk to the program by typing in plain English, using normal upper-")
|
|
print('and lower-case letters and punctuation. Enter "quit" when done.')
|
|
print('='*72)
|
|
print("Hello. How are you feeling today?")
|
|
|
|
eliza_chatbot.converse()
|
|
|
|
def demo():
|
|
eliza_chat()
|
|
|
|
if __name__ == "__main__":
|
|
demo()
|
|
|