123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339 |
- # Natural Language Toolkit: Eliza
- #
- # Copyright (C) 2001-2019 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()
|