Converted to use json for rules instead of yaml
[eliza.git] / eliza.ipynb
index 7a6da3ca54e4b4f1c11590d05acedee803385588..312bc8ad0dae6642df539c57d48d43a3f9fd0683 100644 (file)
@@ -2,23 +2,20 @@
  "cells": [
   {
    "cell_type": "code",
-   "execution_count": 100,
-   "metadata": {
-    "collapsed": true
-   },
+   "execution_count": 51,
+   "metadata": {},
    "outputs": [],
    "source": [
-    "import yaml\n",
+    "# import yaml\n",
+    "import json\n",
     "import collections\n",
     "import random"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 84,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 52,
+   "metadata": {},
    "outputs": [],
    "source": [
     "Match = collections.namedtuple('Match', 'text, rule, bindings')"
   },
   {
    "cell_type": "code",
-   "execution_count": 169,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 53,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# def read_rules_y(rules_file):\n",
+    "#     with open(rules_file) as f:\n",
+    "#         rules = [{'pattern': r['pattern'].split(),\n",
+    "#                  'responses': [t.split() for t in r['responses']]}\n",
+    "#             for r in yaml.safe_load(f)]\n",
+    "#     return rules\n",
+    "\n",
+    "# all_rules_y = read_rules_y('rules.yaml')\n",
+    "# all_rules_y"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 54,
+   "metadata": {},
    "outputs": [
     {
      "data": {
        "   [\"i'm\", 'sure', \"it's\", 'not', 'pleasant', 'to', 'be', 'unhappy']]},\n",
        " {'pattern': ['?X', 'are', 'like', '?Y'],\n",
        "  'responses': [['what',\n",
-       "    'resemblence',\n",
+       "    'resemblance',\n",
        "    'do',\n",
        "    'you',\n",
        "    'see',\n",
        "    'things']]}]"
       ]
      },
-     "execution_count": 169,
+     "execution_count": 54,
      "metadata": {},
      "output_type": "execute_result"
     }
     "    with open(rules_file) as f:\n",
     "        rules = [{'pattern': r['pattern'].split(),\n",
     "                 'responses': [t.split() for t in r['responses']]}\n",
-    "            for r in yaml.load(f)]\n",
+    "            for r in json.load(f)]\n",
     "    return rules\n",
     "\n",
-    "all_rules = read_rules('rules.yaml')\n",
+    "all_rules = read_rules('rules.json')\n",
     "all_rules"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 4,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 55,
+   "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "> tom dick harry\n"
+      "> hello there\n"
      ]
     },
     {
      "data": {
       "text/plain": [
-       "['tom', 'dick', 'harry']"
+       "['hello', 'there']"
       ]
      },
-     "execution_count": 4,
+     "execution_count": 55,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 102,
-   "metadata": {
-    "collapsed": true
-   },
+   "execution_count": 56,
+   "metadata": {},
    "outputs": [],
    "source": [
     "def match(text, rule):\n",
   },
   {
    "cell_type": "code",
-   "execution_count": 240,
-   "metadata": {
-    "collapsed": true
-   },
+   "execution_count": 57,
+   "metadata": {},
    "outputs": [],
    "source": [
     "def all_matches(matches):\n",
   },
   {
    "cell_type": "code",
-   "execution_count": 22,
-   "metadata": {
-    "collapsed": true
-   },
+   "execution_count": 58,
+   "metadata": {},
    "outputs": [],
    "source": [
     "def is_var(word):\n",
   },
   {
    "cell_type": "code",
-   "execution_count": 23,
-   "metadata": {
-    "collapsed": true
-   },
+   "execution_count": 59,
+   "metadata": {},
    "outputs": [],
    "source": [
     "def successful_match(match):\n",
   },
   {
    "cell_type": "code",
-   "execution_count": 24,
-   "metadata": {
-    "collapsed": true
-   },
+   "execution_count": 60,
+   "metadata": {},
    "outputs": [],
    "source": [
     "def splits(item):\n",
   },
   {
    "cell_type": "code",
-   "execution_count": 25,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 61,
+   "metadata": {},
    "outputs": [
     {
      "data": {
        " ('harry', '')]"
       ]
      },
-     "execution_count": 25,
+     "execution_count": 61,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 236,
-   "metadata": {
-    "collapsed": true
-   },
+   "execution_count": 62,
+   "metadata": {},
    "outputs": [],
    "source": [
     "def match_item(text, rule, bindings):\n",
   },
   {
    "cell_type": "code",
-   "execution_count": 213,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 63,
+   "metadata": {},
    "outputs": [
     {
      "data": {
        "[{'?X': ['fred'], '?Y': ['jane']}]"
       ]
      },
-     "execution_count": 213,
+     "execution_count": 63,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 214,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 64,
+   "metadata": {},
    "outputs": [
     {
      "data": {
        "[{'?X': [], '?Y': ['jane']}]"
       ]
      },
-     "execution_count": 214,
+     "execution_count": 64,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 215,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 65,
+   "metadata": {},
    "outputs": [
     {
      "data": {
        "[{'?X': ['fred'], '?Y': []}]"
       ]
      },
-     "execution_count": 215,
+     "execution_count": 65,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 216,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 66,
+   "metadata": {},
    "outputs": [
     {
      "data": {
        "[{'?X': [], '?Y': []}]"
       ]
      },
-     "execution_count": 216,
+     "execution_count": 66,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 217,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 67,
+   "metadata": {},
    "outputs": [
     {
      "data": {
        "[]"
       ]
      },
-     "execution_count": 217,
+     "execution_count": 67,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 218,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 68,
+   "metadata": {},
    "outputs": [
     {
      "data": {
        "[{'?X': ['fred']}]"
       ]
      },
-     "execution_count": 218,
+     "execution_count": 68,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 219,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 69,
+   "metadata": {},
    "outputs": [
     {
      "data": {
        "[]"
       ]
      },
-     "execution_count": 219,
+     "execution_count": 69,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 220,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 70,
+   "metadata": {},
    "outputs": [
     {
      "data": {
        "[{'?X': ['yes'], '?Y': ['rain']}]"
       ]
      },
-     "execution_count": 220,
+     "execution_count": 70,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 221,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 71,
+   "metadata": {},
    "outputs": [
     {
      "data": {
        "[{'?X': ['no'], '?Y': ['rain']}]"
       ]
      },
-     "execution_count": 221,
+     "execution_count": 71,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 222,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 72,
+   "metadata": {},
    "outputs": [
     {
      "data": {
        "[]"
       ]
      },
-     "execution_count": 222,
+     "execution_count": 72,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 223,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 73,
+   "metadata": {},
    "outputs": [
     {
      "data": {
        "[{'?X': [], '?Y': ['rain']}]"
       ]
      },
-     "execution_count": 223,
+     "execution_count": 73,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 241,
+   "execution_count": 74,
    "metadata": {
-    "collapsed": false,
     "scrolled": true
    },
    "outputs": [
        " {'?X': ['hello'], '?Y': ['there']}]"
       ]
      },
-     "execution_count": 241,
+     "execution_count": 74,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 242,
+   "execution_count": 75,
    "metadata": {
-    "collapsed": false,
     "scrolled": true
    },
    "outputs": [
        "[{'?X': ['hello']}]"
       ]
      },
-     "execution_count": 242,
+     "execution_count": 75,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 244,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 76,
+   "metadata": {},
    "outputs": [
     {
      "data": {
        " {'?X': ['hello', 'hello', 'hello'], '?Y': []}]"
       ]
      },
-     "execution_count": 244,
+     "execution_count": 76,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 245,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 77,
+   "metadata": {},
    "outputs": [
     {
      "data": {
        " {'?X': ['hello'], '?Y': ['hello']}]"
       ]
      },
-     "execution_count": 245,
+     "execution_count": 77,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 196,
-   "metadata": {
-    "collapsed": true
-   },
+   "execution_count": 78,
+   "metadata": {},
    "outputs": [],
    "source": [
     "def candidate_rules(rules, comment):\n",
   },
   {
    "cell_type": "code",
-   "execution_count": 197,
+   "execution_count": 79,
    "metadata": {
-    "collapsed": false,
     "scrolled": true
    },
    "outputs": [
        "  {'?X': ['i', 'remember', 'rain']})]"
       ]
      },
-     "execution_count": 197,
+     "execution_count": 79,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 198,
-   "metadata": {
-    "collapsed": true
-   },
+   "execution_count": 80,
+   "metadata": {},
    "outputs": [],
    "source": [
     "def fill(response, bindings):\n",
   },
   {
    "cell_type": "code",
-   "execution_count": 202,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 81,
+   "metadata": {},
    "outputs": [
     {
      "data": {
        "'do you often think of rain'"
       ]
      },
-     "execution_count": 202,
+     "execution_count": 81,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 165,
-   "metadata": {
-    "collapsed": true
-   },
+   "execution_count": 82,
+   "metadata": {},
    "outputs": [],
    "source": [
     "pronoun_swaps = {\n",
   },
   {
    "cell_type": "code",
-   "execution_count": 166,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 83,
+   "metadata": {},
    "outputs": [
     {
      "data": {
        "{'?X': ['your', 'father'], '?Y': ['you', 'are', 'your', 'brother', 'keeper']}"
       ]
      },
-     "execution_count": 166,
+     "execution_count": 83,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 101,
-   "metadata": {
-    "collapsed": true
-   },
+   "execution_count": 84,
+   "metadata": {},
    "outputs": [],
    "source": [
     "def respond(rule, bindings):\n",
   },
   {
    "cell_type": "code",
-   "execution_count": 231,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 85,
+   "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "['why', 'do', 'you', 'recall', 'rain', 'right', 'now']"
+       "['what', 'is', 'the', 'connection', 'between', 'me', 'and', 'rain']"
       ]
      },
-     "execution_count": 231,
+     "execution_count": 85,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 167,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 86,
+   "metadata": {},
    "outputs": [],
    "source": [
     "def eliza_loop():\n",
   },
   {
    "cell_type": "code",
-   "execution_count": 168,
+   "execution_count": 87,
    "metadata": {
-    "collapsed": false,
     "scrolled": true
    },
    "outputs": [
      "output_type": "stream",
      "text": [
       "Hello. I'm Eliza. What seems to be the problem?\n",
-      "> this is weird\n",
-      "i am not sure i understand you fully\n",
-      "> i love my father\n",
-      "your father\n",
-      "> yes, my father\n",
-      "what else comes to mind when you think of your father\n",
-      "> i remember my father\n",
-      "does thinking of your father bring anything else to mind\n",
-      "> i remember i am a saint\n",
-      "does thinking of you are a saint bring anything else to mind\n",
-      "> saints are always happy\n",
-      "really -- always\n",
-      "> yes, always\n",
-      "can you think of a specific example\n",
-      "> saint george was happy when he killed the dragon\n",
-      "go on\n",
-      "> i don't think you understand me\n",
-      "perhaps in your fantasies we don't think each other\n",
-      "> i aardvark you understand me\n",
-      "perhaps in your fantasies we aardvark each other\n",
-      "> exit\n"
+      "> hello\n",
+      "how do you do. please state your problem\n",
+      "> i am sad about life\n",
+      "i'm sure it's not pleasant to be sad\n",
+      "> it isn't\n",
+      "very interesting\n",
+      "> are you happy\n",
+      "perhaps i am happy in your fantasies\n",
+      "> quit\n"
      ]
     }
    ],
   {
    "cell_type": "code",
    "execution_count": null,
-   "metadata": {
-    "collapsed": true
-   },
+   "metadata": {},
    "outputs": [],
    "source": []
   }
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.5.2+"
+   "version": "3.7.4"
   }
  },
  "nbformat": 4,
- "nbformat_minor": 0
+ "nbformat_minor": 1
 }