{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Step 1. Sentence input" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "The first part of the process in ``lambeq`` given a sentence, is to convert it into a :term:`string diagram`, according to a given :term:`compositional scheme `. ``lambeq`` can accommodate any :term:`compositional model` that can encode sentences as :term:`string diagrams `, its native data structure. The toolkit currently includes a number of :term:`compositional models `, using various degrees of syntactic information: :term:`bag-of-words` models do not use any syntactic information, :term:`word-sequence models ` respect the order of words, while fully syntax-based models are based on grammatical derivations provided by a parser.\n", "\n", ":download:`Download code <../_code/sentence-input.ipynb>`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Pre-processing and tokenisation" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Depending on the form of your data, some preprocessing steps may be required to make it appropriate for ``lambeq`` use. Section :ref:`sec-preprocessing` in the :ref:`NLP-101 tutorial ` provides more information about this. Here we will mainly talk about :ref:`tokenisation `, which is crucial in getting correct derivations from the :term:`Bobcat` parser. \n", "\n", "The term `tokenisation` refers to the process of breaking down a text or sentence into smaller units called `tokens`. In ``lambeq`` these tokens correspond to words, since the parser needs to know exactly what kind of words or symbols and punctuation marks are included in the sentence in order to provide an accurate grammatical analysis.\n", "\n", "By default, Bobcat parser assumes that every sentence is delimited by a whitespace, as below:\n", "\n", ".. code-block:: console\n", "\n", " \"John gave Mary a flower\"\n", " \n", "Note however that when working with raw text, this is rarely the case. Consider for example the sentence:\n", "\n", ".. code-block:: console\n", "\n", " \"This sentence isn't worth £100 (or is it?).\"\n", " \n", "A naïve tokenisation based on white spaces would result in the following list of tokens:\n", "\n", ".. code-block:: console\n", "\n", " [\"This\", \"sentence\", \"isn't\", \"worth\", \"£100\", \"(or\", \"is\", \"it?).\"]\n", " \n", "missing, for example, that \"isn't\" represents actually two words and \"(or\" is not a proper word. \n", "\n", "In ``lambeq``, tokenisation is provided through the :py:class:`~.Tokeniser` class hierarcy, and specifically by using the :py:class:`~.SpacyTokeniser` class, based on the popular NLP package `SpaCy `_. Here is an example:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['This',\n", " 'sentence',\n", " 'is',\n", " \"n't\",\n", " 'worth',\n", " '£',\n", " '100',\n", " '(',\n", " 'or',\n", " 'is',\n", " 'it',\n", " '?',\n", " ')',\n", " '.']" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from lambeq import SpacyTokeniser\n", "\n", "tokeniser = SpacyTokeniser()\n", "sentence = \"This sentence isn't worth £100 (or is it?).\"\n", "tokens = tokeniser.tokenise_sentence(sentence)\n", "tokens" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "We can then pass the list of the tokens to the parser, setting the ``tokenised`` argument of the :py:meth:`~.BobcatParser.sentence2diagram` method to True." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "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a2srW1tba7cBoAS7ceOGXFxcrN0GisDcuXMVFRV110ENKPkCAgIUFxcnf39/7dq1S40aNcp2uo8++kjXr1/XH3/8ocqVK0uSwsPD1apVK82ZM0cvvPCCJCk2NlYTJkzQiy++qEmTJkmSnn/+eT3yyCN67bXX1LlzZ/Y/ypjr16+rXLly1m4DFsDrCdyO9QESp84oUzIyMvThhx+qYsWKcnJyUsuWLXX06NEs02R3juaFCxeqYcOGqlChglxdXXX//ffr888/L8LOS5+kpCQNHz5cwcHBcnR0lK+vr1q1apXlyKDt27erdevWcnNzk4uLix555BFt3rw5S51Ro0bJYDDo6NGj6tu3r9zd3eXm5qZ+/frpxo0bpukMBoOuX7+ur7/+2nRaldvfVYyNjVX//v3l5+cnR0dHhYWFadasWVnGyjzX9/fff5/nepTZf9u2beXh4aFy5crpgQceuGu9OXTokJ555hl5enrKyclJDz74oH766afCzFrcgzvPobVr1y49/vjj8vb2lrOzs0JCQtS/f3/rNgmLyO9zx+3mzJmjzp07S5IeffRRTtFUDP35558yGAxZnkf/+OMPGQwGNWjQIMu0bdq0UePGjU2XJ0+erLCwMDk6OiowMFAvvviirl69muU+zZs3V506dfTHH3/o4YcflouLi958800FBwfr77//1vr1603rRfPmzbPcNzk5Wa+88op8fHxUrlw5Pfnkk9l+3B7FU1JSki5evHjXeoTSwdHRUf7+/nlOt3jxYrVv394UMktSVFSU7rvvPn3//fem65YtW6bU1FQNGTLEdJ3BYNDgwYN15swZbd261bwPAEVqz549atOmjVxdXVW+fHm1bNlS27ZtM92euX+5fv16DRkyRL6+vqpYsaIVO4Yl8XoCt7t9fcjP/iFKJ45oLkPGjBkjGxsbvfrqq0pISNC4cePUs2dPbd++Pcf7rFmzRt27d1fLli01duxYSf8eIb1582YNGzasqFovdQYNGqRFixZp6NChql27tuLj47Vp0yYdPHhQDRo00G+//aY2bdqoYcOGeu+992RjY6PZs2erRYsW2rhxo8LDw7PU69Kli0JCQjR69Gjt3r1bM2bMkK+vr2mZzZs3T88//7zCw8NNR5tUq1ZNknT+/Hk1adJEBoNBQ4cOlY+Pj1atWqXnnntOiYmJGj58eJax8rMerVmz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19ixY9WvXz916dJFrVu3tnZLsJLcPz8H5MOIESPk4eGhV155RWvXrtXcuXPVtGnTfN+/d+/eWr9+PUe0FIGLFy9q4MCB+vHHH9WnTx99/vnnOX5UBSVbfv+vkpKSVLFiRT3zzDOqW7euypcvr+joaO3cuTPXo0UKW3PSpEl6//33tW7dOjVv3jzL/ZOTk/XEE0/ot99+k4uLS4F6KKmOHj2qJ554Qo0bN9bIkSNznK6w87iw8rt+xcbG6ssvvzRrTUuss2VZYbfB5l4e4eHhWrBggXr37q2LFy9q0aJFKl++/D3VYL/iXwsWLFCfPn3UsmVLTZs2zdrt3KVDhw5auXKlnnvuOdWpU0dTpkxR586d831/lnPRuXnzpt544w198cUXatGihebMmZPv71VA8VSU+xHm3k688847iouLU79+/XTu3Dm9/vrrMhgMVt83KmnS0tI0ePBgzZgxQ2PGjFH37t1znNZa+15ffvmlgoKC9MEHH+jnn3/WvHnzVKtWrXzfn+1E0YmJiVGfPn20efNmjRgxQu+//761W4IVETSj0AwGg1544QW1aNFCvXv3VmRkpHr16pXjO6IoeidPntTs2bM1efJkGY1GLVmyRE8++aS120Ix4OLioiFDhmj16tVasmSJMjIyFBoaqsmTJ+fr3N2WqDlr1ix169ZNHTt21OzZs1WxYsUC9VHSbN++XT169JC3t7d+/PHHXL/52xLLraQoy4+9OLLE8ujWrZt8fHz05JNPqmnTpho3bpwef/xxM3deesXFxWnMmDH64osv1Lt3b82YMcN0TvTipm3btvrrr780aNAgdenSRW3btpWrq6u128L/79KlS/r22281adIknTlzRp999pleeukl9vFLgaLclpp7LDs7O02dOlWBgYEaOXKk9u7dqw8++EDBwcHsH+TTjh079MYbb2jDhg2aM2eO+vTpk+v01tr3srOz07vvvqu2bduqV69eatCggZ5//vkCf+IJ5nfgwAHNnDlT06ZNk7e3t9avX6/IyEhrtwVrM6JEmTZtmrE4L7bU1FTjJ598YgwJCTFKMlavXt04evRoY2xsrLVbK3Nu3rxpXLBggTEqKspoMBiM5cuXNz7//PPGuLg4a7eGXHh6ehrHjBlj1poeHh7GsWPHmr3muHHjzFrzdtHR0caAgABjhQoVjJMnTzamp6dbbCxrS0pKMg4bNsxoMBiMDz74oDEmJsZiY3Xo0MHYoUMHs9d84oknzFqzffv2xo4dO5q1ZmmzY8cOoyTjvn37LD6Ws7Oz8YsvvrD4OHfas2ePsUmTJkZJxiZNmhh/+eUXY0ZGRpH3UVKcPXvWOHz4cKOTk5PRzc3NOGbMmBIzvzIyMozz58831q9f3yjJ6O/vbxwxYoTx0KFD1m6tzElLSzOuWrXK2LlzZ6ODg4PR3t7e+NRTTxn//vtva7eGe/TOO+8YK1eubPFxoqOjjZIsuv+Sk7lz5xoDAwONNjY2xt69exv/+eefIu+hJNm+fbuxbdu2RknGmjVrGlevXm3tlvLt+vXrxrffftvo5+dnlGSsX7++cdKkScbLly9bu7UyJyEhwTht2jRj48aNjZKMXl5exldffdWYmJho7dZQTPB2NMzKzs5OL7/8so4eParffvtNjRs31vvvv6/KlSurVatW+u9//6vffvtN169ft3arpU56err27dunyZMnq2fPngoMDFT37t1169YtzZw5U3FxcZo+fTpf/IcSoWXLljpw4IC6deumIUOGqGnTpvrmm2908+ZNa7dmNhcuXNCECRMUFhamadOm6eOPP9bWrVsVEhJi7daAYqFevXrasmWL6QtCW7durfDwcI0bN04HDx7ko7D69+PMixcvVt++fVW1alXNnj1bb7zxhk6cOGH6OHlJYDAY1L17d+3evVu7d+/WM888o+nTp6tmzZpq0qSJRo4cqRUrVujy5cvWbrXUMRqNOnLkiObMmaMBAwYoODhYbdq00YEDBzRmzBjFxsZq8eLFql27trVbBe7y7LPP6tixY/r8888VHR2tmjVr6umnn9bcuXN18eJFa7dXLJw6dUqTJ09WVFSUGjdurJiYGM2fP1/79+9Xq1atrN1evrm4uOi///2vTp8+rWXLlqly5coaNmyYAgIC1LFjR40fP15btmzh+zosICUlRdu3b9cnn3yip59+WgEBARo0aJA8PT21aNEinT17VuPHj1eFChWs3SqKCU6dAYuwsbHRo48+qkcffVQTJ07UwoUL9dNPP2nChAl69913ZWtrq3r16ikiIkIRERFq3LixKlWqxEfx7sGVK1e0e/dubd68WZs3b9a2bduUmJgoOzs7NWjQQIMGDVKfPn1Uo0YNa7cKFIi7u7umTZumHj166P3339ezzz6roUOHqnv37urfv78aNmxY4p4zUlJStHr1as2aNUvLly+XjY2NnnrqKX344YeqWrWqtdsDih2DwaDHHntMrVq10po1a/Tll19q1KhRev3111WtWjV16NBB7du3V9OmTcvEN5sbjUYdO3ZMq1at0vLly/X7778rNTVVderU0VtvvaWhQ4eW+HPn1q9fXxMnTtT48eO1bNky/fDDD5ozZ47GjBkjSapVq5Zp//Ghhx5StWrVZGfHS5r8unbtmv766y/T/uOWLVt04cIFGQwGhYWFqWPHjurdu7caNWpUYt6oQNnm5OSkoUOH6vnnn9fMmTM1b9489e3bV5L00EMPqUOHDmrXrp1q165dJr6bJiUlRbt379aKFSu0fPly/fnnn7Kzs9Mjjzyi+fPnq0uXLiV6Ptjb2+uJJ57QE088oXPnzmnevHlatWqVRo0apRs3bsjR0VEPPvigaTvRqFEj+fv783yWT0ajURcvXtSuXbu0efNmbdq0STt37tTNmzfl5OSk8PBwvfXWW+rdu3eZOb0h7h17ZbA4d3d3DRo0SIMGDVJGRoYOHDhg2rldsWKFvvjiC0mSo6OjqlatqtDQUFWrVs30u1q1agoODi625xe0FKPRqHPnzuno0aM6duyYjh07Zvr76NGjunLliqR/52/Tpk31+uuvmzamZe0L1FC6NW/eXM2bN9fRo0c1e/ZszZkzR1OmTJGHh4eaNm2aZUeyuAVNly9f1pYtW0zPeTt37tStW7dUt25dffLJJ+rZs6c8PT2t3SZQ7GUGzo899phu3ryp3377TcuXL9cPP/ygzz77TDY2Nrrvvvv0wAMPZPmpXLlyiX1xmZSUpP379+vPP//M8pOYmCh7e3s1b95cEyZMUPv27UvlJyGcnJzUtWtXde3aVUajUcePHzc9l27evFkzZ86U0WiUnZ2dqlSpku3+Y9WqVYvddsHSjEajLl++nOP+4/nz5yVJzs7Oaty4sQYMGGAK7Uv6mxQo25ycnPTiiy/qxRdf1Pnz57Vy5UotX75c//3vfzVy5Eg5OzurTp06qlu3rmkbcf/995fY/TCj0ajz58/rzz//1L59+0zbiIMHDyo1NVWenp5q27at3nrrLT3++ONyc3Ozdstm5+/vr9dee02vvfaaUlNTtW/fPtM24ptvvtG4ceMkSeXKlTNtF+7cVlSqVKlEB+8FkZGRoTNnzmTZPtz+d1JSkiTJz89PERER+t///qeIiAjVr19fDg4OVu4eJQFBM4qUjY2N6tSpozp16mjgwIGS/v3Smt27d2d5cvv55591/Phx04n+bW1tFRAQIA8PD3l4eMjd3T3X37f/7eLiYtUXmSkpKbpy5YquXr2ar9+Zf587d043btww1QkKClK1atV0//33q1OnTgoNDVVYWJhq1apV4o7qBAoiNDRUH374oT744AOtX79eGzdu1ObNmzV69GglJSXJ3t5e1apVU1BQkCpWrJjtbx8fH7P9v6SmpurcuXM6c+aMYmNj7/p9+vRpnThxQtK/O8IRERH66KOP1KJFC9WtW9csPQBlkbOzs9q1a6d27drJaDRq37592rVrl+nF9urVq3X16lVJkqurq4KCguTr6ysfH59cf3t6elp8e3r9+nVdvHhRFy5cyPP36dOnJf27D1SjRg098MADatu2rR544AFFRkaWqS/NMxgMqlq1qqpWrapnn31WknT16lXt2rVLR48eNe0/btiwQbNnz85ymiV/f395enrmub945+8KFSpYdf8xLS1NV69ezXE/MaffFy5cUEJCgqmOj4+PKVSJiopSaGioatasqbp165a5gzhQdvj5+al///7q37+/bt26pc2bN5vC2D/++ENz585VSkqKpH+fI/z9/fPcRvj4+Fj8ecFoNJr+j7PbNtz+99mzZxUfHy/p3yD1/vvvV5MmTfTCCy+ofv36Cg8PL1Of9rC3t9eDDz6oBx98UMOGDZPRaNTJkye1d+/eLEHq4sWLdfLkSaWnp5vul5+cIbvrnJycrLqduHXrVr5yhTt/x8XFmU4xYmNjo8qVK6tatWpq3LixevTooWrVqqlu3bqqWrVqiX2zHtZVdp55UGwFBASoXbt2d12fnp6uM2fOmF48nD59OssT5JEjR7Jczuncrfb29nJ3d5e7u7ucnZ1lZ2d3Tz/ly5dXQkKC0tLS8v2TkpKihIQEXb16NUtYfDtbW9u7NlheXl4KDQ2Vu7u7fH19Te+0lsUjcoCc2NraqkWLFmrRooWkf58r/vrrL23ZskVHjhxRbGys/vnnH/322286e/asaUdS+vc88m5ubnJ0dJStra1sbGxkY2Mjg8Fg+nFyctKtW7dM5381Go3KyMiQ0WhUenq6MjIydOPGDSUkJGQ5R6yTk5Mp0K5cubIeeugh1alTRxEREQoJ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IW3fvl1bt27VsmXLdOHCBdWsWVO9evVSjx49rH6EGEc0A0DJwxHNAABr4IhmFIqNjY18fX3l6+t7T/fLyMhQUlJSvgLpuLi4HAOp/LxPYmtrW6Cg2snJSfb29vf8Y2dnl+vtnFcTRcloNCotLU2pqamF+rmzRnJycoGC4uw+AZEdJyenbP8v3dzcFBISooYNG+YaGru7u8vOjk1cTlxdXbVgwQK1adNG9evX15dffqnHH38813mWlpamX3/9VS+++KISExP1yy+/FHnILEkODg7q2LGjOnbsqISEBC1evFjff/+9xo0bp8TERElSzZo11bhxYzVs2FCVKlVSQECAAgMDrfZGgtFo1NWrVxUXF6ezZ8/q7NmzpnB5586dSkpKksFgUK1atdSzZ0/16tVL9evX501SAAAAACUKr8JhFTY2NnJzczOFRgVhNBp169atewq5srvuwoUL2d5+69atLF+WaC42NjZmCawLG3zb2NjIYDDIYDBk+dsc11miZuYyz+4nIyPDrNeZq2ZBA15zBMOZddLS0sy+Dtva2srBwSHHN2tcXV3l7++fr08d5HQdb8hYXuPGjbVnzx716NFD7du3l6+vr7p06aIWLVqoXLlysrGxUUZGhq5fv67ffvtN33//vS5cuKCmTZtqw4YNqly5srUfgtzc3NS/f3/1799fGRkZ+ueff7R9+3bTz/z58+96Hvfx8VFgYKApfM7828vLS46OjnJwcLjrx9HRUfb29srIyFBycrJSUlLu+klOTtb169d17tw5nT17NkuoHBcXp1u3bmXpIyAgQOHh4Ro5cqQaN26sBx98UK6urkU5+wAAAADArAiaUWIZDAY5OzvL2dlZXl5eFhnDaDQqPT3dLKGfucLEmzdvKjExsUBjpKenW2Q+FYUqVapY/KN/lmIwGAr1ZoGTk5PKly9vljceCvvmhp2dHSFwKVKlShVt2rRJq1ev1pgxYzR16lRNmjRJ0r8hbuZ5rO3t7RUREaG5c+fqscceK5ZH2trY2KhmzZqqWbOm+vTpI+n/nd7pztA38+/9+/dr9erViouLy/P5sW7dutq3b1+efbi7u5tC7KpVqyoiIiJLoJ3529nZ2SyPGwAAAACKC4JmIBcGg0F2dnays7MrFaFARkaGKXy+80jcezmy1xrXZwZbhTl6uqivzwxubW1trbzkgexduXJFgwYN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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from lambeq import BobcatParser\n", "\n", "parser = BobcatParser(verbose='suppress')\n", "diagram = parser.sentence2diagram(tokens, tokenised=True)\n", "\n", "diagram.draw(figsize=(23,4), fontsize=12)" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ ".. note::\n", "\n", " More details about :term:`DisCoCat` and syntax-based models will follow below.\n", " \n", "To tokenise many sentences at once, use the :py:meth:`~.SpacyTokeniser.tokenise_sentences` method:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[['This', 'is', 'a', 'sentence', '.'],\n", " ['This', 'is', '(', 'another', ')', 'sentence', '!']]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sentences = [\"This is a sentence.\", \"This is (another) sentence!\"]\n", "\n", "tok_sentences = tokeniser.tokenise_sentences(sentences)\n", "tok_sentences" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Finally, ``lambeq`` provides tokenisation at the sentence-level:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['I love pizza.', 'It is my favorite food.', 'I could eat it every day!']" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "text = \"I love pizza. It is my favorite food. I could eat it every day!\"\n", "sentences = tokeniser.split_sentences(text)\n", "sentences" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ ".. note::\n", "\n", " To simplify the rest of this tutorial, all sentences in the following sections will be delimited by white spaces, so that the parser can tokenise them properly without extra handling." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Syntax-based model: DisCoCat" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "In order to obtain a :term:`DisCoCat`\\ -like output, we first use the :py:class:`.BobcatParser` class from :py:mod:`~lambeq.text2diagram` package, which, in turn, calls the :term:`parser`, obtains a :term:`CCG ` derivation for the sentence, and converts it into a :term:`string diagram`. The code below uses the default :term:`Bobcat` parser in order to produce a :term:`string diagram` for the sentence \"John walks in the park\".\n", "\n", ".. note::\n", " \n", " ``lambeq``'s string diagrams are objects of the class :py:class:`lambeq.backend.grammar.Diagram`." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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tm3bVjfddJNuuukm5ebm6rzzzlNSUpImTpzYAGsNAC1bfd66MCQkRH5+fiopKdFFF13UgFMBDWPXrl1Oe8hTUlJUWlqq6OhoffTRRyooKNCHH37o9KySr776qs7LiY2N1ezZszV06FCNHDlSX3zxhfz8/BpkHWAe9rS7mIiICJ199tlavHixTpw44Tj9p59+0qeffqqLL77YvOGAOkhISNCGDRv01VdfOaI9ODhY3bt3d+xBLzu9bA9M+T2JhYWF+vvf/16nZV500UV69913tXr1al1//fVOj2xnZGQ4nbd169aKjY1VQUFB3VcOAFBB2U6F8vdfasvNzU1XXnml3n//ff30008Vvn7s2LH6jgfUy8svv+z0edlbsCUmJlZ6PyYrK0tvvPHGGS2rV69e+uSTT/TLL7/o0ksv5X3cXQB72l3QM888o8TERJ177rmaMGGC4y3fAgIClJSUZPZ4QK0kJCToiSee0MGDB51eVOu8887Tq6++qujoaLVv316SNGjQILVp00Y33nij7rjjDtlsNr311ltn9HTgP/3pT3rjjTd0ww03yN/f3/Hep3FxcRo6dKji4+PVtm1bbd68WUuXLtW0adMaZoUBoIWLj4+XJE2fPl1XX321WrVqpUsvvbTW3//UU0/pq6++0oABA3TLLbcoLi5Ox48f19atW/X555/zVGGYau/evbrssss0cuRIfffdd1qyZInGjRun3r17y8vLSx4eHrr00ks1efJk5ebmauHChQoNDVVaWtoZLW/gwIFasWKFLr74Yl111VVavny5WrVq1cBrhabCnnYXUBYmZY/SXXTRRVq9erWCgoL08MMP69lnn9XAgQP1zTffVPvCFYCVDBo0SG5ubvLz81Pv3r0dp5d/qnyZoKAgrVy5UhEREZoxY4aeffZZDRs2TLNnzz6jZV933XV6+eWXtWDBAt13332SpDvuuEP79u3TrFmzdMcdd+g///mPHn/8cc2ZM6ceawkAKNOvXz899thj2r59u8aPH69rrrmmTnvIw8LCtHHjRt10001atmyZ4xW0jx8/7niGFmCWf/3rX/L09NQDDzygjz/+WNOmTdNrr70m6fcXkF66dKlsNpv+8pe/aP78+Zo0aZLuvPPOei3zggsu0L///W99+umnFZ5BiObFZrjoK9OEhITo3nvv1QMPPGD2KI1u7ty5uvPOO5WS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nTpVpaWlZo+DFuLAgQOaNm2aRo0apdGjR5s9DiyAaAeABjR58mQVFRUpKSmJ90RtBtLT0zV79mxddtll6tSpk9njoJzg4GCNGzdOL774og4dOmT2OKiFZ555RsePH9e0adPMHqXBtG/fXosWLdK7776riRMnEu5odAcOHNAf//hHtWrVSvPnz5fNZjN7JFgA0Q4ADSgsLEyzZ8/W3LlzNX36dMLdwtLT03XhhRcqOztbTz31lNnjoBJJSUny8PDQ0KFDCXeLe/bZZ/XII49oxowZio2NNXucBvXnP/9Zb731lhYvXqxRo0Zp//79Zo8EF7Vy5UoNGjRIpaWl+vrrr9W+fXuzR4JFEO0A0MDuuusuzZkzR7NmzSLcLaos2A8fPqyvvvpKf/jDH8weCZWIiorS119/reLiYsLdwp599lndd999mj59umbOnGn2OI1i3Lhx+uijj/Tjjz+qR48eevHFF1VSUmL2WHARR44c0dVXX61LL71UPXv21Nq1a9WxY0ezx4KFEO0A0AjuueceR7jff//9KioqMnsk/L+DBw86BXtcXJzZI6Ea0dHRTuG+a9cus0fC/yspKdGTTz7pCPbHHnvMpZ/Ke/HFF+vnn3/WjTfeqLvvvluDBg3SmjVreGAWZ+zkyZOaP3++unfvri+++EJLlizRqlWr2MOOCoh2AGgk99xzj5577jnNmTNHPXv21IoVK7hzZ6KcnBzNmDFDXbt21bFjxwj2ZqQs3EtLS9WjRw/dc889On78uNljtWifffaZ+vbtq+nTp+tvf/ubywd7GX9/f7388stat26dTp48qfPPP19/+MMf9PTTTystLc3s8dAMGIah9evXa9KkSYqIiNCtt96qSy65RL/88ouuvfbaFnE9Qt0R7QDQiO6++259//336tixo/70pz9p6NCh2rx5s9ljtSjFxcWaP3++YmNjNWfOHN1zzz3auXMnwd7MREdH66efftIjjzyihQsXKiYmRs8995wKCgrMHq1F+emnn5SYmKjhw4fLz89P69ev16OPPtriQmPQoEH64Ycf9OWXX6pfv35KSkpShw4ddOmll2r58uU8uwoVHD161PEg/rnnnqvVq1fr7rvv1p49e/Tmm28qODjY7BFhYUQ7ADSy3r17Kzk5WatWrVJGRob69euna6+9VuvWreOViBtRdna23nrrLfXq1Uu33nqr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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from lambeq import BobcatParser\n", "\n", "sentence = 'John walks in the park'\n", "\n", "# Parse the sentence and convert it into a string diagram\n", "parser = BobcatParser(verbose='suppress')\n", "diagram = parser.sentence2diagram(sentence)\n", "\n", "diagram.draw(figsize=(14,3), fontsize=12)" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ ".. note::\n", "\n", " Recall from previous section that when the input to :py:meth:`~.sentence2diagram` method is a list of tokens, you should also set ``tokenised`` argument to True (by default is set to False).\n", "\n", "Another case of syntax-based models in ``lambeq`` is :ref:`tree readers `, which will be presented later in this tutorial." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Bag-of-words: Spiders reader" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ ":term:`DisCoCat` is not the only :term:`compositional model` that ``lambeq`` supports. In fact, any compositional scheme that manifests sentences as :term:`string diagrams `\\ /:term:`tensor networks ` can be added to the toolkit via the readers of the :py:mod:`.text2diagram` package. For example, the :py:obj:`~lambeq.text2diagram.spiders_reader` object of the :py:class:`.LinearReader` class represents a sentence as a \":term:`bag-of-words`\", composing the words using a :term:`spider` (a commutative operation)." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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X/+HP/xh1KpVKyZOnHhcrh8VKy/1ABybZ599Ni655JLo3LlzjB8/Pnbt2hUTJ06M/v37x8KFC8u8qEVExOjRo6NTp05xxx13xMKFC+NXv/pVFBQUxI9+9KMyl5szZ0489thjcf3110ejRo3i5z//eXzhC1+IlStXRosWLU7gNQSORs+ePaNp06bx0ksvxfDhwyMiYvbs2VGrVq3485//HFu3bo3GjRtHSUlJzJ07N7761a9GxMeRoWHDhnHLLbdEw4YN4/nnn4/vfe97sXXr1vjxj3981F+/uLg4vvzlL8fkyZNjypQpcdlll0XExzdG7rjjjvjKV74S55xzTmzdujVef/31WLhwYQwZMqTivxFAMu+9916MGjUqrrnmmvjSl74Uv/71r+Oqq66Ks88+O3r06JF6POA4+sd//Mf461//Gg8//HD89Kc/jZYtW0ZERKtWrSLi6O5brFmzJs4777zsxhKtWrWKp556Kq655prYunVr3HTTTamuHlBBRo8eHR07dow77rgjXn311fj5z38emzZtyj6g+Ytf/CJ69OgRw4cPj7y8vJgxY0Zcf/31UVJSEt/4xjfKfK533nknrrzyyvja174W1157bZx22mkH/Zq33XZb/Md//Ef88pe/jGuvvfa4X0c+OYGyivrWt74VzZs3j1deeSWaN28eEREjR46Ms846K77//e/Hb37zmzKXP+uss+LBBx/Mnt6wYUM8+OCDBwTKJUuWxOLFi+PUU0+NiIhBgwbFmWeeGQ8//LBXxIJKqFatWtG/f/+YPXt29rzZs2fHyJEjY9q0aTF37ty4+OKLs7FywIABERHxxz/+MerVq5f9mOuuuy6uu+66uO++++KHP/xh1KlT54hfu6ioKMaOHRvTp0+P6dOnxz/8wz9k3/fEE0/EpZdeGg888EAFXlugMnrnnXfipZdeyq4vo0ePjvbt28dDDz0UEyZMSDwdcDydccYZ0bt373j44Ydj5MiRB2wkcTT3Lf71X/81iouL46233spGy+uuuy6uvPLKGD9+fHzta18rc5sFqHo6deoU06ZNi4iIb3zjG9G4ceO477774tZbb40zzjgjZs2aVebvfNy4cXHxxRfHT37ykwMC5XvvvRczZ86Mz33uc4f8erfeemv89Kc/jYceeii+9KUvHZ8rRYXzFO8qaPXq1fHmm2/GVVddlY2TER/fQBgyZEg8+eSTB3zMddddV+b0gAEDYsOGDbF169Yy5w8ePDh7A6L0czZu3DiWLVtWwdcCqCgDBgyIhQsXxo4dOyLi460VLr300vj0pz+dDZezZ8+OnJycOP/88yMiytwA2LZtW6xfvz4GDBgQO3fujKVLlx7xa+7Zsycuv/zyePzxx+PJJ58sEycjIpo2bRqLFi2Kd999t6KuJlBJde/ePRsnIz7ecuq0005z2wE44n2LTCYTf/rTn2LYsGGRyWRi/fr12cPnPve52LJlSyxcuDDV+EAF2T8yfvOb34yIyLaLfe+bbNmyJdavXx+f/exnY9myZbFly5YyH9upU6dDxslMJhPjxo2Lu+++O37/+9+Lk1WMLSiroL/97W8REQfdlLlbt27xP//zP7Fjx45o0KBB9vwOHTqUuVyzZs0iImLTpk3RuHHjQ16u9LKbNm2qkNmBijdgwIAoKiqKV155Jdq3bx9r166NAQMGxKJFi8oEyu7du2cf1Fi0aFHcdttt8fzzzx/wQMX+NwIO5o477ojt27fHU089FQMHDjzg/T/4wQ9ixIgR8alPfSp69uwZF198cXzxi1+MM84445NfYaBScdsBOJQjrQ/r1q2LzZs3xwMPPHDIZ12sXbv2uM4IHH9du3Ytc/rUU0+NWrVqZfdX+/LLL8f3v//9eOWVVw54rYwtW7ZEkyZNsqc7dep0yK/z29/+NrZv3x6/+MUv4sorr6y4K8AJYQvKGiI3N/eg52cymWO6HFB59OnTJ+rWrRsvvfRSzJ49OwoKCuJTn/pUDBgwIObNmxe7d++O2bNnZ7dw2rx5c3z2s5+NP//5z/GDH/wgZsyYEc8880x2lw8lJSVH/Jqf+9znokGDBnHnnXeW2cF1qQsuuCDef//9+PWvfx09e/aMX/3qV9G7d+/41a9+VbFXHkjObQfgUI60PpTe5hg7dmw888wzBz3079//hM0LnBg5OTnZ4++//35cdNFFsX79+vjJT34STzzxRDzzzDNx8803R8SB900Ot8uH/v37R+vWreOee+6JjRs3Hp/hOW5sQVkFnXLKKRHx8T6f9rd06dJo2bJlma0ngeotPz8/zjnnnJg9e3Z06NAhGyIHDBgQu3fvjj/84Q+xZs2auOCCCyIi4sUXX4wNGzbEY489lj0vImL58uVH/TXPO++8uO6662Lo0KFx+eWXx5QpUyIvr+y/lObNm8fVV18dV199dWzfvj0uuOCCGD9+fHzlK1+pgGsNAFQG+4aG8mrVqlU0atQoiouLY/DgwRU4FVCZvPvuu2W2fHzvvfeipKQkOnbsGDNmzIjdu3fH9OnTy2x1/cILL5T763Tp0iXuvPPOGDhwYFx88cXx3HPPRaNGjSrkOnD82YKyCmrTpk18+tOfjt/85jexefPm7Plvv/12PP3003HppZemGw5IYsCAAfHaa6/FCy+8kA2ULVu2jG7dumW3jCw9v3Rrhn23btqzZ0/cd9995fqagwcPjkmTJsXMmTPji1/8YplHNzds2FDmsg0bNowuXbrE7t27y3/lAIBKq3TDiH3vlxyt3Nzc+MIXvhB/+tOf4u233z7g/evWrfuk4wGVwL333lvm9MSJEyMi4pJLLjnofZMtW7bEQw89dExf64wzzognn3wylixZEsOGDYtdu3Yd49ScaLagrKJ+/OMfxyWXXBKf+cxn4pprroldu3bFxIkTo0mTJjF+/PjU4wEn2IABA+Lf//3f44MPPijzYhUXXHBB/PKXv4yOHTvGySefHBER/fr1i2bNmsWXvvSluOGGGyInJyd+97vfHdPTMUeOHBkPPfRQ/PM//3M0btw4fvnLX0bExy+aMXDgwDj77LOjefPm8frrr8ejjz6afcVOAKB6OPvssyPi41fjHjNmTNSuXTuGDRt21B////7f/4sXXnghzj333Lj22muje/fusXHjxli4cGE8++yznqYJ1cDy5ctj+PDhcfHFF8crr7wSv//97+Of/umf4swzz4y6detGfn5+DBs2LL72ta/F9u3b4z//8z+joKAgVq9efUxf77zzzotp06bFpZdeGqNGjYqpU6dG7dq1K/haUdFsQVlFlIaD0kcXBg8eHDNnzowWLVrE9773vZgwYUKcd9558fLLLx92p7FA9dSvX7/Izc2NRo0axZlnnpk9f9+ne5dq0aJFPP7449GmTZu47bbbYsKECTFkyJC48847j+lrjx07Nu6999544IEH4lvf+lZERNxwww2xYsWKuOOOO+KGG26IWbNmxQ9/+MO46667PsG1BAAqm759+8a//du/xZ///Oe46qqr4sorryzXlo+tW7eOefPmxdVXXx2PPfZY9hV4N27cmH0WCFC1TZ48OerUqRPf+c534oknnohx48bFgw8+GBEfv/jv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nKd4U+FKSkri9ddfj6lTp8a0adNi8eLFUbdu3RgyZEiMHDkyhg4dGgUFBanHBCrY3r1742c/+1mMHz8+mjdvHj//+c9j5MiRXsETqjlP8YaaIZPJxJQpU+KGG26ITZs2xe233x433nijKAHV0Nq1a2PGjBkxbdq0eOaZZ6KwsDC6d+8eI0aMiJEjR0afPn2iVi3bu1GxBEqOu3fffTemTZsWU6dOjblz50ZERP/+/WPEiBHZVwUHqo+//e1vMW7cuHj88cdj2LBhMXHixDjllFNSjwUcJwIlVH/+t0P15347qQmUnFBr166Nxx9/PKZOneqRGKjG9t/KYvz48XHTTTfZygKqIYESqq99nx3RrFmzmDhxomdHQDXhmY9UNgIlyezYsSOefvrpmDZtWsyYMSM2btwYbdq0iaFDh8aAAQOiX79+0blzZzeAoArbtm1bfPe7342JEydGjx494t///d/jsssu80AEVCMCJVQ/JSUl8cQTT8S//uu/xqJFi+KGG26IH/zgB9GoUaPUowHHKJPJxLJly2Lu3Lkxe/bsePzxx2P16tXRokWLGDp0aIwcOTKGDBkSDRo0SD0qNZRASaVQVFQUL7/8ckybNi1mzpwZS5YsiYiPXy28X79+2UPv3r2jbt26iacFymvhwoVxww03xMsvvxynn356/O///b9j7Nix/p6hGhAoofooLCyM3/3ud3HXXXfFO++8E+eff37cfffd0bt379SjAeVUWFgYCxcujLlz58bLL78cc+fOjbVr10ZERLdu3eLiiy+OESNGRP/+/SMvLy/xtCBQUklt3LgxXn311exCOm/evNi5c2fk5+dHnz59ykTL1q1bpx4XOEpz586NCRMmxNSpU6OgoCC++c1vxte//vVo3rx56tGAYyRQQtW3YcOGuP/++2PixImxdu3aGDlyZNx6663Rr1+/1KMBR2nNmjUxd+7cbJBcsGBB7NmzJ+rXrx/nnHNO9O/fP/r16xfnnXee295USgIlVcLevXvjL3/5SzZYzp07Nz744IOIiDj11FPLBMsePXpEbm5u4omBw/nrX/8aP/3pT+O//uu/olatWnHNNdfEzTffHJ06dUo9GlBOAiVUXcuXL4+f/OQn8etf/zpKSkriqquuiltuucWLYUAlV1xcHIsWLSoTJJctWxYREe3bt49+/fplg+QZZ5xhP/BUCQIlVdYHH3yQXZDnzp0bb7zxRhQXF0fjxo3jvPPOyy7K5557rv3lQCW1du3auO++++Kee+6JTZs2xahRo+LWW2+Nvn37ph4NOEoCJVQ98+fPjwkTJsSjjz4azZs3j3HjxsX1118frVq1Sj0acBBbt26N1157LXvf99VXX42tW7dGbm5unHXWWdn7vp/5zGeiffv2qceFYyJQUm3s2LEj5s+fXyZabtq0KWrVqhXdu3ePM844I3r27Jk9nHLKKV6oAyqJnTt3xm9+85u466674v33349+/frFP/3TP8Xll1/u1QOhkhMooWpYs2ZNPProo/GHP/whXnnllejSpUvccsst8aUvfSnq16+fejwgPn6Bqr/97W/x9ttvZw9/+ctfYvHixVFSUhLNmjXLPnOwf//+0adPHy9qQ7UhUFJtlZSUxDvvvJPdh+WiRYvi7bffji1btkRERMOGDaNHjx5lomXPnj2jdevWXjkcEikuLo5p06bFgw8+GE8//XSUlJTERRddFGPGjInPf/7z0axZs9QjAvsRKKHy2rRpU0yZMiUmTZoUzz33XNSqVSv+4R/+Ia655poYMWKE3SJBIplMJtasWVMmRL711luxaNGi2LFjR0RENGnSJHr27Bk9evSIc845J/r16xennXaajWyotgRKapRMJhOrVq2Kt956q8w/g8WLF0dhYWFERLRo0aJMsOzVq1f06NEjmjZtmnZ4qGE2bNgQjz32WDz88MPx4osvRl5eXlxyySUxZsyYGDZsWDRs2DD1iEAIlFDZbN++PWbMmBEPP/xwzJw5M4qKimLQoEExZsyY+Md//Mdo0aJF6hGhRtm8eXOZ+56lhw0bNkRERN26daN79+5l7n/27Nkz2rVrZ8MZahSBEuLjrbaWLVt2wCNYf/3rX6O4uDgiIk4++eQDtrbs1q2bp8TACbB69er47//+75g0aVK88sorUa9evRg2bFiMGTMmLrnkkqhbt27qEaHGEighvcLCwnjqqadi0qRJMWPGjNi1a1d85jOfiTFjxsTll18ebdq0ST0iVHs7d+6MJUuWHBAiP/zww4iIyM3NjdNOO+2A+5SdO3e2NTOEQAmHtXv37njnnXcO+CezfPnyiIjIycmJU089NbvpfZcuXaJz587RuXPnaNu2rc3v4ThYsWJFTJ48OSZNmhRvvvlmNG7cOD7/+c/HsGHDYtCgQdG8efPUI0KNIlBCGhs3bowXXnghZsyYEVOmTImtW7fGpz/96RgzZkxcccUV0bFjx9QjQrVTUlISH330USxbtiyWLVsW7733XnZXYu+//36U5pVOnTodECJPO+20qFOnTuJrAJWXQAnHYPv27bF48eIy0XLRokXx0UcfZS9Tp06d6NixY5x66qnZaFl66NSpk6enQgVYsmRJTJ48OR555JFYsmRJ5OTkxNlnnx2DBw+OwYMHR//+/W1dCceZQAknRmFhYbz88svx7LPPxrPPPhsLFiyITCYT3bp1i9GjR8eYMWPi9NNPTz0mVHnbt2+P5cuXZyPk+++/nz2+YsWK2L17d/aybdu2PeB1Dbp37+6+HhwDgRIq0K5du2LFihXZf2D7/0PbtWtX9rIFBQUHhMvSQ7t27Wx9CeW0cuXKeO6557J33NauXRt169aN888/PxsszzrrLH9bUMEESjg+iouL480338z+X5szZ04UFhZGQUFBDB48OIYMGRIXXXRRtG/fPvWoUKWUlJTEqlWrytxn2/ewdu3a7GXr169/yPtsHTt2jHr16iW8JlC9CJRwgpS+Utuh/hGuWrUqe9n8/Pzo2LFjdO7c+YAtMDt16hSNGjVKeE2g8stkMvH2229n79TNmjUrduzYEc2bN4+LLrooGyw7d+6celSo8gRKqDjLli2LZ599Np555pl4/vnnY+PGjdGgQYP47Gc/m/3f1bNnTy+cAUewbdu2w24FuWfPnuxl27Vrd8gI2bp1a39vcIIIlFBJFBYWHrD15b6HHTt2ZC/bqlWr7D/N9u3bR7t27aJt27bZt23atIn8/PyE1wYqlz179sRrr72WvdM3b968KC4ujk6dOsWFF14Y5513XvTt2zd69OgReXl5qceFKkWghGNTVFQUixYtivnz58err74azz//fCxfvjxyc3Pj3HPPzQbJc8891+062MeePXti9erV8dFHH8WqVauybz/44IPsfad169ZlL9+gQYPDbgVpd0BQOQiUUAVkMplYt27dQR8B/PDDD2PVqlVl9oUS8XHE3D9c7v+2ZcuWnu5KjbRly5aYNWtWPPvss/HCCy/E4sWLo6SkJOrVqxdnnXVW9O3bN/r06RN9+/aNrl27+juBwxAo4chKSkri3Xffjfnz52cPb7zxRhQWFkatWrWie/fuMWjQoBg8eHAMHDgwGjdu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AEAyAiUAAAAAkIxACQAAAAAkI1ACAAAAAMkIlAAAAABAMgIlAAAAAJCMQAkAAAAAJCNQAgAAAADJCJQAAAAAQDICJQAAAACQjEAJAAAAACQjUAIAAAAAyQiUAAAAAEAyAiUAAAAAkIxACQAAAAAkI1ACAAAAAMkIlAAAAABAMgIlAAAAAJCMQAkAAAAAJCNQAgAAAADJCJQAAAAAQDICJQAAAACQjEAJAAAAACQjUAIAAAAAyQiUAAAAAEAyAiUAAAAAkIxACQAAAAAkI1ACAAAAAMkIlAAAAABAMgIlAAAAAJCMQAkAAAAAJCNQAgAAAADJCJQAAAAAQDICJQAAAACQjEAJAAAAACQjUAIAAAAAyQiUAAAAAEAyAiUAAAAAkIxACQAAAAAkI1ACAAAAAMkIlAAAAABAMgIlAAAAAJCMQAkAAAAAJCNQAgAAAADJCJQAAAAAQDICJQAAAACQjEAJAAAAACQjUAIAAAAAyQiUAAAAAEAyAiUAAAAAkIxACQAAAAAkI1ACAAAAAMkIlAAAAABAMgIlAAAAAJCMQAkAAAAAJCNQAgAAAADJCJQAAAAAQDICJQAAAACQjEAJAAAAACQjUAIAAAAAyQiUAAAAAEAyAiUAAAAAkIxACQAAAAAkI1ACAAAAAMkIlAAAAABAMgIlAAAAAJCMQAkAAAAAJCNQAgAAAADJCJQAAAAAQDICJQAAAACQjEAJAAAAACQjUAIAAAAAyQiUAAAAAEAyOZlMJpN6CAAAAACgZrIFJQAAAACQjEAJAAAAACQjUAIAAAAAyQiUAAAAAEAyAiUAAAAAkIxACQAAAAAkI1ACAAAAAMkIlAAAAABAMgIlAAAAAJCMQAkAAAAAJCNQAgAAAADJCJQAAAAAQDICJQAAAACQjEAJAAAAACQjUAIAAAAAyQiUAAAAAEAyAiUAAAAAkIxACQAAAAAkI1ACAAAAAMkIlAAAAABAMgIlAAAAAJCMQAkAAAAAJCNQAgAAAADJCJQAAAAAQDICJQAAAACQjEAJAAAAACQjUAIAAAAAyQiUAAAAAEAyAiUAAAAAkIxACQAAAAAkI1ACAAAAAMkIlAAAAABAMgIlAAAAAJCMQAkAAAAAJCNQAgAAAADJCJQAAAAAQDICJQAAAACQjEAJAAAAACQjUAIAAAAAyQiUAAAAAEAyAiUAAAAAkIxACQAAAAAkI1ACAAAAAMkIlAAAAABAMgIlAAAAAJCMQAkAAAAAJCNQAgAAAADJCJQAAAAAQDICJQAAAACQjEAJAAAAACQjUAIAAAAAyQiUAAAAAEAyAiUAAAAAkIxACQAAAAAkI1ACAAAAAMkIlAAAAABAMgIlAAAAAJCMQAkAAAAAJCNQAgAAAADJ/H9/ju+sDvxdCAAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from lambeq import spiders_reader\n", "\n", "# Create string diagrams based on spiders reader\n", "spiders_diagram = spiders_reader.sentence2diagram(sentence)\n", "\n", "# Not a pregroup diagram, we can't use grammar.draw()\n", "spiders_diagram.draw(figsize=(13,6), fontsize=12)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Word-sequence models: Cups and stairs readers" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "The :py:class:`.LinearReader` class can be used to create any kind of model where words are composed in sequence, from left to right. For example, the :py:obj:`~lambeq.text2diagram.cups_reader` instance of this class generates a \":term:`tensor train`\"." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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nb799lsNHDhQXl5e6tKli95//31zCwWcFBMTo2eeeUaS1LlzZ/thR8ofJ8+Z9ZKTJ0/qoYceUps2bezT/fOf/6yv2QAqVHYonsOHD2vChAny8/NTQECAnnzySeXn59une/fdd3XTTTcpKChInp6eCgsL09tvv33Z45Ut89evX6/+/fvL29tbS5YsqfT5X375Zbm5uWnRokV1Mn9oeAjEXEjHjh2VmJioH3/8sVYe7/PPP1d2drYmTpyo4OBgDR8+XCtWrHD6/mUfzC1btqyVeoCa2LRpk0aPHq1z584pJiZGTz31lOLj4zVkyJAKD7Y8YcIEZWVlae7cuZowYYL+9a9/ac6cOZdN9+2332ratGmaOHGiXnvtNeXn5+vuu+9Wenp6PcwVrOa6665TixYttHXrVvtt27Ztk5ubm/bt26eLFy9KkkpLSxUfH69hw4ZJ+i0U8PX11VNPPaU33nhD/fr10wsvvKC//OUvV/T8JSUlevDBB/X+++9rzZo19t3tY2JiNGfOHI0YMUJvvfWWnn/+eXXo0EF79uyppTkHas+RI0c0fvx4RUdHa8GCBWrZsqUefPBBHThwwOzSgGrddddduvfeeyVJCxcu1AcffKAPPvhAgYGBkpxbLzl79qwGDRqkTZs2afr06XrjjTcUGhqqhx9+WK+//roZswU4mDBhgvLz8zV37lyNGzdOb775ph555BH7399++2117NhRzz33nBYsWKCQkBBNmzZNf//73y97rKSkJN17772Kjo7WG2+8ofDw8Aqfc9asWXrhhRe0ZMkSzZgxo65mDQ0Mu0y6kJkzZ2rs2LEKDw/XwIEDFRkZqZtvvlkjRoxQkyZNrvjxli9frsGDByskJESSNHHiRE2bNk2pqan2D93yMjIyJEk5OTnavHmz/v73vyswMND+hQww0zPPPKNWrVppx44datWqlSTpjjvu0PXXX6/Zs2frvffec5j++uuv17Jly+zX09PTtWzZMv3P//yPw3SHDh3SwYMH1bVrV0nSiBEj1LdvX3300UecuQa1zs3NTUOGDNG2bdvst23btk133HGHYmNjFR8frzFjxtjDsbKRuh9++KHD7gFTp07V1KlTtXjxYr388stOHV+puLhYkyZN0ueff67PP/9co0aNsv/tyy+/1Lhx47R06dJanFugbiQlJWnr1q3298eECRMUEhKid999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ok6dOumaa66RJA0ePFgtW7bUAw88oCeeeEI2m00ffPDBVe0edscdd+jdd9/Vf/zHf8jPz09LliyR9NtByocPH65+/fqpVatWSkhI0KpVqzjTKgDUgX79+kn67WyREydOVJMmTXTrrbc6ff+//vWviouL0w033KA//vGPCgsLU0ZGhvbs2aNNmzbZzxwPmCUlJUW33XabxowZox07dmj58uW677771LdvX3l5ealp06a69dZb9eijjyo7O1v/+Mc/FBQU5PQeUZcaNGiQYmNjNW7cOI0fP16fffaZmjRpUstzhYaIEWIuZP78+RoxYoTWrl2rp556Sk899ZR27dqladOmaefOnWrRokW1j7Fnzx4dPny4yg/Vsr8tX7682sd75JFH5O/vr7/+9a9OzwdQG8q+7JdtRRo5cqTWrVungIAAvfDCC5o/f74GDRqk7du3V3mwTaAhGjx4sNzd3dW8eXP17dvXfnv53SfLBAQE6IsvvlDbtm01a9YszZ8/X9HR0Xrttdeu6rknTZqkv//971q6dKmeeeYZSdITTzyhn3/+WXPnztUTTzyhb775Ri+//LIWLFhQg7kEAFRkwIABeumll7Rv3z49+OCDuvfee69oZFebNm20a9cuTZkyRatXr7afZS8jI4M9O9AgrFy5Up6envrLX/6iL7/8UtOnT9eyZcsk/bbX06pVq2Sz2TRz5ky98847euSRR/Tkk0/W6DlvuukmffLJJ9qwYcNlI+HhumyGhY8g+tNPP6lHjx7aunWrw5cHoKbuuusu5efn23dXbQguXLigli1b6t///rfGjx9vdjl17s0339STTz6pI0eOOJx+HLXvscce0+7du5WQkGB2KQ48PT21cOFCTZs2zexS4EJmz56tf/7znzpx4oTZpTgICQnRQw89pDlz5phdClzI4sWL9Z//+Z8Nbvfn/v37a8CAAXr77bfNLgUuZNWqVbrnnnt0/vx5pwYS1Jdx48bJy8tLq1evNruUOhcTE6M5c+YoNTXVfrI21I1t27Zp2LBhSkpKUvfu3c0uxzSMEAPgknbv3q1mzZrZD6gPAAAAAEAZjiEGwKV8+umn2rJli1asWKE//OEPl50JDwAAAAAAvikCcCkzZ85UVlaWHn74YS1cuNDscgAAAAAADRCBGACXkpKSYnYJAAAAAK5QTEwMZ39HveIYYgAAAAAAALAU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wWSGYei5557Txx9/rPfff98lwjC4HgIxXLEOHTooLi5Onp6eCg8P14svvqjCwkKzy4ILOnz4sKKiovTss8/qL3/5i+bNm+cSu45d6uabb9aSJUu0bNkyjRo1SmfOnDG7JJjkxx9/1IABA7R7926tXr3aJVceIyIi9OGHH+qLL77Q0KFD2X3SwlJSUjR06FB9+eWX+uijjxQREWF2SbUuNDRUa9as0a5duzRgwAD9+OOPZpcEk5w5c0bR0dH65z//qaVLl+qmm24yu6RaFxwcrC+++ELHjx/X9ddfr++++87skmCS8+fP66677tJf//pXvfbaaxo/frzZJQEVIhDDVenQoYO+//57Pf3003rppZcUERGhHTt2mF0WXERhYaFefPFF9e3bV2fPnlVcXJzmzp3rkmFYmYceekibNm3SwYMHFR4ers2bN5tdEurZu+++q4EDB8rDw0MJCQkaNmyY2SXVmdtvv13x8fFKT09XRESEPvvsM7NLQj1bs2aNrr/+emVkZCg+Pl633Xab2SXVmWHDhikhIUEeHh4aOHCg/vWvf5ldEurZ5s2bFR4erkOHDunrr7/WlClTzC6pzvTp00fff/+92rdvr8jISC1cuFAcocdadu/erYiICG3ZskWxsbF65plnzC4JqBSBGK6at7e3Xn31VSUmJsrHx0dDhgzR7bffrs8//1xFRUVml4dG6NSpU5o7d6569eqll156STNnztS+ffs0fPhws0urFyNGjND333+va6+9VtHR0XrggQe0f/9+s8tCHTIMQ3FxcRo7dqweeugh3Xfffdq5c6d69uxpdml1rl+/ftqzZ49GjBihO++8U+PHj9fOnTvNLgt1bOfOnRo/frzuuusu3XzzzUpMTFS/fv3MLqvO9ezZUzt37tS9996rKVOmaOzYsYqLiyMocHE//PCDHnjgAY0cOVLXXXed9u7da4l1mg4dOuibb77Rk08+qaeeekpRUVH68ssvOeaSi0tOTtZjjz2mIUOGKCgoSN9//71Lb+yAizCAWlBcXGwsXbrUiIiIMCQZwcHBxrPPPmscPnzY7NLQwBUUFBirV682brnlFsPNzc3w9vY2Jk+ebOzbt8/s0kxTXFxsvP7660ZISIghyRg9erSxceNGo7S01OzSUEuKioqMDz/80L7M7N27t/HJJ5+YXZYpSktLjWXLlhmhoaGGJCMy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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from lambeq import cups_reader\n", "\n", "# Create string diagrams based on cups reader\n", "cups_diagram = cups_reader.sentence2diagram(sentence)\n", "\n", "cups_diagram.draw(figsize=(12,2), fontsize=12)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note the use of a `START` symbol in the beginning of the sentence, represented as an order-1 tensor (a vector). This ensures that the final result of the computation (that is, the representation of the sentence) will be again a tensor of order 1." ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Another pre-made word-sequence model is provided by the :py:obj:`~lambeq.text2diagram.stairs_reader` instance. This model combines consecutive words using a box (\"cell\") in a recurrent fashion, similarly to a recurrent neural network. " ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABMQAAAIHCAYAAABwnIDaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA6YklEQVR4nO3df3SW9Z3n/1eUEYyoKCEKSoiWUSMsahR1QSrOyqKdkalKObgHVxlLBQZa5VC77Xg01roq/mgtO3Ts2GpnQcdfKHSECq7OVAdFa866UuPsQHDxjJzBGxX5VbWQ7x895NtUW0MI3iHX43FOziFX7vuT9034kPDkuq+7oqWlpSUAAAAAUBD7lXsAAAAAAPgsCWIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAECh9Cj3AF3BunXrUiqVyj0GSaqqqlJTU1PuMegm7O2uxf6mM9nfXYv9TWeyv7sW+5vOZH93Hfa2IJZ169alrq4u27ZtK/coJKmsrExTU1PhNyZ7zt7ueuxvOov93fXY33QW+7vrsb/pLPZ312JvC2IplUrZtm1b5s+fn7q6unKPU2hNTU2ZNGlSSqVSoTclncPe7lrsbzqT/d212N90Jvu7a7G/6Uz2d9dhb/9G4YPYLnV1damvry/3GEAns7eh+7K/ofuyv6H7sr/pKlxUHwAAAIBCEcQAAAAAKBRBDAAAAIBCEcQAAAAAKBRBDAAAAIBCEcQAAAAAKBRBDAAAAIBCEcQAAAAAKBRBDAAAAIBCEcT2YQ0NDamoqEipVCr3KMBedvnll6e2trb1/TfeeCMVFRW5/fbbyzcU0G733XdfKioq8sYbb5R7FKCTVVRUZMaMGeUeA+iC/P3QtQliXcCuH5J/8YtflHsUAADgE6xYsSINDQ157733yj0KAJ1AEAMA2MsuvfTSbN++PYMGDSr3KEAHrVixIjfccIMgBtBNCGIAAHvZ/vvvn169eqWioqLcowAAe1FLS0u2b99e7jFoB0Gsi3r66aczatSoHHTQQenTp0/+/M//PE1NTZ942/feey+XX355+vTpk0MPPTSTJ0/Otm3b2txm13OXH3/88QwdOjQ9e/bMkCFD8rOf/eyzeDjQ7f2f//N/UlFRkcWLF7cee/nll1NRUZH6+vo2tz3//PNzxhlnJEkWLVqUP/3TP82AAQPSs2fPfO5zn8uNN96YHTt27PYMLS0t+cpXvpIDDjggCxcuTJJ89NFHueGGG/LHf/zH6dWrV/r27Zuzzjory5cv34NHC+yu372GWG1tbf7sz/4szz33XE4//fT06tUrxx57bP7u7/6uvIMCn6ihoSFf//rXkyTHHHNMKioqPnZdwPb8nP1v//Zv+Yu/+IscccQRrbf78Y9//Fk9DCD//7W4X3/99UyYMCGHHHJI+vbtm6997Wv51a9+1Xq7e++9N3/yJ3+S6urq9OzZMyeeeGJ+8IMffGy9Xd/Tn3zyyZx22mk58MADc/fdd//ez/+d73wn++23X+bOnbtXHh/t16PcA/BxTz31VM4///wce+yxaWhoyPbt2zN37tyMHDkyjY2NbS6snSQTJkzIMccck5tvvjmNjY255557Ul1dnVtvvbXN7Z577rksXLgw06dPz8EHH5zvf//7ufjii7Nu3br07dv3M3yE0P0MHTo0ffr0yc9//vOMGzcuSfLss89mv/32yyuvvJL3338/hxxySHbu3JkVK1bkK1/5SpLf/CO5d+/emTVrVnr37p2nn3461113Xd5///3cdttt7f78O3bsyF/8xV/kwQcfzGOPPZY//dM/TfKbb/g333xzvvzlL+f000/P+++/n1/84hdpbGzMmDFjOv83Ami31atXZ/z48bniiity2WWX5cc//nEuv/zynHrqqRkyZEi5xwN+y0UXXZT/+3//bx544IF897vfTVVVVZKkX79+Sdr3c/a///u/58wzz2z9j+p+/fpl6dKlueKKK/L+++/nqquuKtfDg0KaMGFCamtrc/PNN+eFF17I97///bz77rut/zn1gx/8IEOGDMm4cePSo0eP/PSnP8306dOzc+fO/OVf/mWbtf7lX/4ll1xySa688spMmTIlxx9//Cd+zmuvvTb//b//99x9992ZMmXKXn+M/GGCWBf09a9/PYcffnief/75HH744UmSL37xiznllFNy/fXX5yc/+Umb259yyin50Y9+1Pr+xo0b86Mf/ehjQaypqSmvvfZaPve5zyVJzjnnnJx00kl54IEHvPIF7KH99tsvI0eOzLPPPtt67Nlnn80Xv/jFLFq0KCtWrMh5553XGsdGjRqVJLn//vtz4IEHtt5n6tSpmTp1aubNm5fvfOc76dmz56d+7l//+teZNGlSFi9enMWLF+c//+f/3PqxJ554Il/4whfywx/+sBMfLdAZ/uVf/iU///nPW/8+mDBhQgYOHJh7773XK8hCFzNs2LDU19fngQceyBe/+MWP/Qd1e37O/qu/+qvs2LEjr776amskmzp1ai655JI0NDTkyiuvbPMzAbB3HXPMMVm0aFGS5C//8i9zyCGHZN68eZk9e3aGDRuWf/qnf2qzJ2fMmJHzzjsvd95558eC2OrVq/Ozn/0sY8eO/b2fb/bs2fnud7+be++9N5dddtneeVDsFk+Z7GLWr1+f//2//3cuv/zy1hiW/Oab8JgxY7JkyZKP3Wfq1Klt3h81alQ2btyY999/v83xc889t/Wb9K41DznkkDQ3N3fyo4BiGjVqVBobG7N169Ykv/nf4i984Qs5+eSTW0PZs88+m4qKipx11llJ0uab7ObNm1MqlTJq1Khs27Ytr7/++qd+zg8//DBf+tKX8g//8A9ZsmRJmxiWJH369Mkvf/nL/Ou//mtnPUygk5x44omtMSz5zZkmxx9/vO/LsA/6tJ+zW1pa8uijj+aCCy5IS0tLSqVS69vYsWOzadOmNDY2lmt8KKTfjVozZ85MktZ/c//2z+mbNm1KqVTK2Wefnebm5mzatKnNfY855pjfG8NaWloyY8aM3HXXXZk/f74Y1oU4Q6yL+X//7/8lySeeYllXV5cnn3wyW7duzUEHHdR6vKamps3tDjvssCTJu+++m0MOOeT33m7Xbd99991OmR2KbtSoUfn1r3+d559/PgMHDsyGDRsyatSo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c/zxx3doJgAAANjXCGKwF40ZMybPP/98xo0bl1deeSVz5szJ2LFjc9RRR2Xx4sW7tdbGjRvz5JNP5pJLLmk9dvHFF6eioiIPPfRQu9bYunVr+vXrl379+mXw4MGZPXt2Ro4cmUWLFqWiomK35gEAAIB9lSAGe9nw4cOzcOHCvPvuu3nxxRfzzW9+M5s3b8748ePz2muvtXudBx98MB999FFOOeWUrF69OqtXr84777yTM844o91Pm+zVq1eWL1+e5cuX5957701dXV02bNiQAw88sKMPDwAAAPY5XmUSPiMHHHBAhg8fnuHDh+e4447L5MmT8/DDD+f6669v1/13Ra+RI0d+4sebm5tz7LHH/sE19t9//5x77rmt748dOzYnnHBCrrzyyt0+Yw0AAAD2VYIYlMFpp52WJFm/fn27br927dqsWLEiM2bMyNlnn93mYzt37syll16a+++/P9dee+1uzdG/f/9cffXVueGGG/LCCy/kzDPP3K37AwAAwL7IUyZhL3rmmWfS0tLyseNLlixJknZfyH7X2WHXXHNNxo8f3+ZtwoQJOfvsszv8apMzZ85MZWVlbrnllg7dHwAAAPY1zhCDvWjmzJnZtm1bLrzwwpxwwgn58MMPs2LFijz44IOpra3N5MmT27XOggULcvLJJ7e+uuTvGjduXGbOnJnGxsbU19fv1ox9+/bN5MmTM2/evDQ1NaWurm637g8AAAD7GmeIwV50++2355xzzsmSJUsya9aszJo1Ky+++GKmT5+elStXpk+fPp+6RmNjY15//fVccMEFv/c2uz42f/78Ds05a9as7Lfffrn11ls7dH8AAADYlzhDDPai8847L+edd167b19VVfWxp1jW19d/4tMuf9ugQYPa3KahoSENDQ1tbnPfffflvvvu+8T7H3vssfn1r3/d7jkBAABgX+YMMQAAAAAKRRADAAAAoFAEMQAAAAAKRRADAAAAoFAEMQAAAAAKRRADAAAAoFAEMQAAAAAKRRADAAAAoFAEMQAAAAAKRRADAAAAoFAEMQAAAAAKRRADAAAAoFB6lHuArqKpqancIwB0W/6OBQAAupLCB7GqqqpUVlZm0qRJ5R4FoFurrKxMVVVVuccAAAAQxGpqatLU1JRSqVTuUaBdbrrppjQ1NWX+/PnlHgV2S1VVVWpqaso9BgAAgCCW/CaK+Uca+4p+/fpl3bp1qa+vL/coAAAAsE9yUX0AAAAACkUQAwAAAKBQBDEAAAAACkUQAwAAAKBQBDEAAAAACkUQAwAAAKBQBDEAAAAACkUQAwAAAKBQBDEAAAAACkUQAwAAAKBQBDEogM2bN+eqq65KbW1tevbsmerq6owZMyaNjY3lHg0AAAA+cz3KPQCw902dOjWPPPJIZsyYkRNPPDEbN27Mc889l6amptTX15d7PAAAAPhMCWJQAE888USmTJmSO+64o/XYNddcU8aJAAAAoHw8ZRIKoE+fPlm5cmXeeuutco8CAAAAZSeIQQHMmTMnq1atysCBA3P66aenoaEhzc3N5R4LAAAAykIQgwKYMGFCmpubM3fu3AwYMCC33XZbhgwZkqVLl5Z7NAAAAPjMCWJQEP3798/06dPz+OOPZ+3atenbt29uuummco8FAAAAnzlBDLq5HTt2ZNOmTW2OVVdXZ8CAAfnggw/KNBUAAACUj1eZhG5u8+bNOfroozN+/PicdNJJ6d27d5566qm89NJLbV51EgAAAIpCEINurrKyMtOnT8+yZcuycOHC7Ny5M4MHD868efMybdq0co8HAAAAnzlBDLq5Aw44IHPmzMmcOXPKPQoAAAB0Ca4hBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFIogBgAAAEChCGIAAAAAFEqPcg8An7V169alVCqVe4wOe/vtt7N169Y0NjaWexQA9sB7772XJN3i7/OqqqrU1NSUewwAgHYTxCiUdevWpa6uLtu2bSv3KHvs1FNPLfcIAHSC7vD3eWVlZZqamkQxAGCfIYhRKKVSKdu2bcv8+fNTV1dX7nEAYJ/X1NSUSZMmpVQqCWIAwD5DEKOQ6urqUl9fX+4xAAAAgDJwUX0AAAAACkUQAwAAAKBQBDEAAAAACkUQAwAAAKBQBDEAAAAACkUQAwAAAKBQBDEAAAAACkUQAwAAAKBQBDEAAAAACkUQAwAAAKBQBDEA9sirr76a8ePHZ9CgQenVq1eOOuqojBkzJnPnzk1DQ0MqKio+9W306NGt6+3YsSMDBgxIRUVFli5d+omfc9e6pVKp9djll1/eZs2ePXvmuOOOy3XXXZdf/epXe/u3AQAA2If0KPcAAOy7VqxYkXPOOSc1NTWZMmVKjjzyyLz55pt54YUXctddd2XhwoUZPHhw6+23bNmSadOm5cILL8xFF13UevyII45o/fXTTz+d9evXp7a2NgsWLMj555/f7nl69uyZe+65J0myadOmLFq0KDfeeGPWrFmTBQsWdMIjBgAAugNBDIAOu+mmm3LooYfmpZdeSp8+fdp8bMOGDamurs6wYcNaj5VKpUybNi3Dhg3LpEmTPnHN+fPnp76+Ppdddlm+9a1vZevWrTnooIPaNU+PHj3arDt9+vSMGDEiDzzwQO6888424Q0AACguT5kEoMPWrFmTIUOGfCyGJUl1dfVur7d9+/Y89thjmThxYiZMmJDt27dn0aJFHZ6voqIiZ511VlpaWtLc3NzhdQAAgO5FEAOgwwYNGpSXX345q1at6pT1Fi9enC1btmTixIk58sgjM3r06D1+quMbb7yRJDnssMM6YUIAAKA7EMQA6LDZs2dn27ZtOfnkkzNixIh84xvfyLJly/LRRx91aL358+dnxIgRGThwYJJk4sSJWbZsWd5+++12r1EqlVIqlbJmzZrccccdefTRRzN06NAcf/zxHZoJAADofgQxADpszJgxef755zNu3Li88sormTNnTsaOHZujjjoqixcv3q21Nm7cmCeffDKXXHJJ67GLL744FRUVeeihh9q1xtatW9OvX7/069cvgwcPzuzZszNy5MgsWrQoFRUVuzUPAADQfQliAOyR4cOHZ+HChXn33Xfz4osv5pvf/GY2b96c8ePH57XXXmv3Og8++GA++uijnHLKKVm9enVWr16dd955J2eccUa7nzbZq1evLF++PMuXL8+9996burq6bNiwIQceeGBHHx4AANANeZVJADrFAQcckOHDh2f48OE57rjjMnny5Dz88MO5/vrr23X/XdFr5MiRn/jx5ubmHHvssX9wjf333z/nnntu6/tjx47NCSeckCuvvHK3z1gDAAC6L0EMgE532mmnJUnWr1/frtuvXbs2K1asyIwZM3L22We3+djOnTtz6aWX5v7778+11167W3P0798/V199dW644Ya88MILOfPMM3fr/gAAQPfkKZMAdNgzzzyTlpaWjx1fsmRJkrT7Qva7zg675pprMn78+DZvEyZMyNlnn93hV5ucOXNmKisrc8stt3To/gAAQPfjDDEAOmzmzJnZtm1bLrzwwpxwwgn58MMPs2LFijz44IOpra3N5MmT27XOggULcvLJJ7e+uuTvGjduXGbOnJnGxsbU19fv1ox9+/bN5MmTM2/evDQ1NaWurm637g8AAHQ/zhADoMNuv/32nHPOOVmyZElmzZqVWbNm5cUXX8z06dOzcuXK9OnT51PXaGxszOuvv54LLrjg995m18fmz5/foTlnzZqV/fbbL7feemuH7g8AAHQvzhADoMPOO++8nHfeee2+fVVV1ceeYllfX/+JT7v8bYMGDWpzm4aGhjQ0NLS5zX333Zf77rvvE+9/7LHH5te//nW75wQAALo3Z4gBAAAAUCiCGAAAAACFIogBAAAAUCiCGAAAAACFIogBAAAAUCiCGAAAAACFIogBAAAAUCiCGAAAAACFIogBAAAAUCiCGAAAAACFIogBAAAAUCiCGAAAAACF0qPcA0A5NDU1lXsEAOgWfE8FAPZFghiFUlVVlcrKykyaNKncowBAt1FZWZmqqqpyjwEA0G6CGIVSU1OTpqamlEqlco8C/AF/9Vd/lVKplLvvvrvcowDtUFVVlZqamnKPAQDQboIYhVNTU+OHdujiDj/88HzwwQepr68v9ygAAEA35KL6AAAAABSKIAYAAABAoQhiAAAAABSKIAYAAABAoQhiAAAAABSKIAYAAABAoQhiAAAAABSKIAYAAABAoQhiAAAAABSKIAYAAABAoQhiAHQLmzdvzlVXXZXa2tr07Nkz1dXVGTNmTBobG8s9GgAA0MX0KPcAANAZpk6dmkceeSQzZszIiSeemI0bN+a5555LU1NT6uvryz0eAADQhQhiAHQLTzzxRKZMmZI77rij9dg111xTxokAAICuylMmAegW+vTpk5UrV+att94q9ygAAEAXJ4gB0C3MmTMnq1atysCBA3P66aenoaEhzc3N5R4LAADoggQxALqFCRMmpLm5OXPnzs2AAQNy2223ZciQIVm6dGm5RwMAALoYQQyAbqN///6ZPn16Hn/88axduzZ9+/bNTTfdVO6xAACALkYQA2Cft2PHjmzatKnNserq6gwYMCAffPBBmaYCAAC6Kq8yCcA+b/PmzTn66KMzfvz4nHTSSendu3eeeuqpvPTSS21edRIAACARxADoBiorKzN9+vQsW7YsCxcuzM6dOzN48ODMmzcv06ZNK/d4AABAFyOI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fX25RwEAKAsX1QcAAACgUAQxAAAAAApFEAMAAACgUAQxAAAAAApFEAMAAACgUAQxAAAAAApFEAMAAACgUAQxAAAAAApFEAMAAACgUAQxAAAAAApFEAMA4FNt3rw5V111VWpra9OzZ89UV1dnzJgxaWxsLPdoAAC7rUe5BwAAoOubOnVqHnnkkcyYMSMnnnhiNm7cmOeeey5NTU2pr68v93gAALtFEAMA4FM98cQTmTJlSu64447WY9dcc00ZJwIA6DhPmQQA4FP16dMnK1euzFtvvVXuUQAA9pggBgDAp5ozZ05WrVqVgQMH5vTTT09DQ0Oam5vLPRYAQIcIYgAAfKoJEyakubk5c+fOzYABA3LbbbdlyJAhWbp0ablHAwDYbYIYAADt0r9//0yfPj2PP/541q5dm759++amm24q91gAALtNEAMA4A/asWNHNm3a1OZYdXV1BgwYkA8++KBMUwEAdJxXmQQA4A/avHlzjj766IwfPz4nnXRSevfunaeeeiovvfRSm1edBADYVwhiAAD8QZWVlZk+fXqWLVuWhQsXZufOnRk8eHDmzZuXadOmlXs8AIDdJogBAPAHHXDAAZkzZ07mzJlT7lEAADqFa4gBAAAAUCiCGAAAAACFIogBAAAAUCiCGAAAAACFIogBAAAAUCiCGAAAAACFIogBAAAAUCiCGAAAAACFIogBAAAAUCiCGAAAAACFIogBAAAAUCiCGAAAAACFIogBAAAAUCiCGAAAAACFIogBAAAAUCg9yj0AAMC+ZN26dSmVSuUeY49s2rQp+++/fxobG8s9CgDsU7Zv354NGzbs899Dq6qqUlNTU+4xyqqipaWlpdxDAADsC9atW5e6urps27at3KMAAHRYZWVlmpqaCh3FnCEGANBOpVIp27Zty/z581NXV1fucQAAdltTU1MmTZqUUqkkiAEA0H51dXWpr68v9xgAAHSQi+oDAAAAUCiCGAAAAACFIogBAAAAUCiCGAAAAACFIogBAAAAUCiCGAAAAACFIogBAAAAUCiCGAAAAACFIogBAAAAUCiCGAAAAACFIogBAAB00Kuvvprx48dn0KBB6dWrV4466qiMGTMmc+fOTUNDQyoqKj71bfTo0a3r7dixIwMGDEhFRUWWLl36iZ9z17qlUqn12OWXX95mzZ49e+a4447Lddddl1/96ld7+7cBYJ/To9wDAAAA7ItWrFiRc845JzU1NZkyZUqOPPLIvPnmm3nhhRdy1113ZeHChRk8eHDr7bds2ZJp06blwgsvzEUXXdR6/Igjjmj99dNPP53169entrY2CxYsyPnnn9/ueXr27Jl77rknSbJp06YsWrQoN954Y9asWZMFCxZ0wiMG6D4EMQAAgA646aabcuihh+all15Knz592nxsw4YNqa6uzrBhw1qPlUqlTJs2LcOGDcukSZM+cc358+envr4+l112Wb71rW9l69atOeigg9o1T48ePdqsO3369IwYMSIPPPBA7rzzzjbhDaDoPGUSAACgA9asWZMhQ4Z8LIYlSXV19W6vt3379jz22GOZOHFiJkyYkO3bt2fRokUdnq+ioiJnnXVWWlpa0tzc3OF1ALojQQwAAKADBg0alJdffjmrVq3qlPUWL16cLVu2ZOLEiTnyyCMzevToPX6q4xtvvJEkOeywwzphQoDuQxADAADogNmzZ2fbtm05+eSTM2LEiHzjG9/IsmXL8tFHH3Vovfnz52fEiBEZOHBgkmTixIlZtmxZ3n777XavUSqVUiqVsmbNmtxxxx159NFHM3To0Bx//PEdmgmguxLEAAAAOmDMmDF5/vnnM27cuLzyyiuZM2dOxo4dm6OOOiqLFy/erbU2btyYJ598MpdccknrsYsvvjgVFRV56KGH2rXG1q1b069fv/Tr1y+DBw/O7NmzM3LkyCxatCgVFRW7NQ9AdyeIAQAAdNDw4cOzcOHCvPvuu3nxxRfzzW9+M5s3b8748ePz2muvtXudBx98MB999FFOOeWUrF69OqtXr84777yTM844o91Pm+zVq1eWL1+e5cuX5957701dXV02bNiQAw88sKMPD6Db8iqTAAAAe+iAAw7I8OHDM3z48Bx33HGZPHlyHn744Vx//fXtuv+u6DVy5MhP/Hhzc3OOPfbYP7jG/vvvn3PPPbf1/bFjx+aEE07IlVdeudtnrAF0d4IYAABAJzrttNOSJOvXr2/X7deuXZsVK1ZkxowZOfvss9t8bOfOnbn00ktz//3359prr92tOfr375+rr746N9xwQ1544YWceeaZu3V/gO7MUyYBAAA64JlnnklLS8vHji9ZsiRJ2n0h+11nh11zzTUZP358m7cJEybk7LPP7vCrTc6cOTOVlZW55ZZbOnR/gO7KGWIAAAAdMHPm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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from lambeq import stairs_reader\n", "\n", "stairs_diagram = stairs_reader.sentence2diagram(sentence)\n", "stairs_diagram.draw(figsize=(12,5), fontsize=12)" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ ".. _sec-tree-readers:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Tree readers" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "A :term:`CCG ` derivation follows a biclosed form [YK2021]_ , which can be directly interpreted as a series of compositions without any explicit conversion into a :term:`pregroup ` form. Class :py:class:`.TreeReader` implements a number of compositional models by taking advantage of this fact. In order to demonstrate the way they work, it would be useful to first examine how a CCG diagram looks like:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "
" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Even without knowing the specifics of CCG syntax, it is not difficult to see that the verb \"gave\" is first composed with the indirect object \"Mary\", then the result is composed with the noun phrase \"a flower\" which correspond to the direct object, and finally the entire verb phrase \"gave Mary a flower\" is further composed with the subject \"John\" to return a sentence. A :py:class:`.TreeReader` follows this order of composition, as demonstrated below." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABMQAAAIHCAYAAABwnIDaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA9i0lEQVR4nO3deZiU1Z0v8G8DArYiIkiUYY0tI8gMCuqN4hrBSBSjcRc0ZhINEtwSRpmEK4trMEQNKGoyMRNcEkUlLiFRR+cGNZOL9MUY7TAaFDVqtIlim3ajqfuHDz22YEbW6u7383ken0dOnTr1K+rlnKpvvXXeilKpVAoAAAAAFESbchcAAAAAAJuTQAwAAACAQhGIAQAAAFAoAjEAAAAACkUgBgAAAEChCMQAAAAAKBSBGAAAAACFIhADAAAAoFAEYgAAAAAUikAMAAAAgEIRiAEAAABQKAIxAAAAAApFIAYAAABAoQjEAAAAACgUgRgAAAAAhSIQAwAAAKBQBGIAAAAAFIpADAAAAIBCEYgBAAAAUCgCMQAAAAAKRSAGAAAAQKEIxAAAAAAoFIEYAAAAAIUiEAMAAACgUARiAAAAABSKQAwAAACAQhGIAQAAAFAoAjEAAAAACkUgBgAAAEChCMQAAAAAKBSBGAAAAACFIhADAAAAoFAEYgAAAAAUikAMAAAAgEIRiAEAAABQKAIxAAAAAApFIAYAAABAoQjEAAAAACgUgRgAAAAAhSIQAwAAAKBQBGIAAAAAFIpADAAAAIBCEYgBAAAAUCgCMQAAAAAKRSAGAAAAQKEIxAAAAAAoFIEYAAAAAIUiEAMAAACgUARiAAAAABRKu3IX0Bw8//zzqa2tLXcZrIdu3bqld+/e5S4D1src0rKZX2jOzC8t2+aeXxwvLZv1iObM/NJymVsEYnn++eczYMCA1NfXl7sU1kNlZWVqamoK/w+Z5sfc0vKZX2iuzC8t3+acXxwvLZ/1iObK/NKymVsEYqmtrU19fX1uvPHGDBgwoNzlsA5qamoyZsyY1NbWFvofMc2TuaVlM7/QnJlfWrbNPb84Xlo26xHNmfml5TK3fKDwgdhqAwYMyJAhQ8pdBtDKmFuATcX8wrpwvACbivmFlsqm+gAAAAAUikAMAAAAgEIRiAEAAABQKAIxAAAAAApFIAYAAABAoQjEAAAAACgUgRgAAAAAhSIQAwAAAKBQBGIAAAAAFIpADAAAAIBCEYgBAAAAUCgCMQAAAAAKRSAGAAAAQKEIxFqpKVOmpKKiIrW1teUuBQAAADa6hQsXZp999slWW22VioqKHHnkkamoqCh3WbQQArFm7sc//nEqKiry2GOPlbsUAICPtfo9S0VFRR5++OE1bi+VSunVq1cqKipy+OGHl6FCAFqT999/P8cee2z+8pe/5IorrsicOXPSp0+fcpdFC9Ku3AUAANB6dOzYMTfffHP23XffJu3/5//8n7z44ovp0KFDmSoDoDX54x//mGXLluUHP/hBvvrVryZJnnnmmTJXRUviDDEAADaaz3/+87ntttuycuXKJu0333xzhg4dmh122GGjPM6qVavyzjvvbJSxAGh5Xn311STJtttuW95C1pN1rPwEYi3Qgw8+mP322y9bbbVVtt1223zhC19ITU3NWvu+8cYbOfXUU7Ptttumc+fO+fKXv5z6+vomfSoqKjJ+/PjMmzcvgwYNSocOHbLrrrvml7/85eZ4OkAZ/Md//Ef22GOPdOzYMTvttFOuu+66xr0HV7vhhhvy2c9+Nt27d0+HDh0ycODAzJ49u8k4hx9+eD796U+v9TH23nvv7LHHHk3abrzxxgwdOjRbbrlltttuu5xwwgl54YUXNv4TBMrmxBNPzPLly3P//fc3tr333nuZO3duTjrppDX6f/e7380+++yTrl27Zsstt8zQoUMzd+7cNfqtfr9y0003Zdddd02HDh0yf/789O3bN1/4whfW6P/OO++kc+fO+drXvrZxnyBlt2zZsowbNy5///d/ny233DJdu3bNsccem+eee67cpQGbyamnnpoDDjggSXLsscemoqIiBx544Fr7rly5MhdeeGF22mmndOjQIX379s23vvWtvPvuu419vvGNb6Rr164plUqNbWeeeWYqKiry/e9/v7Htz3/+cyoqKpq8J3733XczefLkVFVVpUOHDunVq1fOO++8JuMna1/HfOYuL4FYC/PAAw/kc5/7XF599dVMmTIl3/jGN/Loo49m2LBha30TcNxxx6Wuri6XXnppjjvuuPz4xz/O1KlT1+j38MMPZ9y4cTnhhBMyffr0vPPOOzn66KOzfPnyzfCsgM3p//2//5dDDz00y5cvz9SpU/OVr3wl06ZNy7x585r0mz17dvr06ZNvfetbmTFjRnr16pVx48bl6quvbuxz/PHH59lnn83ChQub3HfZsmX5z//8z5xwwgmNbRdffHFOOeWU7Lzzzvne976Xc845J//+7/+e/fffP2+88camfMrAZtS3b9/svffeueWWWxrb5s+fnxUrVjSZE1a76qqrsvvuu2fatGm55JJL0q5duxx77LG599571+j74IMP5txzz83xxx+fq666Kv369cuYMWMyf/78/OUvf2nS9+67786bb76ZMWPGbPwnSVktXLgwjz76aE444YR8//vfz9ixY/Pv//7vOfDAA9f44hdonb72ta/lW9/6VpLkrLPOypw5c/Ltb397rX2/+tWv5oILLsiQIUNyxRVX5IADDsill17aZE3ab7/98pe//CVPPvlkY9uCBQvSpk2bLFiwoElbkuy///5JPjjL64gjjsh3v/vdjBo1KjNnzsyRRx6ZK664Iscff/watXx0Hevbt+8G/12wAUoFt2jRolKS0qJFi8pdylrdcMMNpSSlhQsXlkqlUmm33XYrde/evbR8+fLGPo8//nipTZs2pVNOOaWxbfLkyaUkpX/6p39qMt5RRx1V6tq1a5O2JKX27duXnnnmmSZjJinNnDlzUzytjaK5v3YUW3M+PkeNGlWqrKws/elPf2pse/rpp0vt2rUrfXhZqK+vX+O+n/vc50qf/vSnG/+8YsWKUocOHUrf/OY3m/SbPn16qaKiorRs2bJSqVQqPffcc6W2bduWLr744ib9nnjiiVK7du3WaC+35vz6QXM9Pj/8nmXWrFmlTp06Nc4jxx57bOmggw4qlUqlUp8+fUqHHXZY4/0+Ote89957pUGDBpU++9nPNmlPUmrTpk3pySefbNK+ZMmSUpLS7Nmzm7QfccQRpb59+5ZWrVq10Z7jxrC5X7/merxsiLWtT7/5zW9KSUo/+clPylDRptMaXz9aj3Ifnw899FApSem2225rbFv9OXi1xYsXl5KUvvrVrza574QJE0pJSg8++GCpVCqVXn311VKS0jXXXFMqlUqlN954o9SmTZvSscceW/rUpz7VeL+zzjqrtN122zWuLXPmzCm1adOmtGDBgibjX3vttaUkpUceeaSx7ePWsXIo92vXXDhDrAV5+eWXs3jx4px66qnZbrvtGtv/8R//MSNGjMgvfvGLNe4zduzYJn/eb7/9snz58rz55ptN2ocPH56ddtqpyZjbbLNNli5dupGfBVBODQ0NeeCBB3LkkUemR48eje1VVVUZOXJkk75bbrll4/+vWLEitbW1OeCAA7J06dKsWLEiSbLNNttk5MiRufXWW5ucYv6zn/0sn/nMZ9K7d+8kyR133JFVq1bluOOOS21tbeN/O+ywQ3beeec89NBDm/JpA5vZcccdl7fffjv33HNP6urqcs8996z155JJ07nm9ddfz4oVK7Lffvulurp6jb4HHHBABg4c2KStf//++V//63/lpptuamz7y1/+kvnz52f06NFNfgpO6/DhY+b999/P8uXLU1VVlW233Xatxw1QXKs/I3/jG99o0v7Nb34zSRrPRt5+++2zyy675Ne//nWS5JFHHknbtm3zz//8z/nzn/+cp59+OskHZ4jtu+++jWvLbbfdlgEDBmSXXXZp8h73s5/9bJKs8R53besY5eMqky3IsmXLkiR///d/v8ZtAwYMyK9+9av89a9/zVZbbdXYvvrD6GpdunRJ8sEbzm222eZj+63u+/rrr2+U2oHm4dVXX83bb7+dqqqqNW77aNsjjzySyZMn5ze/+c0aP0FZsWJFOnfunOSDn03Omzcvv/nNb7LPPvvkj3/8YxYtWpQrr7yysf/TTz+dUqmUnXfeea11bbHFFhv4zIDmZPvtt8/w4cNz8803p76+Pg0NDTnmmGPW2veee+7JRRddlMWLFzfZb2VtQVa/fv3WOsYpp5yS8ePHZ9myZenTp09uu+22vP/++zn55JM3zhOiWXn77bdz6aWX5oYbbsif/vSnJl/IrP7CBiD54DN0mzZt1nifu8MOO2Tbbbdt/IydfHDyyOoAbcGCBdljjz2yxx57ZLvttsuCBQvyqU99Ko8//niTL3iefvrp1NTUZPvtt1/r46/e+H+1j1vHKA+BWCvXtm3btbZ/+I3DuvQDiuGPf/xjDj744Oyyyy753ve+l169eqV9+/b5xS9+kSuuuCKrVq1q7Dtq1KhUVlbm1ltvzT777JNbb701bdq0ybHHHtvYZ9WqVamoqMj8+fPXOt9svfXWm+V5AZvPSSedlNNOOy2vvPJKRo4cudargC1YsCBHHHFE9t9//1xzzTXZcccds8UWW+SGG27IzTffvEb/D58Z9GEnnHBCzj333Nx000351re+lRtvvDF77LHHWr9EpOU788wzc8MNN+Scc87J3nvvnc6dO6eioiInnHBCk/UJYLVPcrbwvvvumx/84AdZunRpFixYkP322y8VFRXZd999s2DBgvTo0SOrVq3Kfvvt13ifVatW5R/+4R/yve99b61j9urVq8mfP24dozwEYi1Inz59kiRLlixZ47Y//OEP6datW5OzwwA+qnv37unYsWOeeeaZNW77cNvdd9+dd999N3fddVeTM0jX9tPGrbbaKocffnhuu+22fO9738vPfvaz7Lfffk1+krnTTjulVCqlX79+6d+//0Z+VkBzdNRRR+VrX/ta/vM//zM/+9nP1trn9ttvT8eOHfOrX/0qHTp0aGy/4YYb1umxtttuuxx22GG56aabMnr06DzyyCNNzlKldZk7d26+9KUvZcaMGY1t77zzjgu0AGvo06dPVq1alaeffjoDBgxobP/zn/+cN954o/EzdpLGoOv+++/PwoULM3HixCQfbKA/e/bs9OjRI1tttVWGDh3aeJ+ddtopjz/+eA4++GA/0W+B7CHWguy4447Zbbfd8m//9m9NFvzf//73ue+++/L5z3++fMUBLULbtm0zfPjwzJs3Ly+99FJj+zPPPJP58+c36ZdkjZ+hfNyH1OOPPz4vvfRSfvjDH+bxxx9f46o6X/ziF9O2bdtMnTp1jTNPS6WSK9pCK7T11ltn9uzZmTJlSkaNGrXWPm3btk1FRUUaGhoa25577rk1rnr7SZx88sl56qmn8s///M9p27btWq9oSevQtm3bNdaSmTNnNjmOAJI0fkb+6Jckq8/oOuywwxrb+vXrl7/7u7/LFVdckffffz/Dhg1L8kFQ9sc//jFz587NZz7zmbRr99/nFR133HH505/+lB/84AdrPPbbb7+dv/71rxv7KbEROUOshbn88sszcuTI7L333vnKV76St99+OzNnzkznzp0zZcqUcpcHtABTpkzJfffdl2HDhuWMM85IQ0NDZs2alUGDBmXx4sVJkkMOOSTt27fPqFGj8rWvfS1vvfVWfvCDH6R79+55+eWX1xjz85//fDp16pQJEyakbdu2Ofroo5vcvtNOO+Wiiy7Kv/zLv+S5557LkUcemU6dOuXZZ5/NnXfemdNPPz0TJkzYHE8f2Iy+9KUv/c3bDzvssHzve9/LoYcempNOOimvvvpqrr766lRVVeV3v/vdOj3WYYcdlq5du+a2227LyJEj07179w0pnWbs8MMPz5w5c9K5c+cMHDgwv/nNb/LAAw+ka9eu5S4NaGYGDx6cL33pS7n++uvzxhtv5IADDsj//b//N//2b/+WI488MgcddFCT/vvtt19++tOf5h/+4R8a998eMmRIttpqq/zXf/3XGheIOfnkk3Prrbdm7NixeeihhzJs2LA0NDTkD3/4Q2699db86le/yh577LHZni/rxhlizdzqb79Wn60xfPjw/PKXv0zXrl1zwQUX5Lvf/W4+85nP5JFHHrFBH/CJDB06NPPnz0+XLl3yv//3/86//uu/Ztq0aTn44IPTsWPHJB9cvGPu3LmpqKjIhAkTcu211+b000/P2WefvdYxO3bsmCOOOCJ1dXU56KCD1vpBdOLEibn99tvTpk2bTJ06NRMmTMhdd92VQw45JEccccQmfc5A8/TZz342//qv/5pXXnkl55xzTm655ZZ85zvfyVFHHbXOY7Vv377x7FSb6bduV111VU455ZTcdNNN+eY3v5mXX345DzzwgP0ogbX64Q9/mKlTp2bhwoU555xz8uCDD+Zf/uVf8tOf/nSNvqt/Nrnvvvs2trVr1y577713k9tXa9OmTebNm5fLLrssTzzxRCZMmND4WGeffbatQpq5ilLBd02vrq7O0KFDs2jRogwZMqTc5azh+9//fs4+++w888wz2WmnncpdTrPS3F87iq0lHp9HHnlknnzyycbLShdZS3z9KA7H58c799xzGwO2ysrKcpezVpv79XO8tGxeP5ozx2fL5bX7gDPEmrmFCxdmq622arLZH8CGevvtt5v8+emnn84vfvGLHHjggeUpCGADvfPOO7nxxhtz9NFHN9swDABoPuwh1kzdfvvt+Y//+I/cdNNN+epXv9pk4z6ADfXpT386p556aj796U9n2bJlmT17dtq3b5/zzjuv3KUBrJNXX301DzzwQObOnZvly5d/7E+7AQA+TMrSTE2YMCF1dXX5yle+kiuuuKLc5QCtzKGHHppbbrklr7zySjp06JC99947l1xySXbeeedylwawTp566qmMHj063bt3z/e///3stttu5S4JAGgBBGLN1LPPPlvuEoBW7IYbbih3CQAbxYEHHpiCb4kLAKwHe4gBAAAAUCgCMQAAAAAKRSAGAAAAQKEIxAAAAAAoFIEYAAAAAIUiEAMAAACgUARiAAAAABSKQAwAAACAQhGIAQAAAFAoAjEAAAAACkUgBgAAAEChCMQAAAAAKBSBGAAAAACF0q7cBTQXNTU15S6BdeQ1oyVwnLZMXjdaAsdpy1Su183x0jJ53WgJHKctj9fsA4UPxLp165bKysqMGTOm3KWwHiorK9OtW7dylwFrMLe0fOYXmivzS8u3OecXx0vLZz2iuTK/tGzmlqSiVCqVyl1EuT3//POpra0tdxkb3VNPPZWTTz45t9xyS/r371/ucjaJbt26pXfv3uUuA9aqtc4tSfLDH/4wt956a+67775yl7LJmF9ozlrz/PJP//RP6dWrV6ZOnVruUjaZzT2/tObj5ZBDDslxxx2Xr371q+UuZZOxHtGctdb55b/+679y4oknZs6cORk4cGC5y9kkzC3OEEuS9O7du1UeCKtWrUqSDBgwIIMHDy5zNVA8rXVuSZIePXpkiy22yJAhQ8pdChRSa55ftt5663Tt2tX8shG15uNliy22SI8ePRwvUCatdX5p27ZtkmSXXXYxv7RiNtUHAAAAoFAEYgAAAAAUikAMAAAAgEIRiAEAAABQKAIxAAAAAApFIAYAAABAoQjEAAAAACgUgRgAAAAAhSIQAwAAAKBQBGIAAAAAFIpADAAAAIBCEYixVnV1dTnnnHPSt2/fdOjQId27d8+IESNSXV1d7tKAFszcAmwq5hfWheMF2FTMLy1Hu3IXQPM0duzYzJ07N+PHj8/AgQOzfPnyPPzww6mpqcmQIUPKXR7QQplbgE3F/MK6cLwAm4r5peUQiLFW9957b0477bTMmDGjse28884rY0VAa2BuATYV8wvrwvECbCrml5bDTyZZq2233Ta//e1v89JLL5W7FKAVMbcAm4r5hXXheAE2FfNLyyEQY62mT5+e3//+9+nVq1f22muvTJkyJUuXLi13WUALZ24BNhXzC+vC8QJsKuaXlkMgxlodd9xxWbp0aWbOnJkePXrk8ssvz6677pr58+eXuzSgBTO3AJuK+YV14XgBNhXzS8tRUSqVSuUugk3jsccey5577pnFixdn8ODBGzTWq6++miFDhqRv3755+OGHN1KFQEt10UUX5eqrr87LL7+8QeOYW4CP2nfffVNVVZUf//jHGzSO+aUYdtxxx3z961/PpEmTNmgcxwvwYY8//nh22223LFy4MHvssccGjWV+ab6cIcYaGhoasmLFiiZt3bt3T48ePfLuu++WqSqgpTO3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hSIQAwAAAKBQBGIAAAAAFIpADAAAAIBCEYgBAAAAUCgCMQAA+ISmTJmSioqK1NbWrvX2QYMG5cADD0ySPPfcc6moqEhFRUVuv/32TzTWqaeemq233rpJvwMPPLBxnIqKirRv3z79+vXL6aefnhdeeGGtddxzzz059NBD07Vr13Ts2DH9+/fPhAkTsnz58sY+77zzTqqqqrLLLrvkvffeW2OMkSNHpnPnznnppZf+x78XAGhpBGIAALCJTZs2LaVSab3v37Nnz8yZMydz5szJtddem6OPPjo333xz9t1339TX1zfpO2HChIwaNSqvvPJKzj///MyaNSvDhw/PrFmzMnjw4CxZsiRJ0rFjx8yePTtLlizJpZde2mSMn/70p/nlL3+Ziy++OD169FjvugGguWpX7gIAAKA122233bJ48eLceeed+eIXv7heY3Tu3Dljxoxp0tavX7+MHz8+jzzySEaMGJEkueWWWzJjxowcf/zxuemmm9K2bdvG/qeeemoOOuigHHvssamurk67du0yYsSInHTSSbn00ktz4oknpn///nnjjTdy7rnnZs8998y4cePW/4kDQDPmDDEAANiETjjhhPTv33+DzxL7qB122CFJ0q7df3/HPXXq1HTp0iXXX399kzAsSfbaa6+cf/75eeKJJzJ37tzG9iuuuCKVlZUZO3ZskmTixIl57bXXct1116VNGx8XAGidrHAAALAJtW3bNpMmTcrjjz+eO++8c73GaGhoSG1tbWpra/Pyyy/nwQcfzOTJk1NVVZVhw4YlSZ5++uksWbIkX/jCF7LNNtusdZxTTjklyQd7jK3WvXv3XHbZZXnooYdy5pln5vrrr89ZZ52V3Xfffb1qBYCWQCAGAACb2EknnZSdd955vc8S+8Mf/pDtt98+22+/fXr06JGDDz44q1atyn333Zf27dsnSZ566qkkyeDBgz92nL59+2abbbZJTU1Nk/bTTjstw4YNy6xZs9KzZ89MmzZtnWsEgJZEIAYAAJvYh88Smzdv3jrfv2/fvrn//vtz//33Z/78+bnyyiuzYsWKjBw5Mq+99lqSpK6uLknSqVOnvzlWp06d8uabbzZpq6ioyHbbbZck2Xvvvde40iUAtDYCMQAA2IgqKirW2j569OhUVVWt11liW221VYYPH57hw4fn0EMPzdlnn5277rorS5YsyWWXXZbk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HAAAKJyampqMGTMmtbW1AjEANovCB2KrDRgwIEOGDCl3GQAAAABsYjbVBwAAAKBQBGIAAAAAFIpADAAAAIBCEYgBAAAAUCgCMQAAAAAKRSAGAAAAQKEIxAAAAAAoFIEYAAAAAIUiEAMAAACgUARiAAAAABSKQAwAAACAQhGIAQAAAFAoAjEAAAAACkUgBgAAAEChCMQA2GimTJmSioqK1NbWrvX2QYMG5cADD0ySPPfcc6moqEhFRUVuv/32TzTWqaeemq233rpJvwMPPLBxnIqKirRv3z79+vXL6aefnhdeeGGtddxzzz059NBD07Vr13Ts2DH9+/fPhAkTsnz58sY+77zzTqqqqrLLLrvkvffeW2OMkSNHpnPnznnppZf+x78XAACgeRGIAVB206ZNS6lUWu/79+zZM3PmzMmcOXNy7bXX5uijj87NN9+cfffdN/X19U36TpgwIaNGjcorr7yS888/P7Nmzcrw4cMza9asDB48OEuWLEmSdOzYMbNnz86SJUty6aWXNhnjpz/9aX75y1/m4osvTo8ePda7bgAAoDzalbsAAIptt912y+LFi3PnnXfmi1/84nqN0blz54wZM6ZJW79+/TJ+/Pg88sgjGTFiRJLklltuyYwZM3L88cfnpptuStu2bRv7n3rqqTnooINy7LHHprq6Ou3atcuIESNy0kkn5dJLL82JJ56Y/v3754033si5556bPffcM+PGjVv/Jw4AAJSNM8QAKKsTTjgh/fv33+CzxD5qhx12SJK0a/ff3/1MnTo1Xbp0yfXXX98kDEuSvfbaK+eff36eeOKJzJ07t7H9iiuuSGVlZcaOHZskmThxYl577bVcd911adPGMgoAAC2Rd/IAlFXbtm0zadKkPP7447nzzjvXa4yGhobU1tamtrY2L7/8ch588MFMnjw5VVVVGTZsWJLk6aefzpIlS/KFL3wh22yzzVrHOeWUU5J8sMfYat27d89ll12Whx56KGeeeWauv/76nHXWWdl9993Xq1YAAKD8BGIAlN1JJ52UnXfeeb3PEvvDH/6Q7bffPttvv3169OiRgw8+OKtWrcp9992X9u3bJ0meeuqpJMngwYM/dpy+fftmm222SU1NTZP20047LcOGDcusWbPSs2fPTJs2bZ1rBAAAmg+BGABl9+GzxObNm7fO9+/bt2/uv//+3H///Zk/f36uvPLKrFixIiNHjsxrr72WJKmrq0uSdOrU6W+O1alTp7z55ptN2ioqKrLddtslSfbee+81rnQJAAC0LAIxADarioqKtbaPHj06VVVV63WW2FZbbZXhw4dn+PDhOfTQQ3P22WfnrrvuypIlS3LZZZcl+e8gbHUw9nHq6urWCM3uuOOO3H333Rk0aFBuu+22LFiwYJ3qAwAAmheBGAAbTceOHZMkb7/99lpvr6+vb+zzUavPElu8eHF+/vOfb3AtQ4cOTefOnfPrX/86STJgwIAkye9+97uPvc+yZcvy5ptvZuDAgY1tdXV1OeusszJ06NA8+uij6dOnT84444y8//77G1wjAABQHgIxADaaPn36JEmWLFmyxm319fV54YUXGvuszZgxY1JVVZWpU6dulCtONjQ05K233kqS9O/fP/3798+8efM+9iyxn/zkJ0mSww8/vLFt0qRJefnll3PdddelU6dOmTlzZp588snMmDFjg+sDAADKQyAGwEZz8MEHp3379pk9e3ZWrVrV5Lbrr78+K1euzMiRIz/2/h8+S+yuu+7aoFoeeuihvPXWW0020b/gggvy+uuvZ+zYsWloaGjSf9GiRfnOd76TQYMG5eijj25su/rqqzN+/PgMHTo0yQdh2VFHHZULL7wwy5Yt26AaAQCA8mhX7gIAaD26d++eCy64IJMmTcr++++fI444IpWVlXn00Udzyy235JBDDsmoUaP+5hijR4/OhRdemMWLF3/ix12xYkVuvPHGJMnKlSuzZMmSzJ49O1tuuWUmTpzYZOyFCxfmqquuylNPPZXRo0enS5cuqa6uzo9+9KN07do1c+fOzRZbbJGGhoacfvrp2WGHHXLRRRc1ebyrrroqAwcOzJlnnrnBwR0AALD5CcQA2Ki+/e1vp2/fvpk1a1amTZuWlStXpl+/fpk6dWrOP//8tGnzt09ObteuXSZNmpQvf/nLn/gxX3zxxZx88slJPti0v0uXLjnggAMyefLk7Lbbbk36XnnllTnooINy9dVX55JLLkl9fX169eqVr3/965k4cWK6deuWJJk5c2aqq6szd+7cNTbZ79WrV6ZMmZIJEybkzjvvzFFHHfWJawUAAMqvorQxNmlpwaqrqzN06NAsWrQoQ4YMKXc5AABQON6TA7C52UMMAAAAgEIRiAEAAABQKAIxAAAAAApFIAYAAABAoQjE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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from lambeq import TreeReader\n", "\n", "reader = TreeReader()\n", "sentence = \"John gave Mary a flower\"\n", "\n", "tree_diagram = reader.sentence2diagram(sentence)\n", "tree_diagram.draw(figsize=(12,5), fontsize=12)" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Note that in this default call, composition is handled by a single \"cell\" named ``UNIBOX``. This can be changed by passing an explicit argument of type :py:class:`.TreeReaderMode` to the reader's constructor. There are three possible choices:\n", "\n", "- :py:obj:`NO_TYPE` is the default, where all compositions are handled by the same ``UNIBOX`` cell (above diagram).\n", "- :py:obj:`RULE_ONLY` creates a different cell for each CCG rule.\n", "- :py:obj:`RULE_TYPE` creates a different cell for each (rule, type) pair.\n", "\n", "For example:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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rlzZ6GPXr18fP/vZz2Ls2LEN266//vq44IIL4vDDD48bb7wxJk+eHA899FB85CMfic2bN7fkQwZaUc+ePeOkk06KuXPnNmxbunRpbNmypdGasMvNN98cxxxzTEydOjW+9rWvRYcOHWLUqFFx3333Ndn34Ycfji996UsxZsyYuPnmm+PQQw+NcePGxdKlS+Pll19utO8Pf/jD+POf/xzjxo3b8w+STK1cuTIee+yxGDt2bNxyyy0xYcKEeOihh+K0005r8otfoG265JJL4uqrr46IiC984Qtx5513xj//8z83u+9FF10UX/3qV6O2tjZuuummOPXUU+PrX/96o3PSwIED4+WXX45f//rXDdtWrFgR7dq1ixUrVjTaFhHxkY98JCLefpbXiBEj4hvf+EYMHz48ZsyYEWeffXbcdNNNMWbMmCazvPs81rNnz/f934L3oZC4J598shARhSeffDLrUZo1e/bsQkQUVq5cWSgUCoWjjz66UFlZWdi0aVPDPk8//XShXbt2hQsuuKBh2zXXXFOIiMJnP/vZRvf3yU9+stC9e/dG2yKi0LFjx8KaNWsa3WdEFGbMmNESD2uPKPavHWkr5uNz+PDhhfLy8sIf/vCHhm2rV68udOjQofDO08K2bduafOzHPvaxwmGHHdbw7y1bthTKysoKl19+eaP9pk2bVsjlcoX169cXCoVC4fnnny+0b9++cP311zfa71e/+lWhQ4cOTbZnrZi/flCsx+c7v2f55je/Wdh7770b1pFRo0YVBg0aVCgUCoVDDjmkMHTo0IaPe/da8+abbxaOOuqowumnn95oe0QU2rVrV/j1r3/daPtvf/vbQkQUbr311kbbR4wYUejZs2dh586de+wx7gmt/fUr1uPl/Wju/PT4448XIqLw/e9/P4OJWk5b/PrRdmR9fP74xz8uRERhwYIFDdt2/Ry8y1NPPVWIiMJFF13U6GOvuOKKQkQUHn744UKhUChs3LixEBGFWbNmFQqFQmHz5s2Fdu3aFUaNGlU44IADGj7uC1/4QmG//fZrOLfceeedhXbt2hVWrFjR6P5vu+22QkQUHn300YZt73Uey0LWX7ti4RliJeSll16Kp556KsaPHx/77bdfw/Z/+Id/iMGDB8ePfvSjJh8zYcKERv8eOHBgbNq0Kf785z832n7GGWdEr169Gt3nBz7wgVi7du0efhRAlnbs2BHLly+Ps88+O6qqqhq29+7dO4YMGdJo386dOzf8fcuWLVFfXx+nnnpqrF27NrZs2RIRER/4wAdiyJAhMX/+/EZPMf/BD34QJ554YlRXV0dExKJFi2Lnzp0xevToqK+vb/hz4IEHxuGHHx4//vGPW/JhA61s9OjRsX379rj33ntj69atce+99zb7csmIxmvNK6+8Elu2bImBAwfGqlWrmux76qmnRp8+fRptO+KII+KEE06IfD7fsO3ll1+OpUuXxqc//elGLwWnbXjnMfPWW2/Fpk2bonfv3tGtW7dmjxsgXbt+Rr7ssssabb/88ssjIhqejbz//vvHkUceGf/93/8dERGPPvpotG/fPr785S/Hn/70p1i9enVEvP0MsQEDBjScWxYsWBA1NTVx5JFHNvoe9/TTT4+IaPI9bnPnMbLjXSZLyPr16yMi4kMf+lCT22pqauKBBx6I1157Lbp06dKwfdcPo7vsu+++EfH2N5wf+MAH3nO/Xfu+8sore2R2oDhs3Lgxtm/fHr17925y27u3Pfroo3HNNdfE448/3uQlKFu2bIl99tknIt5+2eTixYvj8ccfj5NPPjmee+65ePLJJ+M///M/G/ZfvXp1FAqFOPzww5uda6+99nqfjwwoJvvvv3+cccYZcdddd8W2bdtix44dMXLkyGb3vffee+O6666Lp556qtH1VpoLWYceemiz93HBBRfEpEmTYv369XHIIYfEggUL4q233orzzz9/zzwgisr27dvj61//esyePTv+8Ic/NPqFzK5f2ABEvP0zdLt27Zp8n3vggQdGt27dGn7Gjnj7ySO7AtqKFSuif//+0b9//9hvv/1ixYoVccABB8TTTz/d6Bc8q1evjrq6uth///2b/fy7Lvy/y3udx8iGINbGtW/fvtnt7/zGYXf2A9Lw3HPPxUc/+tE48sgj48Ybb4wePXpEx44d40c/+lHcdNNNsXPnzoZ9hw8fHuXl5TF//vw4+eSTY/78+dGuXbsYNWpUwz47d+6MXC4XS5cubXa96dq1a6s8LqD1fOpTn4qLL744/vjHP8aQIUOafRewFStWxIgRI+IjH/lIzJo1Kw466KDYa6+9Yvbs2XHXXXc12f+dzwx6p7Fjx8aXvvSlyOfzcfXVV8ecOXOif//+zf4SkdL3+c9/PmbPnh2TJ0+Ok046KfbZZ5/I5XIxduzYRucngF3+lmcLDxgwIG6//fZYu3ZtrFixIgYOHBi5XC4GDBgQK1asiKqqqti5c2cMHDiw4WN27twZH/7wh+PGG29s9j579OjR6N/vdR4jG4JYCTnkkEMiIuK3v/1tk9ueffbZqKioaPTsMIB3q6ysjE6dOsWaNWua3PbObT/84Q/jjTfeiCVLljR6BmlzL23s0qVLDBs2LBYsWBA33nhj/OAHP4iBAwc2eklmr169olAoxKGHHhpHHHHEHn5UQDH65Cc/GZdcckn87Gc/ix/84AfN7nP33XdHp06d4oEHHoiysrKG7bNnz96tz7XffvvF0KFDI5/Px6c//el49NFHGz1LlbZl4cKF8ZnPfCamT5/esO3111/3Bi1AE4ccckjs3LkzVq9eHTU1NQ3b//SnP8XmzZsbfsaOiIbQ9eCDD8bKlSvjqquuioi3L6B/6623RlVVVXTp0iWOPfbYho/p1atXPP300/HRj37US/RLkGuIlZCDDjoojj766Pje977X6IT/zDPPxLJly+Kss87KbjigJLRv3z7OOOOMWLx4cbz44osN29esWRNLly5ttF9ENHkZynv9kDpmzJh48cUX49vf/nY8/fTTTd5V55xzzon27dvHtdde2+SZp4VCwTvaQhvUtWvXuPXWW2PKlCkxfPjwZvdp37595HK52LFjR8O2559/vsm73v4tzj///PjNb34TX/7yl6N9+/bNvqMlbUP79u2bnEtmzJjR6DgCiIiGn5Hf/UuSXc/oGjp0aMO2Qw89ND74wQ/GTTfdFG+99VaccsopEfF2KHvuuedi4cKFceKJJ0aHDv//eUWjR4+OP/zhD3H77bc3+dzbt2+P1157bU8/JPYgzxArMTfccEMMGTIkTjrppLjwwgtj+/btMWPGjNhnn31iypQpWY8HlIApU6bEsmXL4pRTTolLL700duzYEd/85jfjqKOOiqeeeioiIs4888zo2LFjDB8+PC655JJ49dVX4/bbb4/Kysp46aWXmtznWWedFXvvvXdcccUV0b59+zj33HMb3d6rV6+47rrr4itf+Uo8//zzcfbZZ8fee+8d69ati3vuuSc+97nPxRVXXNEaDx9oRZ/5zGf+z9uHDh0aN954Y3z84x+PT33qU7Fx48aYOXNm9O7dO375y1/u1ucaOnRodO/ePRYsWBBDhgyJysrK9zM6RWzYsGFx5513xj777BN9+vSJxx9/PJYvXx7du3fPejSgyPTr1y8+85nPxLe+9a3YvHlznHrqqfHzn/88vve978XZZ58dgwYNarT/wIEDY968efHhD3+44frbtbW10aVLl/jd737X5A1izj///Jg/f35MmDAhfvzjH8cpp5wSO3bsiGeffTbmz58fDzzwQPTv37/VHi+7xzPEityu337terbGGWecEffff3907949vvrVr8Y3vvGNOPHEE+PRRx91gT7gb3LsscfG0qVLY999941//dd/je985zsxderU+OhHPxqdOnWKiLffvGPhwoWRy+XiiiuuiNtuuy0+97nPxRe/+MVm77NTp04xYsSI2Lp1awwaNKjZH0SvuuqquPvuu6Ndu3Zx7bXXxhVXXBFLliyJM888M0aMGNGijxkoTqeffnp85zvfiT/+8Y8xefLkmDt3bvzHf/xHfPKTn9zt++rYsWPDs1NdTL9tu/nmm+OCCy6IfD4fl19+ebz00kuxfPly16MEmvXtb387rr322li5cmVMnjw5Hn744fjKV74S8+bNa7LvrpdNDhgwoGFbhw4d4qSTTmp0+y7t2rWLxYsXx7//+7/Hr371q7jiiisaPtcXv/hFlwopcrlC4ldNX7VqVRx77LHx5JNPRm1tbdbjNHHLLbfEF7/4xVizZk306tUr63GKSrF/7UhbKR6fZ599dvz6179ueFvplJXi1490OD7f25e+9KWGwFZeXp71OM1q7a+f46W0+fpRzByfpcvX7m2eIVbkVq5cGV26dGl0sT+A92v79u2N/r169er40Y9+FKeddlo2AwG8T6+//nrMmTMnzj333KKNYQBA8XANsSJ19913x09+8pPI5/Nx0UUXNbpwH8D7ddhhh8X48ePjsMMOi/Xr18ett94aHTt2jCuvvDLr0QB2y8aNG2P58uWxcOHC2LRp03u+tBsA4J1UliJ1xRVXxNatW+PCCy+Mm266KetxgDbm4x//eMydOzf++Mc/RllZWZx00knxta99LQ4//PCsRwPYLb/5zW/i05/+dFRWVsYtt9wSRx99dNYjAQAlQBArUuvWrct6BKANmz17dtYjAOwRp512WiR+SVwA4O/gGmIAAAAAJEUQAwAAACApghgAAAAASRHEAAAAAEiKIAYAAABAUgQxAAAAAJIiiAEAAACQFEEMAAAAgKQI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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from lambeq import TreeReader, TreeReaderMode\n", "\n", "reader = TreeReader(mode=TreeReaderMode.RULE_ONLY)\n", "sentence = \"John gave Mary a flower\"\n", "\n", "tree_diagram = reader.sentence2diagram(sentence)\n", "tree_diagram.draw(figsize=(12,5), fontsize=12)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the above, each unique CCG rule gets its own box: FA boxes correspond to forward application, and BA boxes to backward application. For certain tasks, making the composition box rule-specific might lead to better generalisation and overall performance." ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ ".. rubric:: See also:\n", "\n", "- :ref:`sec-preprocessing`\n", "- :ref:`lambeq.text2diagram package `\n", "- `Example notebook parser.ipynb <../examples/parser.ipynb>`_\n", "- `Example notebook reader.ipynb <../examples/reader.ipynb>`_\n", "- `Example notebook tree-reader.ipynb <../examples/tree-reader.ipynb>`_\n", "- `DisCoCat in lambeq <./discocat.ipynb>`_\n", "- `Extending lambeq <./extend-lambeq.ipynb>`_" ] } ], "metadata": { "language_info": { "name": "python" } }, "nbformat": 4, "nbformat_minor": 4 }