{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import yaml" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[{'pattern': '?X hello ?Y',\n", " 'responses': ['how do you do. please state your problem']},\n", " {'pattern': '?X computer ?Y',\n", " 'responses': ['do computers worry you',\n", " 'what do you think about machines',\n", " 'why do you mention computers',\n", " 'what do you think machines have to do with your problem']},\n", " {'pattern': '?X name ?Y', 'responses': ['i am not interested in names']},\n", " {'pattern': '?X sorry ?Y',\n", " 'responses': [\"please don't apologize\",\n", " 'apologies are not necessary',\n", " 'what feelings do you have when you apologize']},\n", " {'pattern': '?X i remember ?Y',\n", " 'responses': ['do you often think of ?Y',\n", " 'does thinking of ?Y bring anything else to mind',\n", " 'what else do you remember?',\n", " 'why do you recall ?Y right now',\n", " 'what in this present situation reminds you of ?Y',\n", " 'what is the connection between me and ?Y']},\n", " {'pattern': '?X do you remember ?Y',\n", " 'responses': ['did you think i would forget ?Y',\n", " 'why do you think i should recall ?Y',\n", " 'what about ?Y',\n", " 'you mentioned ?Y']},\n", " {'pattern': '?X if ?Y',\n", " 'responses': ['do you really think it is likely that ?Y',\n", " 'do you wish that ?Y',\n", " 'what do you think about ?Y',\n", " 'really -- if ?Y']},\n", " {'pattern': '?X i dreamt ?Y',\n", " 'responses': ['really -- ?Y',\n", " 'have you ever fantasized ?Y while you were awake',\n", " 'have you dreamt ?Y before']},\n", " {'pattern': '?X i dreamed ?Y',\n", " 'responses': ['really -- ?Y',\n", " 'have you ever fantasized ?Y while you were awake',\n", " 'have you dreamed ?Y before']},\n", " {'pattern': '?X dream ?Y',\n", " 'responses': ['what does this dream suggest to you',\n", " 'do you dream often',\n", " 'what persons appear in your dreams',\n", " \"don't you believe that dream has to do with your problem\"]},\n", " {'pattern': '?X my mother ?Y',\n", " 'responses': ['who else is in your family ?Y',\n", " 'tell me more about your family']},\n", " {'pattern': '?X my father ?Y',\n", " 'responses': ['your father',\n", " 'does he influence you strongly',\n", " 'what else comes to mind when you think of your father']},\n", " {'pattern': '?X i want ?Y',\n", " 'responses': ['what would it mean if you got ?Y',\n", " 'why do you want ?Y',\n", " 'suppose you got ?Y soon']},\n", " {'pattern': '?X i am glad ?Y',\n", " 'responses': ['how have i helped you to be ?Y',\n", " 'what makes you happy just now',\n", " 'can you explain why you are suddenly ?Y']},\n", " {'pattern': '?X i am happy ?Y',\n", " 'responses': ['how have i helped you to be ?Y',\n", " 'what makes you glad just now',\n", " 'can you explain why you are suddenly ?Y']},\n", " {'pattern': '?X i am sad ?Y',\n", " 'responses': ['i am sorry to hear you are depressed',\n", " \"i'm sure it's not pleasant to be sad\"]},\n", " {'pattern': '?X i am unhappy ?Y',\n", " 'responses': ['i am sorry to hear you are depressed',\n", " \"i'm sure it's not pleasant to be unhappy\"]},\n", " {'pattern': '?X are like ?Y',\n", " 'responses': ['what resemblence do you see between ?X and ?Y']},\n", " {'pattern': '?X is like ?Y',\n", " 'responses': ['in what way is it that ?X is like ?Y',\n", " 'what resemblence do you see',\n", " 'could there really be some connection',\n", " 'how']},\n", " {'pattern': '?X alike ?Y',\n", " 'responses': ['in what way', 'what similarities are there']},\n", " {'pattern': '?X same ?Y', 'responses': ['what other connections do you see']},\n", " {'pattern': '?X i was ?Y',\n", " 'responses': ['were you really',\n", " 'perhaps i already knew you were ?Y',\n", " 'why do you tell me you were ?Y now']},\n", " {'pattern': '?X was i ?Y',\n", " 'responses': ['what if you were ?Y',\n", " 'do you think you were ?Y',\n", " 'what would it mean if you were ?Y']},\n", " {'pattern': '?X i am ?Y',\n", " 'responses': ['in what way are you ?Y', 'do you want to be ?Y']},\n", " {'pattern': '?X am i ?Y',\n", " 'responses': ['do you believe you are ?Y',\n", " 'would you want to be ?Y',\n", " 'you wish i would tell you you are ?Y',\n", " 'what would it mean if you were ?Y']},\n", " {'pattern': '?X am ?Y',\n", " 'responses': ['why do you say \"am\"', \"i don't understand that\"]},\n", " {'pattern': '?X are you ?Y',\n", " 'responses': ['why are you interested in whether i am ?Y or not',\n", " \"would you prefer it if i weren't ?Y\",\n", " 'perhaps i am ?Y in your fantasies']},\n", " {'pattern': '?X you are ?Y', 'responses': ['what makes you think i am ?Y']},\n", " {'pattern': '?X because ?Y',\n", " 'responses': ['is that the real reason',\n", " 'what other reason might there be',\n", " 'does that reason seem to explain anything else']},\n", " {'pattern': '?X were you ?Y',\n", " 'responses': ['perhaps i was ?Y',\n", " 'what do you think',\n", " 'what if i had been ?Y']},\n", " {'pattern': \"?X i can't ?Y\",\n", " 'responses': ['maybe you could ?Y now', 'what if you could ?Y']},\n", " {'pattern': '?X i feel ?Y', 'responses': ['do you often feel ?Y']},\n", " {'pattern': '?X i felt ?Y', 'responses': ['what other feelings do you have']},\n", " {'pattern': '?X i ?Y you ?Z',\n", " 'responses': ['perhaps in your fantasies we ?Y each other']},\n", " {'pattern': \"?X why don't you ?Y\",\n", " 'responses': ['should you ?Y yourself',\n", " \"do you believe i don't ?Y\",\n", " 'perhaps i will ?Y in good time']},\n", " {'pattern': '?X yes ?Y',\n", " 'responses': ['you seem quite positive', 'you are sure', 'i understand']},\n", " {'pattern': '?X no ?Y',\n", " 'responses': ['why not',\n", " 'you are being a bit negative',\n", " 'are you saying \"no\" just to be negative']},\n", " {'pattern': '?X someone ?Y', 'responses': ['can you be more specific']},\n", " {'pattern': '?X everyone ?Y',\n", " 'responses': ['surely not everyone',\n", " 'can you think of anyone in particular',\n", " 'who for example',\n", " 'you are thinking of a special person']},\n", " {'pattern': '?X always ?Y',\n", " 'responses': ['can you think of a specific example',\n", " 'when',\n", " 'what incident are you thinking of',\n", " 'really -- always']},\n", " {'pattern': '?X what ?Y',\n", " 'responses': ['why do you ask',\n", " 'does that question interest you',\n", " 'what is it you really want to know',\n", " 'what do you think',\n", " 'what comes to your mind when you ask that']},\n", " {'pattern': '?X perhaps ?Y', 'responses': ['you do not seem quite certain']},\n", " {'pattern': '?X are ?Y',\n", " 'responses': ['do you think they might not be ?Y', 'possibly they are ?Y']},\n", " {'pattern': '?X',\n", " 'responses': ['very interesting',\n", " 'i am not sure i understand you fully',\n", " 'what does that suggest to you',\n", " 'please continue',\n", " 'go on',\n", " 'do you feel strongly about discussing such things']}]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "with open('rules.yaml') as f:\n", " rules = yaml.load(f)\n", "rules" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "> tom dick harry\n" ] }, { "data": { "text/plain": [ "['tom', 'dick', 'harry']" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "i = input(\"> \")\n", "i.split()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def match(text, rule, bindings=None):\n", " if text == [] and rule == []:\n", " return bindings\n", " elif text != [] and rule != []:\n", " if bindings == None:\n", " bindings = {}\n", " remaining_text, remaining_rule, new_bindings = match_first(text, rule, bindings)\n", " return match(remaining_text, remaining_rule, new_bindings)\n", " else:\n", " return None" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def is_var(word):\n", " return word[0] == '?'" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def match_first(text, rule, bindings):\n", " if not is_var(rule[0]):\n", " if text[0] == rule[0]:\n", " return text[1:], rule[1:], bindings\n", " else:\n", " # Unfinished\n", " pass" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.4.3+" } }, "nbformat": 4, "nbformat_minor": 0 }