{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Working with syntactic information\n", "\n", "This notebook introduces how to write and parse instructions to interpret dependency information for dependency-based models in the `nephosem` package." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import sys\n", "nephosemdir = \"../../nephosem/\"\n", "sys.path.append(nephosemdir)\n", "from nephosem import PatternGraph, MacroGraph\n", "mydir = f\"./\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The instructions for the code to parse the dependency information in the corpus are coded as .graphml and .xml files, that are read to create `nephosem.PatternGraph` and `nephosem.MacroGraph` objects respectively." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "path_graphml_fname = f\"{mydir}/templates/LEMMAPATH.template.graphml\"\n", "path_patterns = PatternGraph.read_graphml(path_graphml_fname)\n", "\n", "path_macro_fname = f\"{mydir}/templates/LEMMAPATH.target-feature-macro.xml\"\n", "path_macros = MacroGraph.read_xml(path_macro_fname, path_patterns)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is a fragment of the raw `path_patterns`, the .graphml file:\n", "\n", "```xml\n", "\n", " \n", " (.+)\n", " \n", " \n", " (\\w+)\n", " \n", " \n", " \n", " \n", " \n", " \n", " \\w+\n", " \n", " \n", "\n", "```\n", "\n", "The structure is as follows: the main element is a `` tag, that always stay the same, within which we have three `` tags setting up the main elements we are now interested in: lemma and pos for the nodes, and deprel for the key. Inside them, the `` tag lets us set up a default regex expression for filtering these items, but then we can make further specifications within the specific graphs. Afterwards, we can add as many `` tags as we want, each of them representing one pattern to match.\n", "\n", "Each `` tag has an id (which is a string with a number) and a property `edgedefault=\"directed\"`. Inside the `` tag we can have `` and `` tags indicating the nodes (items) and edges (relationships) in the pattern. Here we have two nodes, 1 and 2, joined by an edge that goes from 1 (source attribute) to 2 (target attribute): node 1 is the head of node 2, e.g the verb for its direct object. We could specify that we want the direct object by filling in the `` element within `` as `\"dobj\"` instead of `\"\\w+\"`. Note that this `` element has a `key` attribute with value `\"e1\"`, indicating that it points to the element defined by ``.\n", "Within the nodes, we could have a similar `` element with a `key` attribute and valeue `\"n1\"` if we want to filter by lemma or `\"n2\"` if we want to filter by part-of-speech.\n", "\n", "The following is a fragment of the raw `path_macros`, the .xml file:\n", "\n", "```xml\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " lemma/pos/fid/lid\n", " \n", " \n", " \n", " \n", " \n", " \n", " lemma/pos\n", " \n", " deprel\n", " \n", " \n", " \n", " \n", " Empty\n", " \n", " \n", " Words that depend directly on the target.\n", " \n", " \n", "\n", "```\n", "\n", "In this case, after the small xml preamble, we have the mail element ``, within which we find one `` element to specify the format of the target, one `` tag to specify the format of the feature elements (the columns of our matrices), and as many `` elements as we have templates/macros to describe.\n", "\n", "In the `` element, the `` element gives instructions to capture the elements of a node and chain them. The `fid` and `lid` elements are only relevant at token-level. The same goes for ``, where a reference to the edge is included.\n", "\n", "The `` element has an attribute `\"id\"` (with a number as a string) and three child elements. The first element inside it, ``, also has an attribute `\"id\"` that points to the id of a `` element in the .graphml file. It is unrelated to the `\"id\"` of the parent element. The `` and `` elements point to the nodes in that `` that take the roles of node and feature. Here, because the `\"nodeID\"` attribute of `` is `\"1\"`, the target is the head of the relationship in that graph; because the `\"featureID\"` attribute of `` is `\"2\"`, the feature is the dependent. Optionally, you can add a description of the item. With this format, the features will be the lemma/pos combination; if you exclude the `\"featureID\"` attribute altogether, the full template will become the feature (including dependency information).\n", "\n", "Examples of application at type level can be found in [section 3.2](all-in-one.ipynb#3.2-Dependency-based) of the comprehensive tutorial; applications at token level are found in sections [5.2](all-in-one.ipynb#5.2.-Lemmarel) and [5.3](all-in-one.ipynb#5.3.-Lemmapath) for lemma/pos as features and [5.4](all-in-one.ipynb#5.4.-Deppath) for full path as feature.\n", "\n", "The functions below let you visualize the graphs used for the patterns." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from nephosem.specutils.deputils import parse_pattern, draw_tree, draw_match, draw_labels, get_root\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "def plot_patterns(macros_list):\n", " plt.rcParams['figure.figsize'] = (20.0, 32.0)\n", " for i in range(len(macros_list)):\n", " plt.subplot(5, 2, i+1)\n", " draw_labels(macros_list[i].graph, v_labels='pos', e_labels='deprel')\n", " plt.show()\n", "\n", "plot_patterns(path_macros)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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GhhXO3fuzHXXXZf7778/g4ODuf/++3Pdddelv78/nZ2du18AAIzIC5P0N3nM/iQva/KYwEHGptLAuGpra8vnPve5vOY1r9l97vrrr883vvGNLF68uIWVAQAckmaNwZjdSY4cg3GBg4glY0CzjGjJ2IwZM/LYY4+lre23ExQHBwdz+OGHZ9OmTcPdYskYAMD+XZrk2iTTmzjmziTvS/LRJo4JHGTMEALG1axZs3L77bfnJS95ye5z3/3ud3PUUUe1sCoAgInt+OOPz/4mA6xYsWKcqwEOBgIhYFxdeeWVeeUrX5mFCxdm7ty5WblyZW644YZcc801rS4NAGDC+tCHPrTX8UMPPZTFixfnda97XYsqAlrNkjGgWUb82Pn/+I//yD//8z/ngQceyJw5c/L6178+z3/+8/d3uSVjAAD7d8BLxu6999686U1vyne+851937JkDApghhAw5i655JJ85Stf2X38/Oc//4kCIAAAxsEzn/nM/OQnP2l1GUCLCISAMbd06dL83d/9XU4//fS0t7fv97rzzjsvSfKDH/wg55xzzniVBwAw4d1xxx17Hff29ua6667L8ccf36KKgFazZAxolv0uGbvtttvyl3/5l7nvvvvS19c37M11Xae/vz9J0tPTkw0bNux6y5IxAID9G9GSsa6uvVu0gYGBHHfccfmXf/mXnHLKKftebskYFKDtyS8BGJ3zzz8/S5cuzdatW9PX1zfsa1cYlGTPMAgAgCbYt/dat25dfv/3fz+//OUvW10a0CICIQAAgML09PTkk5/8ZN7//ve3uhSgRewhBIy5TZs2ZePGjU/pnmc84xljVA0AAEmybt26rF+/vtVlAC0iEALG3Kc+9al84AMfGPH1dV1ncHBwDCsCACjLZZddttdxb29vbr/99lxyySUtqghoNUvGgDF35ZVXZmBgYMQvYRAAQHN1dnbu9ZozZ04++clP5p/+6Z9aXRrQImYIAQAATHCLFy/O5s2bc8stt2T16tV5+tOfnosuuihtbeYIQKkEQsC4uuOOO/b73nnnnTeOlQAAlOPOO+/MhRdemK6ursydOzerVq3K29/+9tx666059dRTW10e0AICIWBcXXDBBXsdDwwMpK7rtLe37/XoeQAAmucv/uIv8ra3vS1/9Vd/tfvchz/84bz97W/Pbbfd1sLKgFYRCAHjqq+vb6/jDRs25IorrvidoAgAgOZZunRpvvnNb+517l3velc+9rGPtagioNUsGAVaqqenJ1dffXXe+973troUAIAJa+bMmbn//vv3Ord8+fL09PS0qCKg1cwQAlpu69atefTRR1tdBgDAhLVo0aJcdNFFefe7351nPvOZWb58eT760Y9m0aJFrS4NaBGBEDCuPvCBD+x1vG3btvzrv/5rLrzwwhZVBAAw8b33ve/N5MmT84lPfGL3U8be/OY35x3veEerSwNapKrrutU1ABPDzCRrk3Q90UX7Bj/Tpk3LGWeckbe+9a057LDDhrvlZ0nOaFaRAAATzKVJrk0yvYlj7kzyviQfbeKYwEHGDCFgXN16662tLgEAoEibNm3K1772tTz44IN52tOelle+8pWZPr2ZORJwKBEIAePqu9/9bqZOnZozzzwzSXLHHXekr6/PU8YAAMbQj370o1x00UWZOnVqnvGMZ2TVqlV529velq9//es566yzWl0e0AKeMgaMq3e+853ZsWNHkmTJkiV59atfnUWLFuWv//qvW1wZAMDE9Za3vCXvec97snLlytxxxx1ZuXJlrrjiirzlLW9pdWlAi9hDCGiWEe0hNGPGjKxbty5dXV0599xz8773vS+nnHJKzjzzzDz44IPD3WIPIQCA/RvRHkLTp0/Phg0b0tHx20UiO3fuTE9PTzZv3rzv5fYQggKYIQSMq/b29rS3t2f79u258847M3/+/MyePTtbt25tdWkAABPWaaedljvvvHOvc0uXLs1pp53WooqAVrOHEDCuTjnllHzkIx/Jli1b8oIXvCCTJk3K+vXrc8QRR7S6NACACevCCy/MK17xiixatCjHHXdcVqxYkU9/+tN585vfnM9//vO7r/uTP/mTFlYJjCdLxoBmGdGSsZ/+9Kd5zWtek507d+bGG2/M6aefnl/84hf5wQ9+sL817JaMAQDs34iWjB1//PFPOlBd11mxYkViyRgUQSAENMuIAqEDIBACANi/EQVCT5FACApgyRgw7rZu3Zp77703W7Zs2ev8eeed16KKAAAOWYNjMGY9RuMCBxGBEDCubrzxxlx22WXZunVr2tvbd5+v6zr9/f0trAwA4JD00BiMuT3JmjEYFziIeMoYMK7e9a535aqrrsr27dvT19e3+yUMAgA4ID8agzEnJfnGGIwLHEQEQsC4Wr9+fd70pjels7Oz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EYEQAADAnNlUGlhXF154Ye985zsfc+8d73hHz3/+8zeoIgAAgOnRIQTMy6o6hD75yU/2qle9qrPPPrtnPetZ3XXXXR0+fLibbrqpl7zkjI1AOoQAAADmTCAEzMuqAqGqQ4cO9eEPf7i77rqrCy64oNe85jXt2LHjiYYLhAAAAObMKWPAujp+/Hjvete7es973vNoILR///7e9ra3tby8vNHlAQAATIJACFhXb3/727v++ut729ve1p49e9q/f39XX311x44d66qrrtro8gAAACbBkjFgXla1ZOzZz352H/3oR9u7d++j9+64446+//u/vzvvvPNMj1gyBgAAMGdOGQPW1cGDB9uzZ89j7u3Zs6f7779/YwoCAACYIIEQsK6+7du+rauvvrpT3YnjOPYzP/MzvehFL9rgygAAAKbDkjFgXla1ZOy2227rsssua3l5+dE9hE6cONHHPvaxLrroojM9YskYAADAnAmEgHlZ9bHzDz74YDfddFNf/OIXe+Yzn9mrX/1qx84DAACsI4EQMC+rDoT+ngRCAAAAc+bYeWBdvfGNb1zVuF/5lV9ZcCUAAADTZVNpYF0dP3686667rs997nOdPHmyz33uc1133XUdO3aszZs3P/oPAACAxdEhBKyrpaWl3vve9/b617/+0XvXX399H/nIR7r22ms3sDIAAIDpsIcQMC+r2kNo165dHThwoKWlv2lQPHnyZLt37+6BBx440yP2EAIAAJgzS8aAdXXeeed1yy23PObeb/7mb/b0pz99YwoCAACYIEvGgHV11VVX9ZrXvKYrrriiPXv2tH///m644YZ+4Rd+YaNLAwAAmAwdQsC6esMb3tDNN9/c9u3b+5M/+ZO2b9/exz/+8d7whjdsdGkAAACTYQ8hYF6ecA+h1772tf36r//6k53XHkIAAABzZskYsHC33nprP/dzP9eLX/zilpeXn3DcJZdcUtUnPvGJLr744vUqDwAAYHJ0CAHz8oQdQjfffHNvfetb++xnP9vRo0fP+PA4jh07dqyqc889t/vuu+/UWzqEAAAA5kwgBMzLqo6dfxIEQgAAAHNmU2kAAACAiREIAfPySIvZl+yhBcwJAAAwaQIhYF4eqfbPec4j1c1znhMAAGDyBELAPP2n5tvRc7z6H3OcDwAAgBw7D8zXu6pvqP5ds+6e4dQbR4+2+eTJM4fQmzd3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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "rel_graphml_fname = f\"{mydir}/templates/LEMMAREL.template.graphml\"\n", "rel_patterns = PatternGraph.read_graphml(rel_graphml_fname)\n", "\n", "rel_macro_fname = f\"{mydir}/templates/LEMMAREL.target-feature-macro.xml\"\n", "rel_macros = MacroGraph.read_xml(rel_macro_fname, rel_patterns)\n", "plot_patterns(rel_macros)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.9" } }, "nbformat": 4, "nbformat_minor": 2 }