{ "metadata": { "name": "", "signature": "sha256:d56181ec755bc6cace1df74814222d45e05bdbf17c63e5136b30d1d9cfaa5755" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "1. NLTK Syntax Trees" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this notebook, I'll play with NLTK syntax trees. Actually, they are general trees, and they allow an interesting set of operations. The complete reference can be found [here](nltk.googlecode.com/svn/trunk/doc/api/nltk.tree.Tree)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Each Tree represents a single hierarchical grouping of leaves and subtrees. For example, each constituent in a syntax tree is represented by a single Tree. Let's load into nltk some trees, from the WSJ corpus." ] }, { "cell_type": "code", "collapsed": false, "input": [ "import nltk\n", "from nltk.corpus import treebank\n", "t = treebank.parsed_sents('wsj_0001.mrg')[0]\n", "print t" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "(S\n", " (NP-SBJ\n", " (NP (NNP Pierre) (NNP Vinken))\n", " (, ,)\n", " (ADJP (NP (CD 61) (NNS years)) (JJ old))\n", " (, ,))\n", " (VP\n", " (MD will)\n", " (VP\n", " (VB join)\n", " (NP (DT the) (NN board))\n", " (PP-CLR (IN as) (NP (DT a) (JJ nonexecutive) (NN director)))\n", " (NP-TMP (NNP Nov.) (CD 29))))\n", " (. .))\n" ] } ], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "A tree's children are encoded as a *list* of leaves and subtrees, where a leaf is a basic (non-tree) value; and a subtree is a nested Tree. For syntax trees, the _node_ property of the list holds the phrase tag of the constituent, and words are at the tree's leaves." ] }, { "cell_type": "code", "collapsed": false, "input": [ "print t.label()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "S\n" ] } ], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Trees are lists, and the list elements are the children of the root node. They can be Trees o basic values (leafs). Let's show the first child:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print t[0]" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "(NP-SBJ\n", " (NP (NNP Pierre) (NNP Vinken))\n", " (, ,)\n", " (ADJP (NP (CD 61) (NNS years)) (JJ old))\n", " (, ,))\n" ] } ], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ ".... and now the second and third" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print t[1]" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "(VP\n", " (MD will)\n", " (VP\n", " (VB join)\n", " (NP (DT the) (NN board))\n", " (PP-CLR (IN as) (NP (DT a) (JJ nonexecutive) (NN director)))\n", " (NP-TMP (NNP Nov.) (CD 29))))\n" ] } ], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "print t[2]" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "(. .)\n" ] } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can this way access arbitrarly deep nodes, just indexing lists:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print t[0][0]\n", "print t[0][0][1]\n", "print t[0][0][1][0]" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "(NP (NNP Pierre) (NNP Vinken))\n", "(NNP Vinken)\n", "Vinken\n" ] } ], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": {}, "source": [ "From the NLTK book: Several Tree methods use tree positions to specify children or descendants of a tree. Tree positions are defined as follows:\n", "\n", "- The tree position $i$ specifies a $Tree$'s $i$th child.\n", "- The tree position $()$ specifies the $Tree$ itself.\n", "- If $p$ is the tree position of descendant $d$, then $p+(i)$ specifies the $i$th child of $d$.\n", " \n", "I.e., every tree position is either a single index $i$, specifying $self[i]$; or a sequence ($i_1, i_2, \\ldots, i_N$), specifying $self[i_1][i_2]...[i_N]$." ] }, { "cell_type": "code", "collapsed": false, "input": [ "print t.treepositions(order='preorder')" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[(), (0,), (0, 0), (0, 0, 0), (0, 0, 0, 0), (0, 0, 1), (0, 0, 1, 0), (0, 1), (0, 1, 0), (0, 2), (0, 2, 0), (0, 2, 0, 0), (0, 2, 0, 0, 0), (0, 2, 0, 1), (0, 2, 0, 1, 0), (0, 2, 1), (0, 2, 1, 0), (0, 3), (0, 3, 0), (1,), (1, 0), (1, 0, 0), (1, 1), (1, 1, 0), (1, 1, 0, 0), (1, 1, 1), (1, 1, 1, 0), (1, 1, 1, 0, 0), (1, 1, 1, 1), (1, 1, 1, 1, 0), (1, 1, 2), (1, 1, 2, 0), (1, 1, 2, 0, 0), (1, 1, 2, 1), (1, 1, 2, 1, 0), (1, 1, 2, 1, 0, 0), (1, 1, 2, 1, 1), (1, 1, 2, 1, 1, 0), (1, 1, 2, 1, 2), (1, 1, 2, 1, 2, 0), (1, 1, 3), (1, 1, 3, 0), (1, 1, 3, 0, 0), (1, 1, 3, 1), (1, 1, 3, 1, 0), (2,), (2, 0)]\n" ] } ], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's see some methods." ] }, { "cell_type": "code", "collapsed": false, "input": [ "print t.leaves()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[u'Pierre', u'Vinken', u',', u'61', u'years', u'old', u',', u'will', u'join', u'the', u'board', u'as', u'a', u'nonexecutive', u'director', u'Nov.', u'29', u'.']\n" ] } ], "prompt_number": 8 }, { "cell_type": "code", "collapsed": false, "input": [ "print t.flatten() # A tree with only the root and the leaves directly connected to it" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "(S\n", " Pierre\n", " Vinken\n", " ,\n", " 61\n", " years\n", " old\n", " ,\n", " will\n", " join\n", " the\n", " board\n", " as\n", " a\n", " nonexecutive\n", " director\n", " Nov.\n", " 29\n", " .)\n" ] } ], "prompt_number": 9 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can generate all the tree's subtrees;" ] }, { "cell_type": "code", "collapsed": false, "input": [ "for subtree in t.subtrees(): # Generate all subtrees\n", " print subtree" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "(S\n", " (NP-SBJ\n", " (NP (NNP Pierre) (NNP Vinken))\n", " (, ,)\n", " (ADJP (NP (CD 61) (NNS years)) (JJ old))\n", " (, ,))\n", " (VP\n", " (MD will)\n", " (VP\n", " (VB join)\n", " (NP (DT the) (NN board))\n", " (PP-CLR (IN as) (NP (DT a) (JJ nonexecutive) (NN director)))\n", " (NP-TMP (NNP Nov.) (CD 29))))\n", " (. .))\n", "(NP-SBJ\n", " (NP (NNP Pierre) (NNP Vinken))\n", " (, ,)\n", " (ADJP (NP (CD 61) (NNS years)) (JJ old))\n", " (, ,))\n", "(NP (NNP Pierre) (NNP Vinken))\n", "(NNP Pierre)\n", "(NNP Vinken)\n", "(, ,)\n", "(ADJP (NP (CD 61) (NNS years)) (JJ old))\n", "(NP (CD 61) (NNS years))\n", "(CD 61)\n", "(NNS years)\n", "(JJ old)\n", "(, ,)\n", "(VP\n", " (MD will)\n", " (VP\n", " (VB join)\n", " (NP (DT the) (NN board))\n", " (PP-CLR (IN as) (NP (DT a) (JJ nonexecutive) (NN director)))\n", " (NP-TMP (NNP Nov.) (CD 29))))\n", "(MD will)\n", "(VP\n", " (VB join)\n", " (NP (DT the) (NN board))\n", " (PP-CLR (IN as) (NP (DT a) (JJ nonexecutive) (NN director)))\n", " (NP-TMP (NNP Nov.) (CD 29)))\n", "(VB join)\n", "(NP (DT the) (NN board))\n", "(DT the)\n", "(NN board)\n", "(PP-CLR (IN as) (NP (DT a) (JJ nonexecutive) (NN director)))\n", "(IN as)\n", "(NP (DT a) (JJ nonexecutive) (NN director))\n", "(DT a)\n", "(JJ nonexecutive)\n", "(NN director)\n", "(NP-TMP (NNP Nov.) (CD 29))\n", "(NNP Nov.)\n", "(CD 29)\n", "(. .)\n" ] } ], "prompt_number": 10 }, { "cell_type": "markdown", "metadata": {}, "source": [ "And (this is awesome!) we can filter according to certain criteria. For example, let's filter NP constituents" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def filt(x):\n", " return x.label()=='NP'\n", "\n", "for subtree in t.subtrees(filter = filt): # Generate all subtrees\n", " print subtree" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "(NP (NNP Pierre) (NNP Vinken))\n", "(NP (CD 61) (NNS years))\n", "(NP (DT the) (NN board))\n", "(NP (DT a) (JJ nonexecutive) (NN director))\n" ] } ], "prompt_number": 11 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Or just use a lambda function, to filter singular nouns:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "for subtree in t.subtrees(filter = lambda st: st.label()=='NN'):\n", " print subtree" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "(NN board)\n", "(NN director)\n" ] } ], "prompt_number": 12 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can show POS (they are simply preterminals in the tree)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "t.pos()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 13, "text": [ "[(u'Pierre', u'NNP'),\n", " (u'Vinken', u'NNP'),\n", " (u',', u','),\n", " (u'61', u'CD'),\n", " (u'years', u'NNS'),\n", " (u'old', u'JJ'),\n", " (u',', u','),\n", " (u'will', u'MD'),\n", " (u'join', u'VB'),\n", " (u'the', u'DT'),\n", " (u'board', u'NN'),\n", " (u'as', u'IN'),\n", " (u'a', u'DT'),\n", " (u'nonexecutive', u'JJ'),\n", " (u'director', u'NN'),\n", " (u'Nov.', u'NNP'),\n", " (u'29', u'CD'),\n", " (u'.', u'.')]" ] } ], "prompt_number": 13 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Before continuing, let's try to draw the tree. I will use two methods I have developed: pln_inco.syntax_trees.tree_to_dot to convert NLTK tree rep to a graphviz spec, and pln_inco.graphviz.generate to actually call dot and generate the image." ] }, { "cell_type": "code", "collapsed": false, "input": [ "import pln_inco.syntax_trees\n", "import pln_inco.graphviz as gv\n", "from IPython.display import Image\n", "from IPython.display import display\n", "from IPython.display import display_png" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 14 }, { "cell_type": "code", "collapsed": false, "input": [ "tree_dot=pln_inco.syntax_trees.tree_to_dot(t)\n", "\n", "tree_png=Image(data=gv.generate(tree_dot,format='png'),width=1000)\n", "display_png(tree_png)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": { "png": { "width": 1000 } }, "output_type": "display_data", "png": "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\nU6aMnn32WS1atEjNmjUzOg4AAAAAFDvcoA8AAAAAANvCDfoAAAAAALA1lH0AAAAAAGwMZR8AAAAA\nABtD2QcAAAAAwMZQ9gEAAAAAsDGUfQAAAAAAbAxlHwAAAAAAG0PZBwAAAADAxlD2AQAAAACwMY5G\nB8DdNmzYoPT0dElSgwYN5OnpmW9/RkaG1q1bl29bx44dlZycrLS0tHzbnZ2dVb16dbm7u6t8+fKF\nGxx4DNHR0erZs6fs7e/+2+PmzZvvWtNOTk6qXLmynnnmGdWrV+++4x4+fFi7d+/Ot83Z2VmVKlXi\nPIFV2bhxo86fPy9JsrOzU69eveTg4HDf45OSknT69Om8r7t3765du3Y99rmC/7jXc46Pj4+qVauW\n9/W6deuUkZGR93VgYOA9H8fzCgDAaLyyb4VatWqlw4cPKygoSD4+Pjp69Gi+/eXLl1f9+vU1depU\nTZ48WU8//bQqVKigJk2aaM+ePQoKCtI777yja9euad++fXrvvff0zDPPaNiwYbpx44ZB3xVwt+zs\nbP3lL3/RN998c8/9TZs2VUpKioKCgtS/f39lZmbq119/lclkUu/evVW7dm299957unXr1l2PrVu3\nrmrUqKH+/fsrKChICQkJeuGFFzhPYHVefvllXbt2TUFBQQoMDNRXX31132OvXr2q7t27KygoSNOn\nT1fTpk1VunTpJzpX8B9NmzZVYmKigoKCNHDgQLVs2TJf0Zckb29vLV++XMOHD1ezZs0kiecVAIB1\nMsNqlShRwizJ3LBhQ3NmZuZd+ydPnmyeNGlSvm2HDh0ySzJ7e3vn2z5p0iSzJHNwcHChZgYexfz5\n8++5Xv/bqVOn8s6D/3b79m1zTEyMuVy5cmY/P797niNms9ncsmVLsyTzDz/8kLeN8wTW5urVq2ZH\nR0ezJHPz5s3ve9ycOXPMVapUMUsyjxs3Lt++Jz1X8JusrCzzU089ZbazszOfOHHinscMGjTIPHfu\n3HzbeF4BAFiZaF7Zt2LPPvus2rdvr0OHDik4OFhmsznf/kqVKqlChQr5tpUrV+6eYw0dOlT29vaK\njo7WzZs3Cy0z8CiWLl2qbt26afPmzXe95f6O+61pOzs79ezZUwsWLFBcXJxat259z7V95+2z/z0O\n5wmsTenSpdWgQQM1atRIu3btUmJi4l3HmM1mzZ8/XwMHDpQklS1bNt/+Jz1X8BsXFxcNHz5cZrNZ\n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\n/gZEkty+fRsnTpzA66+/LjuKXiosLMTu3bsxcOBA2VHIhGVnZ+P777/H6NGjZUfRS7dv38b169fh\n4uIiO4rBuH37NlavXo3JkyfzuQ/0r3Jzc7F7927ExMRg//79uHfvHl599VX4+/sjICAAjRs3lh2R\nyBDEmEyxT0REREREhuXOnTtISkpCTEwMdu3ahTt37qBz587w9/fHO++8gyZNmsiOSKSvWOwTERER\nEZH+u3v3LhITExETE4Pvv/8eeXl5aNOmDfz9/TFo0CC4urrKjkikT1jsExERERGRYSkuLkZqaip2\n796NrVu3Ijs7W134BwQEoE2bNrIjEsnGYp+IiIiIiAxXWVkZDh8+jJiYGMTExCArKwsuLi548803\n4e/vj9dff53PiSBTxGKfiIiIiIiMQ3l5OQ4dOoS4uDhs374d586dQ7NmzdCnTx8W/mRqWOwTERER\nEZFxOnnyJGJiYrB161acPn0aTZs2Re/evfHmm2+id+/esLCwkB2RSFtY7BMRERERkXETQuDIkSPY\nuXMnduzYgczMTDz77LMYO3YsZs+eLTsekTaw2CciIiIiItPy22+/YceOHbC1tcWMGTNkxyHSBhb7\nREREREREREYmxkx2AiIiIiIiIiLSLBb7REREREREREaGxT4RERERERGRkWGxT0RERERERGRkWOwT\nERERERERGRkW+0RERERERERGxkJbM05ISEBOTg4AoFWrVujQoUOl6bdu3cKePXsqfWZlZYXi4uIn\nauPt7Y20tDRcuXKl0ufW1tZo0qQJXF1dYWdnp5F1MiTsf9KW6mxb3E60748//sDx48crfWZtbY1+\n/fr96zTSHykpKQ/sI0qlEk5OTur/3rNnD27duqX+7yZNmuCvv/6q1MbMzAz169eHs7MzXF1dtRva\nyHB805yHbc8P65Oqfu9JXL58Gb/99hv++9//wszMDC1atMDLL78MhUKBv/76C3fu3FH/zhX+85//\noG3btg+d3/3bRQUrKyu0aNECzz//PGrXrv3EGclwVWecsLW1RX5+fqXPnnQ7P3z4MC5cuPDY71lZ\nWcHe3h7Xr18HACgUCvj7+8Pc3PyRbVJTUyv9W9K3b18cO3aM45oxEFpSWFgogoODBQBhZ2cnTp8+\nXWl6eXm5+PXXX0W7du1EmzZthEqlEgUFBU/cpry8XOTk5Ijp06cLAKJx48ZizZo1IjQ0VHh5eQkb\n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\nNm3aCADCzs5OREREiHPnzlUp46BBg0Rubq4QQojbt2+LxYu6GRLoAAAgAElEQVQXiyZNmggAokGD\nBiIoKEjcvn2b45pxiFYIIf/6jOzsbDRq1Ejrbejh2P+kLdxOdOfmzZu4desWnnvuOSgUiipPI/1X\ncRmmjY2N5CR0P45v+i03Nxfp6emwtLSEq6sr6tWrJzsSmSCOEyRZjF4U+0RERERERESkMTFavWef\niIiIiIiIiHSPxT4RERERERGRkWGxT0RERERERGRkWOwTERERERERGRkW+0RERERERERGhsU+ERER\nERERkZFhsU9ERERERERkZFjsExERERERERkZFvtERERERERERobFPhEREREREZGRYbFPRERERERE\nZGRY7BMREREREREZGRb7REREREREREaGxT4RERERERGRkWGxT0RERERERGRkWOwTERERERERGRkW\n+0RERERERERGhsU+EVXZn3/+iQMHDmht/sXFxdi4cSPKy8u1tgwiMg1Hjx7Fhg0btDb/69evIzEx\nUWvzpyeXnZ2t1d+ktLQUCxcuRHFxsdaWQVQV2h5/SktLERwcjMLCQq0tg3SDxT4RVdns2bMxadIk\nrRXj586dw4gRIxATE6OV+RORaTh06BA8PT2xceNGCCG0sowDBw7A09NTK/Om6omPj0ffvn21Nv9L\nly5h/vz56N+/P0pLS7W2HKLH0fb4k5mZieXLl6NXr17Iy8vT2nJI+1jsE1GV/Pzzz9ixYwc++eQT\nmJlpZ+ho06YNhgwZgjlz5uDevXtaWQYRGbeEhAR4enpCqVTihx9+gEKhkB2JdOTmzZuoX7++1ubf\nvHlzpKam4siRIwgICOC/U2S0XF1d8dNPP+HChQvo3r07/v77b9mRqJpY7BNRlYSEhMDd3R0+Pj5a\nXU5oaCguXbqk1ctvicg4fffdd/D19UXv3r0RHR2NWrVqyY5EOpSbm4t69eppdRktW7bEvn37kJKS\ngoEDB6KsrEyryyOSpVWrVlCpVLhx4wa6du2Kq1evyo5E1cBin4ge68CBA9i3bx9CQkK0vqxnn30W\nI0aMQFhYGO+LJKIq27lzJwICAtC/f39s27YNlpaWsiORjuXk5Gi92AeA9u3b44cffsC+ffswevRo\nPmeGjJarqysOHjyIkpISeHh44MqVK7Ij0RNisU9EjzVnzhwolUr06NFDJ8sLDg5GdnY21qxZo5Pl\nEZFh27RpEwICAjBo0CCsW7cO5ubmsiORBNq+jP9+r776Kvbs2YOYmBhMmjRJJ8skkuHZZ5+FSqVC\nWVkZunTpgszMTNmR6Amw2Ceif5WUlISDBw8iIiJCZ8t8+umnMWbMGERERODu3bs6Wy4RGZ7169dj\n+PDheO+997B27VoW+ibs5s2bOjmzX+H111/Hrl278NVXX+HDDz/U2XKJdM3Z2RmpqamoU6cOunfv\njnPnzsmORFXEYp+IHkkIgVmzZsHb2xuvvfaaTpc9a9Ys5OXlYeXKlTpdLhEZjrVr12LkyJGYMGEC\nli5dyofxmThdXcZ/P09PT2zduhVLly7FvHnzdLpsIl1ycnJCUlIS7OzsoFQqcebMGdmRqApY7BPR\nI8XHx+PYsWM6PatfwcnJCRMmTMAnn3yCgoICnS+fiPTb0qVLMXr0aEyePBmff/45C33S+Zn9Cm+9\n9Ra2bNmCkJAQLFiwQOfLJ9IVR0dHHDhwAI6OjnB3d0d6errsSPQYLPaJ6KGEEAgODkafPn3g5uYm\nJcP06dNRUlKC5cuXS1k+EemnJUuWYNKkSQgKCsKiRYtY6BMAecU+APj5+eHrr7/GzJkzeUUaGTUH\nBwfs378fzZo1Q48ePfDf//5XdiT6Fyz2ieihdu3ahRMnTkg5q1+hfv36mDRpEj777DPcunVLWg4i\n0h8RERGYMmUKIiMjMXfuXNlxSE+UlpaioKBAWrEPAMOHD8eSJUswfvx4PmCWjJq9vT327duH5s2b\no3v37vjll19kR6JHYLFPRA8oLy9HcHAw/Pz88MILL0jN8tFHH8HMzAxRUVFScxCRfKGhoQgKCsJn\nn32GGTNmyI5DeiQ3NxdCCJ09jf9RPvjgA0RERGDcuHHYtm2b1CxE2mRnZ4f9+/ejQ4cO6NWrF44c\nOSI7Ej0Ei30iesC2bdtw+vRphIeHy44COzs7TJkyBZ9//jlu3rwpOw4RSTJz5kyEhYVh+fLlmD59\nuuw4pGdycnIAQOqZ/QqzZ8/GjBkzMGTIEMTFxcmOQ6Q1derUwe7du9GxY0d4enrixx9/lB2J/oHF\nPhFVcu/ePYSEhGDQoEFwdXWVHQcAMHnyZFhZWWHhwoWyoxCRBNOmTcOCBQuwYsUKjB8/XnYc0kMV\nfwzWh2IfAObNm4dJkybhnXfewd69e2XHIdIaGxsbxMXFQalU4s0330RSUpLsSHQfFvtEVMmmTZtw\n8eJFvboXtm7dupg2bRq++OILXL9+XXYcItIRIQTef/99LF68GKtWrcK4ceNkRyI9pW/FPgDMnz8f\nI0aMwDvvvIOUlBTZcYi0xsrKCtu3b4enpyf69OmDhIQE2ZHo/7DYJyK1kpIShIaGYtiwYWjWrJns\nOJVMmDAB9vb2mD9/vuwoRKQD5eXlGDduHL7++mts2rQJo0ePlh2J9FhOTg5sbGxgbW0tO4qaQqHA\nl19+iX79+sHX1xfHjh2THYlIa2rVqoXo6Gj07t0bvr6++O6772RHIrDYJ6L7rF27FteuXcOcOXNk\nR3mAtbU1ZsyYgS+//BJ//fWX7DhEpEX37t3DkCFD8M0332Dz5s0YOHCg7Eik527evCn94XwPY2Zm\nhvXr18Pb2xu9e/fme8nJqFlaWmLbtm3o378/AgICsHPnTtmRTB6LfSICANy9exfh4eEYM2YMnJ2d\nZcd5qHHjxsHJyQmRkZGyoxCRllQU+jt27MDOnTsREBAgOxIZgNzcXL26hP9+5ubm2LhxIzp16oQe\nPXogIyNDdiQirTE3N8e6deswaNAgBAQEYNOmTbIjmTQW+0QEAFi9ejVu3bqF2bNny47ySLVq1cKs\nWbPw1VdfITMzU3YcItKw0tJSDBo0CLGxsdi5cyfefPNN2ZHIQOTk5OhtsQ/879+vmJgYtG3bFl5e\nXvw3jIyaubk51q5di/feew/Dhw/H+vXrZUcyWSz2iQh37tzBp59+ivfffx+NGzeWHedfjRgxAs7O\nzpg3b57sKESkQUVFRejXrx/i4uIQGxsLHx8f2ZHIgOjrZfz3q127NuLi4vDcc8/B09MTV69elR2J\nSGsUCgWWLl2KCRMmYOTIkVi7dq3sSCaJxT4RYdmyZbh9+zZmzpwpO8pjWVpaIigoCN988w1Onz4t\nOw4RacDdu3fRr18/pKSkYO/evejVq5fsSGRgbt68qddn9ivY2Nhg9+7dcHBwgFKpxLVr12RHItIa\nhUKBzz//HJMnT8bo0aOxdOlS2ZFMDot9IhOXn5+P+fPnY+LEiWjQoIHsOFUyePBguLq6IiIiQnYU\nIqqhwsJC9O7dG4cOHUJ8fDy6du0qOxIZIH2/jP9+dnZ22LNnDywtLdGrVy/1awOJjJFCocCiRYsQ\nFBSESZMmYcmSJbIjmRQW+0QmLioqCuXl5Zg6darsKFVmbm6OkJAQfPvtt0hLS5Mdh4iqqaCgAD4+\nPkhLS0NSUhK6dOkiOxIZKEM5s1+hQYMGSE5ORklJCXr37o2CggLZkYi0au7cuYiMjMSUKVN4skaH\nWOwTmbCbN29i0aJFmDx5Muzt7WXHeSIBAQFo164dwsPDZUchomrIz8+Ht7c3MjIykJiYiI4dO8qO\nRAbM0Ip9AGjUqBH279+Pv//+G97e3igsLJQdiUirZsyYgfnz5yMoKAihoaGy45gEFvtEJmzx4sWw\nsrLChx9+KDvKE1MoFAgNDcX27dtx/Phx2XGI6Ank5OTAw8MDZ86cQWJiIjp06CA7Ehmw0tJSFBQU\nGFyxDwBNmjTB/v37ceHCBfTr1w9FRUWyIxFp1bRp07B8+XKEhYUZxLOiDB2LfSITlZ2djSVLluCj\njz5C3bp1Zceplrfeegsvv/wyQkJCZEchoiq6ceMGevbsiaysLKSkpKB9+/ayI5GBy83NhRBC75/G\n/yjNmzeHSqVCWloaBgwYgNLSUtmRiLRq/PjxWLFiBRYsWIBp06bJjmPUWOwTmagFCxbgqaeeQmBg\noOwoNRIaGordu3fjyJEjsqMQ0WNkZWWha9euuHHjBlQqFVq1aiU7EhmBnJwcADDIM/sVXF1dkZCQ\ngNTUVAwcOBD37t2THYlIq8aNG4dVq1Zh8eLFeP/99yGEkB3JKLHYJzJBV65cwbJlyzBz5kzUqVNH\ndpwa6d27N7p27cqz+0R67sqVK1AqlSguLkZqaipcXV1lRyIjUfE0e0Mu9gHgP//5D+Lj45GQkIDR\no0ejvLxcdiQirRo9ejQ2bdqEr7/+GuPGjeM2rwUWsgMQke599tlnaNiwIcaNGyc7ikaEhISgR48e\nOHDgALp16yY7DhH9Q2ZmJnr06AFzc3OoVCo4OzvLjkRGxFiKfQDo1KkT9uzZg169eqFu3bpYtmyZ\n7EhEWjVw4ECYm5tj8ODBuH37NtavXw8LC5aomsKeJDIxmZmZWLVqFaKiomBtbS07jkZ4eHjAw8MD\nc+bMQWpqquw4RHSfc+fOoUePHqhTpw6SkpLg5OQkOxIZmZycHNjY2BjNv2mvv/46du3ahT59+sDS\n0hKff/657EhEWhUQEAAbGxv4+fmhvLwcGzduZMGvIbyMn8jEREZGokmTJhg1apTsKBoVHh6OgwcP\nIjExUXYUIvo/Z86cgVKphK2tLZKTk1nok1bcvHnTYB/O9yienp7YunUrli9fzlfMkkl48803sXPn\nTsTGxmLgwIF8UKWGsNgnMiHnzp3DN998gzlz5sDS0lJ2HI167bXX0Lt3b8yePZsPeSHSAydPnkTX\nrl1Rr149JCUlwdHRUXYkMlK5ublGcQn/P/Xt2xfffvst5s6di/nz58uOQ6R1Pj4+iI2NxQ8//MBX\nUWoIi30iExIWFobmzZtj6NChsqNoRXh4OI4dO4YffvhBdhQik5aWlgYPDw84OztDpVKhYcOGsiOR\nEcvJyTHKYh8A/Pz8sGbNGsyaNQsrVqyQHYdI63r16oW9e/ciJSUF/fr1w927d2VHMmgs9olMREZG\nBjZv3ozg4GCYm5vLjqMVbm5u6Nu3L4KDg3l2n0iSo0ePolu3bnBxcUFCQgIcHBxkRyIjZ4yX8d9v\n2LBhiIqKQmBgIL7++mvZcYi0rmvXroiPj8ehQ4fQu3dvFBYWyo5ksFjsE5mIuXPn4oUXXkD//v1l\nR9Gq8PBw/P7779i5c6fsKEQm5+eff4aXlxdefPFFJCYmws7OTnYkMgE3b9402jP7FSZMmIBFixbh\nvffew9atW2XHIdK6Ll26ICkpCWlpafDx8UFBQYHsSAaJxT6RCfj9998RHR2N4OBgmJkZ927/wgsv\nICAgACEhIXxfK5EOHTp0CL169ULHjh0RFxeHOnXqyI5EJsKYL+O/35QpUzBr1iwMHToUu3fvlh2H\nSOs6duyIxMREZGRkwNvbG/n5+bIjGRzjPuonIgBAaGgoOnbsiH79+smOohNhYWE4ffo0z34Q6Uhy\ncjK8vLzQqVMnfP/997CxsZEdiUyIKZzZrxAeHo4pU6bAz88Pe/bskR2HSOs6dOiAxMREnDlzBh4e\nHsjJyZEdyaCw2Ccycj///DNiY2MREhIChUIhO45OtGjRAu+++y5CQ0Nx79492XGIjNr+/fvh6+uL\nnj17Yvfu3ahdu7bsSGRiTKnYB4BPP/0Uo0aNgp+fH1JSUmTHIdK69u3bIyUlBVlZWejZsydu3Lgh\nO5LBYLFPZORCQ0PRuXNnvPHGG7Kj6FRoaCguXryIjRs3yo5CZLS+//57+Pr6wtvbG9HR0ahVq5bs\nSGRiSktLUVBQYFLFvkKhwPLlyzFw4ED4+vri6NGjsiMRaV2rVq2gUqlw48YNdO3aFVlZWbIjGQQW\n+0RGLCUlBXv37kVYWJjsKDrXrFkzDB8+HHPnzkVJSYnsOERGZ9euXfD394e/vz8LfZImNzcXQgij\nfhr/wygUCqxatQo+Pj7w8vLC8ePHZUci0jpXV1ekpqaiuLgYSqUSV65ckR1J77HYJzJic+bMgVKp\nRM+ePWVHkWLOnDm4du0a1qxZIzsKkVHZvn07+vfvj4EDB+Kbb74x2td5kv6ruH/XlM7sVzA3N8eG\nDRvQpUsX9OrVCxkZGbIjEWlds2bNoFKpUFZWBnd3d2RmZsqOpNdY7BMZqeTkZKSmpiI8PFx2FGma\nNm2KsWPHIjw8HHfv3pUdh8gobNiwAQMGDMCYMWOwbt06Fvok1c2bNwGYZrEPAJaWltixYwfc3Nzg\n6emJ8+fPy45EpHXOzs5ITU1F7dq1oVQqce7cOdmR9BaLfSIjFRQUhF69euH111+XHUWq2bNnIy8v\nD6tWrZIdhcjgrVu3DiNHjkRgYCCWLVtmMg/9JP1l6sU+ANSqVQs7duxA8+bNoVQqcfHiRdmRiLTO\nyckJycnJsLW1hVKpxJkzZ2RH0kss9omMUHx8PA4fPox58+bJjiKdk5MTAgMD8cknn6CgoEB2HCKD\ntWzZMowaNQoTJ07EkiVLWOiTXsjJyYGNjQ2sra1lR5HKxsYGu3fvhqOjIzw9PXHt2jXZkYi0ztHR\nEUlJSahXrx66du2KkydPyo6kd1jsExkZIQSCgoLg6+sLNzc32XH0wowZM1BUVIQvv/xSdhQigxQV\nFYWJEydizpw5WLx4MQt90hs3b940uYfzPYqtrS0SEhJQt25deHl58X3kZBIaNmwIlUoFZ2dneHh4\nIC0tTXYkvcJin8jIxMbG4sSJE4iIiJAdRW/Ur18fkyZNwoIFC5Cfny87DpFBmTdvHiZPnozIyEiT\nfLMH6bfc3FyTvoT/n+zt7bF3717cu3cPPXv2RG5uruxIRFrn4OCAhIQEuLi4oFu3bnwd5X1Y7BMZ\nkfLycgQFBeGdd95Bu3btZMfRK1OnTkV5eTmWLFkiOwqRwZg7dy7mzJmDTz/9FDNmzJAdh+gBOTk5\nLPb/oVGjRkhISEBeXh7eeOMNFBYWyo5EpHV2dnZITEzEiy++CC8vL/z888+yI+kFFvtERuS7775D\nRkYGgoKCZEfRO3Z2dvjggw+wZMkS3rtPVAVr165FaGgowsPDWeiT3uJl/A/XpEkT7NmzB+fPn8fw\n4cNlxyHSiTp16iA2NhZt27aFj48PLl26JDuSdAohhJAdgog0o7i4GCqVCt7e3rKj6KW8vDwcP34c\n3bt3lx2FSO9lZ2fj+++/x+jRo2VH0Uu3b9/G9evX4eLiIjuKSTt79iwsLCzQrFkz2VH0UlpaGvLy\n8tClSxfZUUiDOP78u8LCQqxduxYTJ06UHUW2GBb7RERERERERMYlhpfxExERERERERkZFvtERERE\nRERERobFPhEREREREZGRYbFPREREREREZGRY7BMREREREREZGRb7REREREREREaGxT4RERERERGR\nkWGxT0RERERERGRkWOwTERERERERGRkW+0RERERERERGhsU+ERERERERkZFhsU9ERERERERkZFjs\nExERERERERkZFvtERERERERERsZCdgAiU3b58mX89ttv+O9//wszMzO0aNECL7/8MhQKBf766y+U\nl5fjypUrldpYWlqiYcOGePrpp9GiRQtJyfVbQkICcnJyAACtWrVChw4dKk2/desW9uzZU+kzKysr\nFBcXP1Ebb29vODg4AABKSkqwceNGpKWloWnTpujSpQscHByQk5ODzp07a3T9yHilpKQ88T5/+PBh\nXLhw4bHztrKywttvv62pqEalOmOGt7c3jh49Wq12FeMGPdzD9gN7e3v07t272r8V+/zxqtu3aWlp\nD/xe1tbWaNKkCVxdXWFnZ6fd4AZEl8cn/F2qz6iOzwUR6VxxcbGYOnWqsLa2FtOmTRNxcXEiOTlZ\nREZGCgcHB6FQKMSiRYtEbm6uCA8PFwBErVq1xMqVK8WXX34pPvroI9GhQwfRrFkz8fHHH4uSkhLZ\nq6RXCgsLRXBwsAAg7OzsxOnTpytNLy8vF7/++qto166daNOmjVCpVKKgoOCJ25SXlwshhLh9+7Zo\n37696NWrl0hMTBTr1q0TSqVSABCLFi3S2XqT4avOPu/v7y+efvppMXXqVLF48WIxbtw4AUB0795d\nREVFiZCQEPHyyy8Le3t7iWum36ozZpSXl1e7Hf274uJisWvXLgFAABBffPGFuHPnjhCi+r8VPV51\n+zYnJ0dMnz5dABCNGzcWa9asEaGhocLLy0vY2NiIwMBAUVRUJGmt9Isuj0/4uzw5Izw+j2axT6Rj\nd+/eFS+99JKws7MTqampD0w/e/asaNq0qQgPDxdCCHH58mUBQLRu3brS98rLy0VMTIywtbUVnp6e\nIj8/Xyf5DUmtWrXUffew/omIiBBhYWE1bvPJJ58IMzMzcfny5Uqfjx07Vnz00UcaWBMyJU+6z/fp\n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\nEZGRYbFPREREREREZGRY7BMREREREREZGRb7RERERI9UWKgAABAiSURBVEREREaGxT4RERERERGR\nkWGxT0RERERERGRkWOwTERERERERGRkW+0RERERERERGhsU+ERERERERkZFhsU9ERERERERkZFjs\nExERERERERkZFvtERERERERERobFPhEREREREZGRYbFPRERERGREjh49ig0bNmht/tevX0diYqLW\n5l9aWorg4GAUFhZqbRlEpoDFPhERERGRkTh06BA8PT2xceNGCCG0sowDBw7A09NTK/MGgMzMTCxf\nvhy9evVCXl6e1pZDZOxY7BMRERH9v/buPabq+vHj+Ot4ENKjIjbT2iQFU1wuZaPZFNEDIoJg6RSC\n1BzSLLzB5iUXLq/T75yiYZnWQEu3vCGKmnFN8ZK6dGWmyZjORZSXpoKJIvL747f6ff1phQi+z/nw\nfPz5eftmrzP857lzPAIWkJeXp/DwcDmdTu3Zs0c2m830pAbp0aOHDh06pAsXLmjw4MG6fPmy6UmA\nWyL2AQAAADe3c+dOxcTEKDIyUlu2bJGnp6fpSY8lICBAxcXFunLlikJCQvTLL7+YngS4HWIfAAAA\ncGPZ2dmKjY1VXFycNm/erJYtW5qe1Ch69OihgwcP6s6dOwoNDVV5ebnpSYBbIfYBAAAAN7Vx40bF\nxsYqISFBWVlZstvtpic1queff17FxcWqra1VcHCwzp8/b3oS4DaIfQAAAMANbdiwQRMmTNDbb7+t\nzMxMy4X+n3x9fVVSUiKHw6HBgwerrKzM9CTALRD7AAAAgJvJzMxUYmKipkyZooyMDLf9Mr766ty5\nswoLC+Xt7S2n06nS0lLTkwCXR+wDAAAAbiQjI0NJSUlKSUlRenq65UP/T506ddL+/fvVqVMnDRw4\nUD/88IPpSYBLI/YBAAAAN7Fy5UpNnz5dc+fO1fLly5tN6P/Jx8dH+fn56tq1q8LCwvT999+bngS4\nLGIfAAAAcAOLFi1SamqqlixZovnz55ueY0z79u311Vdfyd/fX4MHD9axY8dMTwJcErEPAAAAuLh5\n8+Zp7ty5+s9//qPZs2ebnmOct7e38vPzFRgYqIiICH3zzTemJwEuh9gHAAAAXNi7776rBQsW6MMP\nP9SsWbNMz3EZDodDubm5CgoKUnh4uL7++mvTkwCXQuwDAAAALmrmzJlatmyZ1qxZo+TkZNNzXE7r\n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\nAAAAoNF88z+1qvDK09hoZgAAAABJRU5ErkJggg==\n" } ], "prompt_number": 15 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's look at treepositions again, since they are interesting. Let's find the tree position of \"board\", the 11th word (leave) in the sentence (tree)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print t.leaf_treeposition(10) #Note that leaves are numbered starting from 0!" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "(1, 1, 1, 1, 0)\n" ] } ], "prompt_number": 16 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We should read this treeposition as: _Start from the root, select the second child for times, and select the first child_. We will come back later with treepositions. \n", "\n", "There another, interesting, function: suppose we want to find the node the covers \"join the board as a nonexecutive director\". We can use:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print t.treeposition_spanning_leaves(8,14)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "(1, 1)\n" ] } ], "prompt_number": 17 }, { "cell_type": "markdown", "metadata": {}, "source": [ "That is the t[1][1] tree (observe that the included span is larger than ours, because our span did not matched a complete constituent). The definiion of the function says: the tree position of the lowest descendant of this tree that dominates self.leaves()[start:end]." ] }, { "cell_type": "code", "collapsed": false, "input": [ "print t[1][1]" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "(VP\n", " (VB join)\n", " (NP (DT the) (NN board))\n", " (PP-CLR (IN as) (NP (DT a) (JJ nonexecutive) (NN director)))\n", " (NP-TMP (NNP Nov.) (CD 29)))\n" ] } ], "prompt_number": 18 }, { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "References" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- [nltk.tree.Tree](http://nltk.googlecode.com/svn/trunk/doc/api/nltk.tree.Tree-class.html) reference\n", "- The NLTK Book - 8 [Analyzing Sentence Structure](http://www.nltk.org/book/ch08.html)" ] } ], "metadata": {} } ] }