{ "cells": [ { "cell_type": "markdown", "id": "2953c54e5b188d5e", "metadata": {}, "source": [ "# A Method for Learning Large-Scale Computational Construction Grammars from Semantically Annotated Corpora\n", "\n", "
\n", "This interactive notebook accompanies the following paper:\n", "\n", "Authors. (submitted). A Method for Learning Large-Scale Computational Construction Grammars from Semantically Annotated Corpora.\n", "\n", "Abstract: *We present a method for learning large-scale, broad-coverage construction grammars from corpora of language use. Starting from utterances annotated with constituency structure and semantic frames, the method facilitates the learning of human-interpretable computational construction grammars that capture the intricate relationship between syntactic structures and the semantic relations they express. The resulting grammars consist of networks of tens of thousands of constructions formalised within the Fluid Construction Grammar framework. Not only do these grammars support the frame-semantic analysis of open-domain text, they also house a trove of information about the syntactico-semantic usage patterns present in the data they were learnt from. The method and learnt grammars contribute to the scaling of usage-based, constructionist approaches to language, as they corroborate the scalability of a number of fundamental construction grammar conjectures while also providing a practical instrument for the constructionist study of English argument structure in broad-coverage corpora.*\n", "\n", "
\n", "\n", "This notebook relies on the ```fcg-propbank``` subsystem for learning large-scale construction grammars from PropBank-annotated corpora. It demonstrates (i) how a pretrained grammar comprising tens of thousands of constructions can be loaded into an FCG agent and used to extract semantic frames from open-domain text, (ii) how we can mine the grammar network for retrieving linguistic insights, and (iii) how a new grammar can be learnt from annotated data.\n" ] }, { "cell_type": "code", "id": "52929f6263d7f3c9", "metadata": {}, "source": [ "# Run this cell if you have not yet installed these packages\n", "! pip install pyfcg\n", "! pip install nltk" ], "outputs": [], "execution_count": null }, { "cell_type": "code", "id": "7656b26a", "metadata": { "ExecuteTime": { "end_time": "2026-03-17T11:00:43.643251Z", "start_time": "2026-03-17T11:00:43.570243Z" } }, "source": [ "import pyfcg as fcg\n", "fcg.init(launch=False)" ], "outputs": [], "execution_count": 1 }, { "cell_type": "markdown", "id": "74e7b821", "metadata": {}, "source": [ "## Loading a pre-trained grammar" ] }, { "metadata": {}, "cell_type": "markdown", "source": "We start by creating an FCG agent. In this case, the agent is an instance of the ```fcg.PropBankAgent``` class, a subclass of the ```fcg.Agent``` class provided by the ```fcg-propbank``` subsystem.", "id": "e0c7872521a1c3ba" }, { "metadata": { "ExecuteTime": { "end_time": "2026-03-17T11:00:45.808941Z", "start_time": "2026-03-17T11:00:45.770100Z" } }, "cell_type": "code", "source": "propbank_agent = fcg.PropBankAgent()", "id": "32a4a6097b136aee", "outputs": [], "execution_count": 2 }, { "metadata": {}, "cell_type": "markdown", "source": "We release three pretrained, precompiled FCG grammars for English argument structure that were trained using the method described in the paper. Once you have selected the pretrained grammar of your choice, you can load it into our agent using its ```load_grammar_image``` method. The loading can take up to 30 seconds.", "id": "c1de173a14f03af2" }, { "metadata": { "ExecuteTime": { "end_time": "2026-03-17T11:00:47.378502Z", "start_time": "2026-03-17T11:00:47.364979Z" } }, "cell_type": "code", "source": [ "# Grammar trained on full training corpus, all roleset instances\n", "pretrained_grammar_image_full = '/Users/katrien/Desktop/propbank-learned.fcg'\n", "\n", "# Grammar trained on full training corpus, only roleset instances that have at least one role apart from the V-role.\n", "pretrained_grammar_image_filtered_single_role_rolesets = '/Users/katrien/Desktop/propbank-learned-no-single-role-frames.fcg'\n", "\n", "# Grammar trained on full training corpus, hapaxes removed after training (constructions with frequency of 1)\n", "pretrained_grammar_image_no_hapaxes = '/Users/katrien/Desktop/propbank-learned-no-hapaxes.fcg'" ], "id": "568323a6ff743ae7", "outputs": [], "execution_count": 3 }, { "cell_type": "code", "id": "a7930b3fbf30f650", "metadata": { "ExecuteTime": { "end_time": "2026-03-17T11:01:29.757082Z", "start_time": "2026-03-17T11:00:59.269025Z" } }, "source": [ "propbank_agent.load_grammar_image(pretrained_grammar_image_filtered_single_role_rolesets) #change argument if you want to load another image\n", "propbank_agent" ], "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "execution_count": 5 }, { "metadata": {}, "cell_type": "markdown", "source": "Let us have a look at the distribution of constructions in the grammar:", "id": "f08d16301629819d" }, { "metadata": { "ExecuteTime": { "end_time": "2026-03-17T11:01:36.520185Z", "start_time": "2026-03-17T11:01:36.413921Z" } }, "cell_type": "code", "source": [ "def get_all_cxns_of_type(grammar, type):\n", " filtered_cxns = []\n", " for cxn in list(grammar.cxns.values()):\n", " if cxn.attributes['label'] == type:\n", " filtered_cxns.append(cxn)\n", " return filtered_cxns\n", "\n", "argst_cxns = get_all_cxns_of_type(propbank_agent.grammar, 'argument-structure-cxn')\n", "fe_cxns = get_all_cxns_of_type(propbank_agent.grammar, 'lexical-cxn')\n", "roleset_cxns = get_all_cxns_of_type(propbank_agent.grammar, 'word-sense-cxn')\n", "\n", "print('Number of frame-evoking cxns:')\n", "display(len(fe_cxns))\n", "print('Number of argument structure cxns:')\n", "display(len(argst_cxns))\n", "print('Number of roleset cxns:')\n", "display(len(roleset_cxns))" ], "id": "a9be1e248c69abe6", "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of frame-evoking cxns:\n" ] }, { "data": { "text/plain": [ "8626" ] }, "metadata": {}, "output_type": "display_data", "jetTransient": { "display_id": null } }, { "name": "stdout", "output_type": "stream", "text": [ "Number of argument structure cxns:\n" ] }, { "data": { "text/plain": [ "22535" ] }, "metadata": {}, "output_type": "display_data", "jetTransient": { "display_id": null } }, { "name": "stdout", "output_type": "stream", "text": [ "Number of roleset cxns:\n" ] }, { "data": { "text/plain": [ "7885" ] }, "metadata": {}, "output_type": "display_data", "jetTransient": { "display_id": null } } ], "execution_count": 6 }, { "metadata": { "ExecuteTime": { "end_time": "2026-03-17T11:01:38.172055Z", "start_time": "2026-03-17T11:01:38.096802Z" } }, "cell_type": "code", "source": [ "print('Number of nodes in the grammar network:')\n", "display(len(propbank_agent.grammar.categorial_network['nodes']))\n", "print('Number of links in the grammar network:')\n", "len(propbank_agent.grammar.categorial_network['edges'])\n" ], "id": "6aaa091069209b40", "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of nodes in the grammar network:\n" ] }, { "data": { "text/plain": [ "36014" ] }, "metadata": {}, "output_type": "display_data", "jetTransient": { "display_id": null } }, { "name": "stdout", "output_type": "stream", "text": [ "Number of links in the grammar network:\n" ] }, { "data": { "text/plain": [ "720844" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "execution_count": 7 }, { "metadata": {}, "cell_type": "markdown", "source": " When it comes to their frequency of occurrence, the constructions in the grammar network follow a Zipfian distribution, i.e. the same distribution as the one observed for the lexical items of a language. This means that the frequency of occurrence of a construction is approximately inversely proportional to the rank of the construction in a table in which all constructions are sorted by decreasing frequency. Interestingly, this observation also holds for each group of constructions in isolation, including the group of argument structure constructions, which are not tied to specific lexical items or other substantive material. You can run the following cell to inspect the Zipfian distribution of the constructions in the grammar network.", "id": "28b4e525817451b5" }, { "metadata": { "ExecuteTime": { "end_time": "2026-03-17T11:01:58.836693Z", "start_time": "2026-03-17T11:01:58.519532Z" } }, "cell_type": "code", "source": [ "import matplotlib.pyplot as plt\n", "\n", "argst_cxns.sort(key=lambda cxn: cxn.attributes['score'], reverse=True)\n", "fe_cxns.sort(key=lambda cxn: cxn.attributes['score'], reverse=True)\n", "roleset_cxns.sort(key=lambda cxn: cxn.attributes['score'], reverse=True)\n", "\n", "argst_freqs = [cxn.attributes['score'] for cxn in argst_cxns]\n", "fe_freqs = [cxn.attributes['score'] for cxn in fe_cxns]\n", "roleset_freqs = [cxn.attributes['score'] for cxn in roleset_cxns]\n", "# plot:\n", "fig, ax = plt.subplots(layout='constrained',figsize=(4,4))\n", "ax.loglog(argst_freqs, 'xkcd:blue', label='Argument-structure cxns')\n", "ax.loglog(fe_freqs, 'xkcd:sky blue', label='Frame-evoking cxns')\n", "ax.loglog(roleset_freqs, 'xkcd:grass green', label='Roleset cxns')\n", "fig.legend(loc='outside upper right')\n", "plt.show()" ], "id": "618cc5f1fd2efbb", "outputs": [ { "data": { "text/plain": [ "
" ], "image/png": "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" }, "metadata": {}, "output_type": "display_data", "jetTransient": { "display_id": null } } ], "execution_count": 8 }, { "metadata": {}, "cell_type": "markdown", "source": "## Grammar network analysis", "id": "f55b1ffca37c4c8f" }, { "metadata": {}, "cell_type": "markdown", "source": "The constructions of the grammar network are interconnected through categorial links, of which the weights indicate how often each combination of constructions has been observed in the training corpus. The network thereby holds a trove of empirical information about the frequency of particular syntactico-semantic usage patterns. Let us consider for instance the ditransitive double object construction. We can straightforwardly query the grammar network for those rolesets that are most typically associated with this construction:\n", "id": "d7cb422774ae723a" }, { "metadata": { "ExecuteTime": { "end_time": "2026-03-17T11:02:01.653659Z", "start_time": "2026-03-17T11:02:01.431184Z" } }, "cell_type": "code", "source": [ "# The ditransitive construction maps the ARG0 role to an NP, the V role to a Verb,\n", "# the ARG2 role to an NP and the ARG1 role to another NP.\n", "schema = [(':arg0', 'np'),\n", " ('v', 'v'),\n", " (':arg2', 'np'),\n", " (':arg1', 'np'),]\n", "# Now we retrieve all rolesets that were observed to fill the V slot of this schema, along with their frequency:\n", "propbank_agent.retrieve_rolesets_for_schema(schema)" ], "id": "d8e9fa5bc5a0c113", "outputs": [ { "data": { "text/plain": [ "{'give.01': 650.0,\n", " 'tell.01': 128.0,\n", " 'show.01': 62.0,\n", " 'send.01': 51.0,\n", " 'ask.01': 32.0,\n", " 'pay.01': 28.0,\n", " 'bring.01': 27.0,\n", " 'grant.01': 22.0,\n", " 'owe.01': 15.0,\n", " 'teach.01': 13.0,\n", " 'provide.01': 11.0,\n", " 'wish.01': 10.0,\n", " 'sell.01': 9.0,\n", " 'charge.01': 9.0,\n", " 'do.02': 8.0,\n", " 'feed.01': 7.0,\n", " 'lend.01': 6.0,\n", " 'write.01': 6.0,\n", " 'hand.01': 5.0,\n", " 'deny.01': 5.0,\n", " 'save.01': 4.0,\n", " 'award.01': 3.0,\n", " 'leave.12': 3.0,\n", " 'find.01': 3.0,\n", " 'take.10': 2.0,\n", " 'email.01': 2.0,\n", " 'fax.01': 2.0,\n", " 'deliver.01': 2.0,\n", " 'extend.02': 2.0,\n", " 'allow.02': 2.0,\n", " 'earn.01': 2.0,\n", " 'guarantee.01': 2.0,\n", " 'mail.01': 2.0,\n", " 'leave.02': 2.0,\n", " 'fine.01': 2.0,\n", " 'cc.01': 1.0,\n", " 'will.01': 1.0,\n", " 'deal.02': 1.0,\n", " 'serve.02': 1.0,\n", " 'name.01': 1.0,\n", " 'win.01': 1.0,\n", " 'sing.01': 1.0,\n", " 'call.01': 1.0,\n", " 'assign.01': 1.0}" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "execution_count": 9 }, { "metadata": {}, "cell_type": "markdown", "source": "While tell.01 (*pass along information*) integrates frequently with the double object construction, the tell.02 roleset (*distinguish, determine*) never does. The network reveals that this roleset is instead strongly associated with constructions that syntactically express its ARG1 role by means of a subclause (\"*couldn't tell whether*...\", \"*can tell that ...*\").", "id": "9134c1540a75b031" }, { "metadata": { "ExecuteTime": { "end_time": "2026-03-17T11:02:05.150674Z", "start_time": "2026-03-17T11:02:04.730210Z" } }, "cell_type": "code", "source": "propbank_agent.retrieve_cxn_schemata_for_roleset('tell.01')", "id": "f169c4fb2ac6dafd", "outputs": [ { "data": { "text/plain": [ "{'arg0(np)+v(v)+arg2(np)+arg1(sbar)': 323.0,\n", " 'arg0(np)+v(v)+arg2(np)+arg1(s vp)': 168.0,\n", " 'arg0(np)+v(v)+arg2(np)+arg1(sbar s)': 151.0,\n", " 'arg0(np)+v(v)+arg2(np)+arg1(np)': 128.0,\n", " 'arg0(np)+v(v)+arg2(np)': 98.0,\n", " 'arg0(np)+v(v)+arg2(np)+arg1(pp)': 87.0,\n", " 'arg0(np)+v(v)+arg1(np)': 69.0,\n", " 'arg1(wp)+arg0(np)+v(v)+arg2(np)': 56.0,\n", " 'arg0(np)+v(v)+arg2(np)+arg1(s)': 44.0,\n", " 'v(v)+arg2(np)+arg1(sbar)': 31.0,\n", " 'v(v)+arg2(np)+arg1(np)': 24.0,\n", " 'arg0(np)+v(v)+arg1(pp)': 21.0,\n", " 'arg0(np)+v(v)+arg2(np)+arg1(dt)': 20.0,\n", " 'v(v)+arg1(np)': 18.0,\n", " 'arg1(np)+arg0(np)+v(v)+arg2(np)': 18.0,\n", " 'v(v)+arg2(np)+arg1(pp)': 17.0,\n", " 'arg2(np)+v(v)+arg1(s vp)': 17.0,\n", " 'arg2(np)+v(v)+arg1(sbar s)': 16.0,\n", " 'arg2(np)+v(v)+arg1(sbar)': 16.0,\n", " 'arg1(np)+v(v)': 16.0,\n", " 'v(v)+arg2(np)+arg1(s vp)': 15.0,\n", " 'v(v)+arg2(np)+arg1(sbar s)': 13.0,\n", " 'v(v)+arg2(np)+arg1(s)': 13.0,\n", " 'v(v)+arg2(np)': 12.0,\n", " 'arg0(np)+v(v)+arg1(np)+arg2(pp)': 12.0,\n", " 'arg1(np)+r-arg1(wdt)+arg0(np)+v(v)+arg2(np)': 12.0,\n", " 'arg0(np)+v(v)+arg1(sbar)': 11.0,\n", " 'arg0(np)+v(v)': 11.0,\n", " 'arg1(np)+v(v)+arg2(np)': 9.0,\n", " 'arg1(s)+arg0(np)+v(v)+arg2(np)': 9.0,\n", " 'arg1(np)+v(v)+arg2(pp)': 8.0,\n", " 'arg1(np)+arg0(np)+v(v)+arg2(np)+c-arg1(in)': 7.0,\n", " 'arg0(dt)+r-arg0(wp)+v(v)+arg1(np)': 6.0,\n", " 'arg0(np)+v(v)+arg2(np)+arg1(v)': 5.0,\n", " 'arg2(np)+v(v)+arg1(np)': 5.0,\n", " 'arg2(np)+v(v)': 5.0,\n", " 'arg1(np)+arg0(np)+v(v)': 5.0,\n", " 'arg1(np)+v(v)+arg0(pp)': 5.0,\n", " 'arg0(np)+v(v)+arg1(nns)': 4.0,\n", " 'arg1(dt)+arg0(np)+v(v)+arg2(np)': 4.0,\n", " 'arg1(wp)+arg0(np)+v(v)+arg2(np)+c-arg1(pp)': 4.0,\n", " 'arg1(nn)+arg0(np)+v(v)+arg2(np)': 4.0,\n", " 'arg1(wp)+arg0(np)+v(v)': 4.0,\n", " 'arg2(np)+v(v)+arg0(pp)+arg1(sbar)': 4.0,\n", " 'arg0(np)+v(v)+arg2(prp)+arg1(dt)': 4.0,\n", " 'arg1(wdt)+arg0(np)+v(v)+arg2(np)': 4.0,\n", " 'arg0(np)+r-arg0(wp)+v(v)+arg2(np)+arg1(pp)': 4.0,\n", " 'arg0(np)+r-arg0(wp)+v(v)+arg1(np)': 4.0,\n", " 'arg0(dt)+v(v)+arg2(np)+arg1(np)': 3.0,\n", " 'arg0(nn)+r-arg0(wp)+v(v)+arg2(np)+arg1(np)': 3.0,\n", " 'arg0(prp)+v(v)+arg2(np)+arg1(sbar s)': 3.0,\n", " 'arg0(np)+v(v)+arg2(np)+arg1(wp)': 3.0,\n", " 'arg2(np)+v(v)+arg1(s)': 3.0,\n", " 'arg1(np)+r-arg1(wdt)+arg0(np)+v(v)+arg2(pp)': 3.0,\n", " 'arg0(prp)+v(v)+arg2(np)+arg1(sbar)': 3.0,\n", " 'arg0(np)+v(v)+arg2(np)+arg1(jj)': 3.0,\n", " 'v(v)+arg1(dt)': 3.0,\n", " 'arg0(np)+v(v)+arg2(np)+arg1(in)': 3.0,\n", " 'arg1(dt)+v(v)': 3.0,\n", " 'arg2(np)+arg0(np)+v(v)': 3.0,\n", " 'arg0(np)+v(v)+arg2(np)+arg1(rb)': 3.0,\n", " 'arg0(np)+v(v)+arg2(prp)+arg1(np)': 3.0,\n", " 'arg0(np)+r-arg0(wp)+v(v)+arg2(np)+arg1(sbar)': 3.0,\n", " 'arg1(np)+r-arg1(wdt)+arg0(np)+v(v)+arg2(np)+c-arg1(in)': 3.0,\n", " 'arg0(np)+r-arg0(wp)+v(v)+arg2(np)+arg1(sbar s)': 2.0,\n", " 'arg1(np)+r-arg1(in)+arg0(np)+v(v)': 2.0,\n", " 'v(v)+arg1(sbar)': 2.0,\n", " 'arg0(np)+v(v)+arg2(np)+arg1(wrb)': 2.0,\n", " 'arg0(wp)+v(v)+arg1(np)': 2.0,\n", " 'arg1(np)+r-arg1(wdt)+v(v)': 2.0,\n", " 'arg0(nn)+r-arg0(wp)+v(v)+arg2(np)+arg1(pp)': 2.0,\n", " 'v(v)+arg2(np)+arg1(sq)': 2.0,\n", " 'arg0(np)+r-arg0(wdt)+v(v)+arg2(np)+arg1(pp)': 2.0,\n", " 'arg1(wp)+arg2(np)+v(v)': 2.0,\n", " 'arg1(np)+arg2(np)+v(v)': 2.0,\n", " 'arg1(np)+r-arg1(wdt)+v(v)+arg2(pp)': 2.0,\n", " 'v(v)+arg1(np)+arg2(pp)': 2.0,\n", " 'arg1(s)+arg2(np)+v(v)': 2.0,\n", " 'v(nn)+arg1(dt)': 2.0,\n", " 'arg1(whnp)+v(v)+arg2(np)': 2.0,\n", " 'arg1(nn)+r-arg1(wdt)+arg0(np)+v(v)+arg2(np)': 2.0,\n", " 'arg0(dt)+r-arg0(wp)+v(v)+arg2(np)+arg1(sbar)': 2.0,\n", " 'arg0(np)+v(v)+arg1(dt)': 2.0,\n", " 'arg2(np)+r-arg2(wdt)+v(v)+arg1(pp)': 1.0,\n", " 'arg0(nnp)+v(v)+arg2(np)+arg1(sbar)': 1.0,\n", " 'arg1(jj)+v(v)+arg2(np)': 1.0,\n", " 'arg0(np)+v(v)+arg1(pp)+arg2(pp)': 1.0,\n", " 'arg0(dt)+r-arg0(wp)+v(v)+arg2(np)+arg1(np)': 1.0,\n", " 'arg1(sbar)+v(v)': 1.0,\n", " 'arg1(np)+v(v)+arg2(np)+c-arg1(in)': 1.0,\n", " 'arg0(dt)+v(v)+arg1(np)': 1.0,\n", " 'arg0(nn)+v(v)+arg2(np)+arg1(pp)': 1.0,\n", " 'arg0(prp)+v(v)+arg1(np)': 1.0,\n", " 'arg0(np)+v(v)+arg1(np)+c-arg1(pp)': 1.0,\n", " 'arg1(np)+v(np)': 1.0,\n", " 'arg0(nnp)+r-arg0(wp)+v(v)+arg1(np)': 1.0,\n", " 'arg0(np)+v(v)+arg2(np)+arg1(to)': 1.0,\n", " 'arg1(whnp)+arg0(np)+v(v)+arg2(np)': 1.0,\n", " 'arg0(wp)+v(v)+arg2(np)': 1.0,\n", " 'arg1(wp)+arg0(np)+v(v)+arg2(np)+c-arg1(np)': 1.0,\n", " 'arg0(np)+v(v)+arg1(np)+arg2(sbar)': 1.0,\n", " 'v(v)+arg1(sbar s)': 1.0,\n", " 'v(v)+arg2(fw)': 1.0,\n", " 'v(v)+arg1(s vp)+arg0(pp)': 1.0,\n", " 'arg0(np)+r-arg0(wp)+v(v)+arg1(nns)': 1.0,\n", " 'arg0(dt)+r-arg0(wp)+v(v)+arg1(pp)': 1.0,\n", " 'arg0(prp)+v(v)+arg2(np)': 1.0,\n", " 'arg0(np)+v(v)+arg2(np)+arg1(vp)': 1.0,\n", " 'arg0(nns)+r-arg0(wdt)+v(v)+arg1(np)': 1.0,\n", " 'v(v)+arg2(np)+arg1(dt)': 1.0,\n", " 'arg0(np)+v(v)+c-arg0(np)': 1.0,\n", " 'v(v)+arg1(pp)': 1.0,\n", " 'arg2(dt)+v(v)+arg1(np)': 1.0,\n", " 'v(v)+arg2(np)+arg1(sbarq)': 1.0,\n", " 'arg1(wp)+v(v)+arg2(np)+c-arg1(pp)': 1.0,\n", " 'arg1(wp)+arg0(dt)+v(v)+arg2(np)': 1.0,\n", " 'arg1(nns)+r-arg1(wdt)+arg0(np)+v(v)': 1.0,\n", " 'arg2(dt)+arg0(np)+v(v)': 1.0,\n", " 'arg0(np)+v(v)+arg2(np)+arg1(nn)': 1.0,\n", " 'arg0(np)+v(v)+arg2(np)+arg1(nns)': 1.0,\n", " 'arg0(prp)+v(v)+arg2(np)+arg1(pp)': 1.0,\n", " 'arg1(dt)+r-arg1(wdt)+arg0(np)+v(v)+arg2(np)': 1.0,\n", " 'arg0(np)+v(v)+arg2(pp)+arg1(s)': 1.0,\n", " 'arg0(np)+v(v)+arg1(np)+arg2(np)': 1.0,\n", " 'arg0(nns)+r-arg0(wp)+v(v)+arg1(np)': 1.0,\n", " 'arg1(sbar)+arg0(np)+v(v)+arg2(np)': 1.0,\n", " 'v(v)+arg2(np)+arg1(in)': 1.0,\n", " 'arg1-dsp(np)+arg0(nnp)+v(v)+c-arg1-dsp(vp)': 1.0,\n", " 'v(v)+arg1(dt)+arg2(pp)+c-arg1(s)': 1.0,\n", " 'arg0(wdt)+v(v)+arg2(np)+arg1(pp)': 1.0,\n", " 'arg1(np)+r-arg1(wdt)+arg2(np)+v(v)': 1.0,\n", " 'arg0(np)+r-arg0(wp)+v(v)+arg2(np)+arg1(dt)': 1.0,\n", " 'arg0(np)+arg1(nn)+v(v)+arg2(np)': 1.0,\n", " 'arg1(dt)+arg0(np)+v(v)': 1.0,\n", " 'arg0(wp)+v(v)+arg2(np)+arg1(sbar)': 1.0,\n", " 'arg0(np)+v(v)+arg2(np)+arg1(sbarq)': 1.0,\n", " 'arg2(np)+v(v)+arg0(pp)': 1.0,\n", " 'arg1(np)+r-arg1(wdt)+arg0(np)+v(v)': 1.0,\n", " 'arg1(nns)+arg2(np)+v(v)': 1.0,\n", " 'arg2(np)+c-arg2(np)+v(v)+arg1(sbar)': 1.0,\n", " 'arg1(np)+r-arg1(whpp)+arg0(np)+v(v)': 1.0,\n", " 'v(v)+arg2(np)+arg1(:)': 1.0,\n", " 'arg0(wp)+v(v)+arg2(np)+arg1(dt)': 1.0,\n", " 'arg2(pp)+arg0(np)+v(v)+arg1(np)': 1.0,\n", " 'arg1(np)+arg0(np)+v(v)+c-arg1(pp)': 1.0,\n", " 'arg0(np)+r-arg0(wdt)+v(v)+arg1(np)': 1.0,\n", " 'arg0(nn)+v(v)+arg2(np)+arg1(dt)': 1.0,\n", " 'v(v)+arg1(dt)+arg2(pp)': 1.0,\n", " 'arg2(np)+v(v)+arg0(pp)+arg1(s vp)': 1.0,\n", " 'arg1(whnp)+arg0(np)+v(v)+arg2(np)+c-arg1(pp)': 1.0}" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "execution_count": 10 }, { "metadata": { "ExecuteTime": { "end_time": "2026-03-17T11:02:09.999626Z", "start_time": "2026-03-17T11:02:09.950491Z" } }, "cell_type": "code", "source": "propbank_agent.retrieve_cxn_schemata_for_roleset('tell.02')", "id": "309ef4bb1de89b38", "outputs": [ { "data": { "text/plain": [ "{'arg0(np)+v(v)+arg1(sbar)': 13.0,\n", " 'v(v)+arg1(sbar)': 11.0,\n", " 'arg0(np)+v(v)': 5.0,\n", " 'arg0(np)+v(v)+arg1(np)': 5.0,\n", " 'arg0(np)+v(v)+arg1(np)+arg2(pp)': 2.0,\n", " 'arg0(np)+v(v)+arg1(sbar s)': 1.0,\n", " 'arg1(wp)+arg0(np)+v(v)+arg2(pp)': 1.0,\n", " 'arg1(wp)+arg0(dt)+v(v)+arg2(np)': 1.0,\n", " 'arg1(np)+v(v)': 1.0,\n", " 'arg0(np)+v(v)+arg2(np)': 1.0,\n", " 'v(jj)+arg0(nn)': 1.0,\n", " 'arg0(np)+v(v)+arg2(pp)+arg1(sbar)': 1.0,\n", " 'v(v)+arg2(pp)': 1.0,\n", " 'arg1(sbar)+arg0(np)+v(v)+arg2(pp)': 1.0}" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "execution_count": 11 }, { "metadata": {}, "cell_type": "markdown", "source": "A different question to which the grammar network can provide a straightforward answer concerns the similarity of constructions in terms of their frequency of combination with other constructions. For example, the frame-evoking constructions in the network that are closest to the `tell(verb)-cxn` in terms of their co-occurrence with the argument structure constructions of the grammar are the `ask(verb)-cxn`, the `remind(verb)-cxn` and the `teach(verb)-cxn`, while the `swim(verb)-cxn` and the `consist(verb)-cxn` are among the most distant ones. The similarity of constructions is computed in terms of their weighted cosine similarity, where two nodes with the exact same weighted links to all other nodes would be perfectly similar.", "id": "6a1f4dd3019814dd" }, { "metadata": { "ExecuteTime": { "end_time": "2026-03-17T11:02:27.218716Z", "start_time": "2026-03-17T11:02:11.795483Z" } }, "cell_type": "code", "source": "propbank_agent.get_closest_categories('tell(v)', link_type=\"lex-gram\")", "id": "6c223d51cb5dc422", "outputs": [ { "data": { "text/plain": [ "{'tell(v)': 1.0,\n", " 'ask(v)': 0.6255121,\n", " 'remind(v)': 0.38473272,\n", " 'teach(v)': 0.37172282,\n", " 'enable(v)': 0.3286541,\n", " 'require(v)': 0.25875446,\n", " 'permit(v)': 0.25699338,\n", " 'give(v)': 0.24487078,\n", " 'warn(v)': 0.22339688,\n", " 'trust(v)': 0.22114395,\n", " 'show(v)': 0.2209076,\n", " 'bid(v)': 0.1947823,\n", " 'serve(v)': 0.19148244,\n", " 'pay(v)': 0.19026785,\n", " 'question(v)': 0.1826872,\n", " 'feed(v)': 0.18126795,\n", " 'help(v)': 0.17693255,\n", " 'dispute(v)': 0.17144959,\n", " 'forgive(v)': 0.16765452,\n", " 'provide(v)': 0.16644527,\n", " 'write(v)': 0.16620483,\n", " 'win(v)': 0.16525294,\n", " 'guarantee(v)': 0.16460607,\n", " 'grant(v)': 0.15787788,\n", " 'send(v)': 0.1553325,\n", " 'discount(v)': 0.15291488,\n", " 'address(v)': 0.15039072,\n", " 'request(v)': 0.15023443,\n", " 'slap(v)': 0.14972283,\n", " 'owe(v)': 0.14402353,\n", " 'hear(v)': 0.14325829,\n", " 'caution(v)': 0.14183729,\n", " 'curse(v)': 0.1408344,\n", " 'play(v)': 0.1401356,\n", " 'militarize(v)': 0.14002373,\n", " 'present(v)': 0.13855645,\n", " 'declare(v)': 0.1381155,\n", " 'read(v)': 0.13752789,\n", " 'lobby(v)': 0.13741035,\n", " 'see(v)': 0.1373447,\n", " 'sell(v)': 0.13645628,\n", " 'blast(v)': 0.13592457,\n", " 'remember(v)': 0.13475849,\n", " 'provoke(v)': 0.13457223,\n", " 'lose(v)': 0.13411066,\n", " 'beat(v)': 0.13400452,\n", " 'obey(v)': 0.13357936,\n", " 'understand(v)': 0.13328536,\n", " 'follow(v)': 0.13324358,\n", " 'forbid(v)': 0.13317077,\n", " 'sign(v)': 0.13308543,\n", " 'leave(v)': 0.13301257,\n", " 'join(v)': 0.13290775,\n", " 'deny(v)': 0.13265772,\n", " 'find(v)': 0.13251019,\n", " 'take(v)': 0.13184984,\n", " 'worship(v)': 0.13166143,\n", " 'receive(v)': 0.13113153,\n", " 'trim(v)': 0.13101916,\n", " 'blame(v)': 0.13084582,\n", " 'enter(v)': 0.13050969,\n", " 'introduce(v)': 0.1301215,\n", " 'meet(v)': 0.12974042,\n", " 'respect(v)': 0.12972683,\n", " 'rinse(v)': 0.12952194,\n", " 'do(v)': 0.12941861,\n", " 'recognize(v)': 0.12841635,\n", " 'accept(v)': 0.12779175,\n", " 'demand(v)': 0.12775509,\n", " 'buy(v)': 0.12762971,\n", " 'produce(v)': 0.12735734,\n", " 'share(v)': 0.12711399,\n", " 'recommend(v)': 0.12690234,\n", " 'reach(v)': 0.12688449,\n", " 'harm(v)': 0.12684177,\n", " 'ignore(v)': 0.12661307,\n", " 'fax(v)': 0.12621567,\n", " 'visit(v)': 0.12614185,\n", " 'watch(v)': 0.12592833,\n", " 'raise(v)': 0.12573499,\n", " 'praise(v)': 0.12566065,\n", " 'acquire(v)': 0.1256542,\n", " 'attack(v)': 0.12553007,\n", " 'maintain(v)': 0.12550837,\n", " 'enjoy(v)': 0.12481521,\n", " 'get(v)': 0.12475878,\n", " 'bring(v)': 0.12445205,\n", " 'examine(v)': 0.124423206,\n", " 'adopt(v)': 0.124318846,\n", " 'learn(v)': 0.124175765,\n", " 'support(v)': 0.123789914,\n", " 'create(v)': 0.1237012,\n", " 'wear(v)': 0.1236859,\n", " 'draw(v)': 0.123618305,\n", " 'save(v)': 0.12331879,\n", " 'touch(v)': 0.123285175,\n", " 'hold(v)': 0.12292933,\n", " 'wash(v)': 0.12291669,\n", " 'form(v)': 0.1228429,\n", " 'call(v)': 0.12277459,\n", " 'abandon(v)': 0.12269186,\n", " 'conquer(v)': 0.12225867,\n", " 'break(v)': 0.12207036,\n", " 'achieve(v)': 0.12200624,\n", " 'express(v)': 0.121937,\n", " 'grace(v)': 0.12128936,\n", " 'photocopy(v)': 0.12128936,\n", " 'hamstring(v)': 0.12128936,\n", " 'propagandize(v)': 0.12128936,\n", " 'dent(v)': 0.12128936,\n", " 'ram(v)': 0.12128936,\n", " 'punish(v)': 0.12117506,\n", " 'catch(v)': 0.121171884,\n", " 'sing(v)': 0.12095919,\n", " 'commit(v)': 0.12080016,\n", " 'launch(v)': 0.12079612,\n", " 'face(v)': 0.12077648,\n", " 'embrace(v)': 0.120770455,\n", " 'email(v)': 0.120759875,\n", " 'crush(v)': 0.120691695,\n", " 'fool(v)': 0.1204755,\n", " 'fight(v)': 0.12028226,\n", " 'carry(v)': 0.12027377,\n", " 'negotiate(v)': 0.12026602,\n", " 'ease(v)': 0.120245144,\n", " 'report(v)': 0.12011913,\n", " 'retain(v)': 0.12007913,\n", " 'drink(v)': 0.11996957,\n", " 'judge(v)': 0.11990381,\n", " 'kill(v)': 0.119862914,\n", " 'earn(v)': 0.11969809,\n", " 'arrange(v)': 0.1196521,\n", " 'exceed(v)': 0.11959341,\n", " 'cut(v)': 0.119565286,\n", " 'answer(v)': 0.11947831,\n", " 'test(v)': 0.11943953,\n", " 'fire(v)': 0.11902211,\n", " 'ink(v)': 0.11902016,\n", " 'demilitarize(v)': 0.11902016,\n", " 'forget(v)': 0.11900471,\n", " 'overtake(v)': 0.11897896,\n", " 'blockade(v)': 0.11897896,\n", " 'miss(v)': 0.11888397,\n", " 'approve(v)': 0.11881238,\n", " 'disregard(v)': 0.11861621,\n", " 'gain(v)': 0.118614175,\n", " 'appreciate(v)': 0.11845133,\n", " 'offer(v)': 0.118398845,\n", " 'establish(v)': 0.118243404,\n", " 'dwarf(v)': 0.11819621,\n", " 'kiss(v)': 0.118117206,\n", " 'encounter(v)': 0.11800321,\n", " 'discuss(v)': 0.11795633,\n", " 'capture(v)': 0.117900446,\n", " 'experience(v)': 0.117856644,\n", " 'authorize(v)': 0.11770744,\n", " 'disrupt(v)': 0.11763384,\n", " 'perform(v)': 0.1174231,\n", " 'jeopardize(v)': 0.117413454,\n", " 'hurt(v)': 0.11720627,\n", " 'voice(v)': 0.11698146,\n", " 'lend(v)': 0.116832286,\n", " 'hit(v)': 0.116638504,\n", " 'arrest(v)': 0.11662185,\n", " 'admire(v)': 0.116519734,\n", " 'skip(v)': 0.116314136,\n", " 'formulate(v)': 0.11588326,\n", " 'exhaust(v)': 0.115719944,\n", " 'dismiss(v)': 0.115553394,\n", " 'identify(v)': 0.11547131,\n", " 'sue(v)': 0.115242765,\n", " 'eat(v)': 0.11516738,\n", " 'baptize(v)': 0.115158715,\n", " 'notice(v)': 0.11511737,\n", " 'handle(v)': 0.11509491,\n", " 'challenge(v)': 0.11504606,\n", " 'announce(v)': 0.11503767,\n", " 'defend(v)': 0.1150032,\n", " 'investigate(v)': 0.114916705,\n", " 'forecast(v)': 0.11485958,\n", " 'condemn(v)': 0.11478644,\n", " 'grab(v)': 0.11468903,\n", " 'destroy(v)': 0.11465007,\n", " 'nurse(v)': 0.114644416,\n", " 'exercise(v)': 0.11461156,\n", " 'reject(v)': 0.11443595,\n", " 'oppose(v)': 0.11440322,\n", " 'outstrip(v)': 0.114139885,\n", " 'seize(v)': 0.11406061,\n", " 'change(v)': 0.11392137,\n", " 'alter(v)': 0.113821924,\n", " 'issue(v)': 0.11367013,\n", " 'interview(v)': 0.11361641,\n", " 'mobilize(v)': 0.113607966,\n", " 'contradict(v)': 0.11359411,\n", " 'regain(v)': 0.11356676,\n", " 'criticize(v)': 0.113502875,\n", " 'attract(v)': 0.11341938,\n", " 'block(v)': 0.113331586,\n", " 'love(v)': 0.113249026,\n", " 'explore(v)': 0.11322978,\n", " 'suffer(v)': 0.112960555,\n", " 'generate(v)': 0.112933956,\n", " 'market(v)': 0.11284555,\n", " 'lower(v)': 0.11274787,\n", " 'reverse(v)': 0.1127204,\n", " 'evacuate(v)': 0.11271909,\n", " 'build(v)': 0.112654515,\n", " 'reap(v)': 0.11245757,\n", " 'pass(v)': 0.11242736,\n", " 'outpace(v)': 0.11240831,\n", " 'surpass(v)': 0.112212755,\n", " 'betray(v)': 0.112077296,\n", " 'dump(v)': 0.112051435,\n", " 'confess(v)': 0.11201897,\n", " 'insult(v)': 0.11198807,\n", " 'stone(v)': 0.111879654,\n", " 'stage(v)': 0.11170269,\n", " 'trigger(v)': 0.11169759,\n", " 'organize(v)': 0.1116803,\n", " 'terminate(v)': 0.11165232,\n", " 'release(v)': 0.11155165,\n", " 'deliver(v)': 0.11155092,\n", " 'bless(v)': 0.11150154,\n", " 'attend(v)': 0.11149091,\n", " 'purchase(v)': 0.111472294,\n", " 'check(v)': 0.111409344,\n", " 'reiterate(v)': 0.11131384,\n", " 'signal(v)': 0.11130763,\n", " 'celebrate(v)': 0.111232475,\n", " 'debate(v)': 0.11121669,\n", " 'spawn(v)': 0.11120651,\n", " 'squander(v)': 0.11115875,\n", " 'resist(v)': 0.11110452,\n", " 'invade(v)': 0.11095561,\n", " 'tighten(v)': 0.11091532,\n", " 'have(v)': 0.11089933,\n", " 'consume(v)': 0.11082247,\n", " 'anticipate(v)': 0.11071335,\n", " 'supply(v)': 0.110660434,\n", " 'lift(v)': 0.11041043,\n", " 'heal(v)': 0.110269606,\n", " 'dangle(v)': 0.11015054,\n", " 'eliminate(v)': 0.11010447,\n", " 'hate(v)': 0.110098645,\n", " 'repay(v)': 0.10991934,\n", " 'conduct(v)': 0.10991062,\n", " 'obtain(v)': 0.10989465,\n", " 'assemble(v)': 0.109781996,\n", " 'post(v)': 0.109632224,\n", " 'occupy(v)': 0.10951081,\n", " 'undermine(v)': 0.109407954,\n", " 'outweigh(v)': 0.109365754,\n", " 'air(v)': 0.109365635,\n", " 'uphold(v)': 0.10936201,\n", " 'clear(v)': 0.10917757,\n", " 'train(v)': 0.10913862,\n", " 'resume(v)': 0.10908456,\n", " 'treasure(v)': 0.10891289,\n", " 'tolerate(v)': 0.10875869,\n", " 'shun(v)': 0.108713255,\n", " 'rent(v)': 0.1086359,\n", " 'tap(v)': 0.1085708,\n", " 'dominate(v)': 0.10851838,\n", " 'swing(v)': 0.10851838,\n", " 'review(v)': 0.10847208,\n", " 'hug(v)': 0.1084619,\n", " 'suspend(v)': 0.10844558,\n", " 'pick(v)': 0.1083817,\n", " 'witness(v)': 0.108328156,\n", " 'mention(v)': 0.108281136,\n", " 'demonstrate(v)': 0.108214595,\n", " 'choose(v)': 0.108171426,\n", " 'obscure(v)': 0.1080878,\n", " 'reinvigorate(v)': 0.10802038,\n", " 'keep(v)': 0.1079195,\n", " 'escape(v)': 0.10785155,\n", " 'rub(v)': 0.107825354,\n", " 'embarrass(v)': 0.10779031,\n", " 'unveil(v)': 0.10771204,\n", " 'swallow(v)': 0.107690886,\n", " 'fetch(v)': 0.10767525,\n", " 'toss(v)': 0.10735152,\n", " 'observe(v)': 0.10731941,\n", " 'violate(v)': 0.107303955,\n", " 'brave(v)': 0.10717108,\n", " 'ruin(v)': 0.10703386,\n", " 'control(v)': 0.106917225,\n", " 'applaud(v)': 0.10676809,\n", " 'dislike(v)': 0.10676809,\n", " 'seek(v)': 0.106708944,\n", " 'trail(v)': 0.10662195,\n", " 'assess(v)': 0.10647424,\n", " 'describe(v)': 0.1064375,\n", " 'cancel(v)': 0.106339574,\n", " 'use(v)': 0.106049694,\n", " 'constitute(v)': 0.105993785,\n", " 'clinch(v)': 0.105978705,\n", " 'benefit(v)': 0.10586132,\n", " 'mark(v)': 0.10567023,\n", " 'defeat(v)': 0.105657876,\n", " 'repeat(v)': 0.10552439,\n", " 'recall(v)': 0.10542381,\n", " 'discover(v)': 0.1053045,\n", " 'fulfill(v)': 0.105231896,\n", " 'collect(v)': 0.105115295,\n", " 'delay(v)': 0.1050282,\n", " 'leak(v)': 0.10501779,\n", " 'analyze(v)': 0.10501385,\n", " 'pursue(v)': 0.10488942,\n", " 'detect(v)': 0.10488935,\n", " 'cement(v)': 0.10488935,\n", " 'hire(v)': 0.10484321,\n", " 'undertake(v)': 0.10476205,\n", " 'represent(v)': 0.10451811,\n", " 'startle(v)': 0.1043251,\n", " 'deploy(v)': 0.10423987,\n", " 'develop(v)': 0.104113884,\n", " 'run(v)': 0.10407388,\n", " 'track(v)': 0.10406135,\n", " 'spark(v)': 0.10401418,\n", " 'waive(v)': 0.10396231,\n", " 'comfort(v)': 0.10370506,\n", " 'open(v)': 0.103690326,\n", " 'employ(v)': 0.103618086,\n", " 'lag(v)': 0.10358891,\n", " 'discipline(v)': 0.103580266,\n", " 'affect(v)': 0.103383094,\n", " 'study(v)': 0.103370115,\n", " 'flee(v)': 0.10320357,\n", " 'greet(v)': 0.10309046,\n", " 'best(v)': 0.10307448,\n", " 'confiscate(v)': 0.10303024,\n", " 'light(v)': 0.10299687,\n", " 'crack(v)': 0.102904245,\n", " 'justify(v)': 0.10290169,\n", " 'charge(v)': 0.10277614,\n", " 'hide(v)': 0.10266754,\n", " 'regret(v)': 0.1024964,\n", " 'congratulate(v)': 0.10240552,\n", " 'intercept(v)': 0.10224706,\n", " 'cite(v)': 0.102227,\n", " 'complicate(v)': 0.10213496,\n", " 'tour(v)': 0.10210583,\n", " 'risk(v)': 0.10208539,\n", " 'drive(v)': 0.10206548,\n", " 'exaggerate(v)': 0.10206395,\n", " 'tease(v)': 0.10206395,\n", " 'submit(v)': 0.10186192,\n", " 'target(v)': 0.10183784,\n", " 'possess(v)': 0.10175833,\n", " 'welcome(v)': 0.10175774,\n", " 'cross(v)': 0.1015426,\n", " 'impose(v)': 0.10146494,\n", " 'diagnose(v)': 0.10140683,\n", " 'reward(v)': 0.10132812,\n", " 'prefer(v)': 0.101313465,\n", " 'predict(v)': 0.10124724,\n", " 'bite(v)': 0.100928895,\n", " 'shoot(v)': 0.10086819,\n", " 'annoy(v)': 0.10086819,\n", " 'ban(v)': 0.100775615,\n", " 'boost(v)': 0.100715235,\n", " 'wave(v)': 0.100555584,\n", " 'lack(v)': 0.100555,\n", " 'ride(v)': 0.10018418,\n", " 'shake(v)': 0.10012631,\n", " 'dismantle(v)': 0.09988906,\n", " 'secure(v)': 0.09988818,\n", " 'unload(v)': 0.09977674,\n", " 'determine(v)': 0.099701345,\n", " 'update(v)': 0.09963054,\n", " 'miscalculate(v)': 0.09962862,\n", " 'cast(v)': 0.09932812,\n", " 'despise(v)': 0.09923248,\n", " 'relieve(v)': 0.0992162,\n", " 'storm(v)': 0.09906327,\n", " 'hitch(v)': 0.09903234,\n", " 'monopolize(v)': 0.09903234,\n", " 'befriend(v)': 0.09903234,\n", " 'restructure(v)': 0.099032335,\n", " 'upset(v)': 0.09901172,\n", " 'succeed(v)': 0.09895107,\n", " 'carve(v)': 0.09884804,\n", " 'absorb(v)': 0.098702304,\n", " 'initiate(v)': 0.098652154,\n", " 'reopen(v)': 0.0986273,\n", " 'invent(v)': 0.09858164,\n", " 'cause(v)': 0.0984169,\n", " 'evaluate(v)': 0.09830324,\n", " 'jolt(v)': 0.098235145,\n", " 'advocate(v)': 0.09813229,\n", " 'dig(v)': 0.098016605,\n", " 'activate(v)': 0.098016605,\n", " 'spell(v)': 0.09790938,\n", " 'operate(v)': 0.09789381,\n", " 'shed(v)': 0.09778503,\n", " 'finish(v)': 0.09739929,\n", " 'cheer(v)': 0.09725847,\n", " 'abuse(v)': 0.09708898,\n", " 'breed(v)': 0.09703324,\n", " 'complete(v)': 0.09702037,\n", " 'burn(v)': 0.09680734,\n", " 'enforce(v)': 0.09679971,\n", " 'restrict(v)': 0.09663863,\n", " 'squirm(v)': 0.09653643,\n", " 'ratify(v)': 0.09646499,\n", " 'rattle(v)': 0.096307665,\n", " 'reshape(v)': 0.09626631,\n", " 'print(v)': 0.095917605,\n", " 'encourage(v)': 0.09578677,\n", " 'emphasize(v)': 0.095725134,\n", " 'depress(v)': 0.095711336,\n", " 'book(v)': 0.095705055,\n", " 'uproot(v)': 0.095496275,\n", " 'cherish(v)': 0.095496275,\n", " 'institute(v)': 0.095496275,\n", " 'blow(v)': 0.09547208,\n", " 'favor(v)': 0.095427476,\n", " 'overwhelm(v)': 0.09529878,\n", " 'precipitate(v)': 0.09526318,\n", " 'practice(v)': 0.09524932,\n", " 'select(v)': 0.09516064,\n", " 'invoke(v)': 0.09509008,\n", " 'hinder(v)': 0.09509008,\n", " 'nail(v)': 0.09505889,\n", " 'amplify(v)': 0.09499216,\n", " 'stimulate(v)': 0.09490639,\n", " 'tear_down(v)': 0.09474014,\n", " 'interpret(v)': 0.094726145,\n", " 'push(v)': 0.09472243,\n", " 'reduce(v)': 0.094707884,\n", " 'resolve(v)': 0.09469555,\n", " 'deprive(v)': 0.09467996,\n", " 'order(v)': 0.09465839,\n", " 'chortle(v)': 0.09451601,\n", " 'tenure(v)': 0.09451601,\n", " 'misread(v)': 0.09451601,\n", " 'laminate(v)': 0.09451601,\n", " 'tickle(v)': 0.09451601,\n", " 'blunt(v)': 0.09451601,\n", " 'impugn(v)': 0.09451601,\n", " 'fondle(v)': 0.09451601,\n", " 'hose(v)': 0.09451601,\n", " 'preview(v)': 0.09451601,\n", " 'massacre(v)': 0.09451601,\n", " 'ingest(v)': 0.09451601,\n", " 'rework(v)': 0.09451601,\n", " 'rehire(v)': 0.09451601,\n", " 'enrage(v)': 0.09451601,\n", " 'overrun(v)': 0.09451601,\n", " 'wet(v)': 0.09451601,\n", " 'chuck(v)': 0.09451601,\n", " 'overplay(v)': 0.09451601,\n", " 'hoe(v)': 0.09451601,\n", " 'hemorrhage(v)': 0.09451601,\n", " 'console(v)': 0.09451601,\n", " 'rebuke(v)': 0.09451601,\n", " 'buff(v)': 0.09451601,\n", " 'evict(v)': 0.09451601,\n", " 'squeegee(v)': 0.09451601,\n", " 'segregate(v)': 0.09451601,\n", " 'comb(v)': 0.09451601,\n", " 'repudiate(v)': 0.09451601,\n", " 'muddy(v)': 0.09451601,\n", " 'subcontract(v)': 0.09451601,\n", " 'beguile(v)': 0.09451601,\n", " 'romance(v)': 0.09451601,\n", " 'reuse(v)': 0.09451601,\n", " 'dung(v)': 0.09451601,\n", " 'effectuate(v)': 0.09451601,\n", " 'jingle(v)': 0.09451601,\n", " 'libel(v)': 0.09451601,\n", " 'reshuffle(v)': 0.09451601,\n", " 'feign(v)': 0.09451601,\n", " 'stomach(v)': 0.09451601,\n", " 'traipse(v)': 0.09451601,\n", " 'relive(v)': 0.09451601,\n", " 'encompass(v)': 0.09451601,\n", " 'incise(v)': 0.09451601,\n", " 'repackage(v)': 0.09451601,\n", " 'liquidize(v)': 0.09451601,\n", " 'brook(v)': 0.09451601,\n", " 'spearhead(v)': 0.09451601,\n", " 'elude(v)': 0.09451601,\n", " 'blindfold(v)': 0.09451601,\n", " 'junk(v)': 0.09451601,\n", " 'obviate(v)': 0.09451601,\n", " 'redouble(v)': 0.09451601,\n", " 'hem(v)': 0.09451601,\n", " 'disadvantage(v)': 0.09451601,\n", " 'mince(v)': 0.09451601,\n", " 'recant(v)': 0.09451601,\n", " 'demean(v)': 0.09451601,\n", " 'butter(v)': 0.09451601,\n", " 'shadow(v)': 0.09451601,\n", " 'pet(v)': 0.09451601,\n", " 'skew(v)': 0.09451601,\n", " 'copy(v)': 0.094516,\n", " 'court(v)': 0.09449285,\n", " 'derail(v)': 0.09406113,\n", " 'captivate(v)': 0.09406113,\n", " 'master(v)': 0.09405362,\n", " 'press(v)': 0.09398268,\n", " 'neglect(v)': 0.09396165,\n", " 'parallel(v)': 0.09394009,\n", " 'quit(v)': 0.093805485,\n", " 'set(v)': 0.093591005,\n", " 'rape(v)': 0.093515836,\n", " 'broadcast(v)': 0.093450435,\n", " 'direct(v)': 0.09344945,\n", " 'ascend(v)': 0.093349144,\n", " 'incorporate(v)': 0.093024686,\n", " 'flush(v)': 0.09296914,\n", " 'denounce(v)': 0.09289818,\n", " 'comprehend(v)': 0.092892215,\n", " 'rediscover(v)': 0.092892215,\n", " 'recount(v)': 0.092892215,\n", " 'recoup(v)': 0.092881225,\n", " 'telephone(v)': 0.09282348,\n", " 'prescribe(v)': 0.09262171,\n", " 'disappoint(v)': 0.09261698,\n", " 'reestablish(v)': 0.09261698,\n", " 'survive(v)': 0.09245232,\n", " 'impact(v)': 0.092430935,\n", " 'cultivate(v)': 0.09239243,\n", " 'cede(v)': 0.09236525,\n", " 'exacerbate(v)': 0.09218228,\n", " 'explain(v)': 0.092169106,\n", " 'confront(v)': 0.09210479,\n", " 'overcome(v)': 0.0920563,\n", " 'regulate(v)': 0.09204936,\n", " 'guide(v)': 0.092005044,\n", " 'hang(v)': 0.091633305,\n", " 'implement(v)': 0.09147218,\n", " 'pitch(v)': 0.09129389,\n", " 'confirm(v)': 0.09126704,\n", " 'treat(v)': 0.09125096,\n", " 'gather(v)': 0.09125073,\n", " 'foresee(v)': 0.09124051,\n", " 'improve(v)': 0.09104833,\n", " 'mutilate(v)': 0.09101541,\n", " 'usurp(v)': 0.090948075,\n", " 'convey(v)': 0.090836846,\n", " 'revolutionize(v)': 0.090799734,\n", " 'relinquish(v)': 0.09077275,\n", " 'drain(v)': 0.09075474,\n", " 'shut(v)': 0.0906835,\n", " 'exclude(v)': 0.090626456,\n", " 'count(v)': 0.09041187,\n", " 'surprise(v)': 0.09040375,\n", " 'sacrifice(v)': 0.09034819,\n", " 'defy(v)': 0.09029275,\n", " 'liberalize(v)': 0.09029275,\n", " 'surrender(v)': 0.09021925,\n", " 'contest(v)': 0.08993448,\n", " 'solicit(v)': 0.08981499,\n", " 'reveal(v)': 0.08977896,\n", " 'assume(v)': 0.08974168,\n", " 'offend(v)': 0.08972937,\n", " 'reclaim(v)': 0.08971482,\n", " 'seal(v)': 0.089703135,\n", " 'attain(v)': 0.08968435,\n", " 'define(v)': 0.089505196,\n", " 'turn(v)': 0.08946821,\n", " 'deserve(v)': 0.08937833,\n", " 'cover(v)': 0.08934723,\n", " 'distort(v)': 0.08930924,\n", " 'solidify(v)': 0.089265116,\n", " 'unlock(v)': 0.089265116,\n", " 'pronounce(v)': 0.089234226,\n", " 'reinforce(v)': 0.089212954,\n", " 'scrap(v)': 0.08915578,\n", " 'feature(v)': 0.08910607,\n", " 'threaten(v)': 0.08899585,\n", " 'repeal(v)': 0.088927,\n", " 'blackmail(v)': 0.088927,\n", " 'execute(v)': 0.08890428,\n", " 'extend(v)': 0.088882506,\n", " 'own(v)': 0.08885567,\n", " 'display(v)': 0.08882754,\n", " 'shout(v)': 0.08861147,\n", " 'refine(v)': 0.08860488,\n", " 'scan(v)': 0.08860488,\n", " 'strip(v)': 0.08858513,\n", " 'scrutinize(v)': 0.08855878,\n", " 'exhibit(v)': 0.08838997,\n", " 'mourn(v)': 0.088297926,\n", " 'vote(v)': 0.08826369,\n", " 'affirm(v)': 0.08819827,\n", " 'tape(v)': 0.08800533,\n", " 'solve(v)': 0.08784311,\n", " 'publish(v)': 0.087680236,\n", " 'broaden(v)': 0.08767337,\n", " 'butcher(v)': 0.08766871,\n", " 'police(v)': 0.08766871,\n", " 'halve(v)': 0.08766871,\n", " 'boo(v)': 0.08766871,\n", " 'stifle(v)': 0.08760388,\n", " 'highlight(v)': 0.087472126,\n", " 'isolate(v)': 0.0874112,\n", " 'remedy(v)': 0.08732458,\n", " 'endorse(v)': 0.08732367,\n", " 'bully(v)': 0.08731014,\n", " 'endanger(v)': 0.08718839,\n", " 'redo(v)': 0.08717577,\n", " 'research(v)': 0.08714063,\n", " 'shave(v)': 0.08690594,\n", " 'strengthen(v)': 0.08676723,\n", " 'export(v)': 0.08671516,\n", " 'protest(v)': 0.08663967,\n", " 'forsake(v)': 0.08654841,\n", " 'discourage(v)': 0.086424515,\n", " 'uncover(v)': 0.08637872,\n", " 'kick(v)': 0.08620641,\n", " 'fear(v)': 0.08615478,\n", " 'reaffirm(v)': 0.086001486,\n", " 'ridicule(v)': 0.086001486,\n", " 'milk(v)': 0.086001486,\n", " 'acknowledge(v)': 0.0857829,\n", " 'pioneer(v)': 0.08576453,\n", " 'knit(v)': 0.08576453,\n", " 'adore(v)': 0.08576453,\n", " 'exert(v)': 0.08576316,\n", " 'aggravate(v)': 0.08574666,\n", " 'limit(v)': 0.08562346,\n", " 'process(v)': 0.08557161,\n", " 'pump_out(v)': 0.08547847,\n", " 'kidnap(v)': 0.08528532,\n", " 'cheat(v)': 0.085281685,\n", " 'twist(v)': 0.08520597,\n", " 'weaken(v)': 0.085175015,\n", " 'boycott(v)': 0.084889375,\n", " 'conclude(v)': 0.08481308,\n", " 'strike(v)': 0.08480219,\n", " 'realize(v)': 0.08463189,\n", " 'downplay(v)': 0.084537685,\n", " 'scatter(v)': 0.084455066,\n", " 'promulgate(v)': 0.08431755,\n", " 'monitor(v)': 0.08421774,\n", " 'lick(v)': 0.08415996,\n", " 'excise(v)': 0.08415996,\n", " 'fracture(v)': 0.08415996,\n", " 'bust(v)': 0.08415996,\n", " 'popularize(v)': 0.08415996,\n", " 'excite(v)': 0.08415996,\n", " 'lavish(v)': 0.08415996,\n", " 'transcribe(v)': 0.08415996,\n", " 'drop(v)': 0.08415112,\n", " 'undo(v)': 0.08413084,\n", " 'settle(v)': 0.08406136,\n", " 'fold(v)': 0.08405797,\n", " 'compensate(v)': 0.08404493,\n", " 'visualize(v)': 0.08401423,\n", " 'donate(v)': 0.08367635,\n", " 'spot(v)': 0.0834482,\n", " 'found(v)': 0.08344216,\n", " 'recite(v)': 0.083355285,\n", " 'project(v)': 0.08326598,\n", " 'illustrate(v)': 0.083136596,\n", " 'demolish(v)': 0.08297218,\n", " 'sidestep(v)': 0.08288844,\n", " 'stuff(v)': 0.08288844,\n", " 'mortgage(v)': 0.08288844,\n", " 'tackle(v)': 0.082875,\n", " 'frame(v)': 0.082847364,\n", " 'freeze(v)': 0.082701504,\n", " 'untie(v)': 0.08269373,\n", " 'reconsider(v)': 0.08261399,\n", " 'rehearse(v)': 0.0823548,\n", " 'shock(v)': 0.0823548,\n", " 'refurbish(v)': 0.08226393,\n", " 'echo(v)': 0.082250275,\n", " 'starve(v)': 0.08210329,\n", " 'google(v)': 0.08209618,\n", " 'allay(v)': 0.08203219,\n", " 'free(v)': 0.08196514,\n", " 'restore(v)': 0.08191895,\n", " 'incur(v)': 0.081905514,\n", " 'broach(v)': 0.08168467,\n", " 'brush(v)': 0.08168467,\n", " 'energize(v)': 0.08168467,\n", " 'down(v)': 0.08168467,\n", " 'discard(v)': 0.08164716,\n", " 'resurrect(v)': 0.08140666,\n", " 'tempt(v)': 0.081254646,\n", " 'sustain(v)': 0.08098296,\n", " 'wrap(v)': 0.080951214,\n", " 'exterminate(v)': 0.08084273,\n", " 'remove(v)': 0.080823064,\n", " 'underestimate(v)': 0.08074477,\n", " 'frighten(v)': 0.08058385,\n", " 'rewrite(v)': 0.08045926,\n", " 'haul(v)': 0.08045926,\n", " 'auction(v)': 0.08044647,\n", " 'sense(v)': 0.08043851,\n", " 'manage(v)': 0.08042365,\n", " 'contain(v)': 0.08019453,\n", " 'prove(v)': 0.08010403,\n", " 'eye(v)': 0.08003022,\n", " 'skirt(v)': 0.08003022,\n", " 'reassess(v)': 0.08003022,\n", " 'contact(v)': 0.07981486,\n", " 'expand(v)': 0.07942401,\n", " 'divest(v)': 0.07938599,\n", " 'imagine(v)': 0.07936946,\n", " 'scratch(v)': 0.079346776,\n", " 'shape(v)': 0.07932693,\n", " 'nominate(v)': 0.07928889,\n", " 'pack(v)': 0.07916013,\n", " 'smash(v)': 0.07916013,\n", " 'halt(v)': 0.07915121,\n", " 'enact(v)': 0.07907777,\n", " 'certify(v)': 0.079058394,\n", " 'steal(v)': 0.07901219,\n", " 'protect(v)': 0.078946196,\n", " 'bury(v)': 0.07890884,\n", " 'murder(v)': 0.078876466,\n", " 'evoke(v)': 0.0788318,\n", " 'divorce(v)': 0.07882167,\n", " 'row(v)': 0.07882166,\n", " 'modulate(v)': 0.07882166,\n", " 'detonate(v)': 0.07882166,\n", " 'club(v)': 0.07882166,\n", " 'know(v)': 0.07880116,\n", " 'pedal(v)': 0.07876334,\n", " 'cushion(v)': 0.07864207,\n", " 'command(v)': 0.07863488,\n", " 'belittle(v)': 0.07860111,\n", " 'distinguish(v)': 0.07860111,\n", " 'shell(v)': 0.07860111,\n", " 'admit(v)': 0.07842651,\n", " 'commission(v)': 0.07838428,\n", " 'befall(v)': 0.078275636,\n", " 'waste(v)': 0.07826325,\n", " 'thwart(v)': 0.07814798,\n", " 'portray(v)': 0.07810187,\n", " 'advise(v)': 0.07810187,\n", " 'imply(v)': 0.07804383,\n", " 'underscore(v)': 0.07793126,\n", " 'notify(v)': 0.07792033,\n", " 'haunt(v)': 0.07781113,\n", " 'promote(v)': 0.07765449,\n", " 'wield(v)': 0.07744473,\n", " 'penetrate(v)': 0.077352904,\n", " 'integrate(v)': 0.07723048,\n", " 'downgrade(v)': 0.077171996,\n", " 'don(v)': 0.077171996,\n", " 'chill(v)': 0.077171996,\n", " 'modify(v)': 0.07709674,\n", " 'file(v)': 0.07708267,\n", " 'split(v)': 0.077052504,\n", " 'phone(v)': 0.077049196,\n", " 'underperform(v)': 0.077013046,\n", " 'coextrude(v)': 0.077013046,\n", " 'reapportion(v)': 0.077013046,\n", " 'fling(v)': 0.077013046,\n", " 'sequester(v)': 0.077013046,\n", " 'emboss(v)': 0.077013046,\n", " 'scotch(v)': 0.077013046,\n", " 'convoke(v)': 0.077013046,\n", " 'unnerve(v)': 0.077013046,\n", " 'destigmatize(v)': 0.077013046,\n", " 'berate(v)': 0.077013046,\n", " 'outleap(v)': 0.077013046,\n", " 'mash(v)': 0.077013046,\n", " 'dishonor(v)': 0.077013046,\n", " 'bruise(v)': 0.077013046,\n", " 'refute(v)': 0.077013046,\n", " 'parry(v)': 0.077013046,\n", " 'secrete(v)': 0.077013046,\n", " 'illuminate(v)': 0.077013046,\n", " 'shag(v)': 0.077013046,\n", " 'skin(v)': 0.077013046,\n", " 'pry(v)': 0.077013046,\n", " 'deactivate(v)': 0.077013046,\n", " 'sugarcoat(v)': 0.077013046,\n", " 'disavow(v)': 0.077013046,\n", " 'shampoo(v)': 0.077013046,\n", " 'beget(v)': 0.077013046,\n", " 'coo(v)': 0.077013046,\n", " 'shutter(v)': 0.077013046,\n", " 'decry(v)': 0.077013046,\n", " 'bumble(v)': 0.077013046,\n", " 'swipe(v)': 0.077013046,\n", " 'outshine(v)': 0.077013046,\n", " 'disassemble(v)': 0.077013046,\n", " 'slit(v)': 0.077013046,\n", " 'ensnare(v)': 0.077013046,\n", " 'engender(v)': 0.077013046,\n", " 'desecrate(v)': 0.077013046,\n", " 'devour(v)': 0.077013046,\n", " 'abhor(v)': 0.077013046,\n", " 'decapitate(v)': 0.077013046,\n", " 'deplore(v)': 0.077013046,\n", " 'verbalize(v)': 0.077013046,\n", " 'astound(v)': 0.077013046,\n", " 'typify(v)': 0.077013046,\n", " 'option(v)': 0.077013046,\n", " 'floor(v)': 0.077013046,\n", " 'spice(v)': 0.077013046,\n", " 'nickel(v)': 0.077013046,\n", " 'concoct(v)': 0.077013046,\n", " 'recruit(v)': 0.07679446,\n", " 'devise(v)': 0.07678125,\n", " 'revive(v)': 0.076773174,\n", " 'tout(v)': 0.07673409,\n", " 'cart(v)': 0.07673408,\n", " 'supersede(v)': 0.07671012,\n", " 'spurn(v)': 0.07671012,\n", " 'record(v)': 0.07670176,\n", " 'disparage(v)': 0.07670029,\n", " 'back(v)': 0.076469936,\n", " 'repair(v)': 0.07616385,\n", " 'anger(v)': 0.07613789,\n", " 'top(v)': 0.07611526,\n", " 'deter(v)': 0.07611526,\n", " 'scuttle(v)': 0.0757294,\n", " 'revamp(v)': 0.0757294,\n", " 'chase(v)': 0.07571136,\n", " 'claim(v)': 0.075532265,\n", " 'transcend(v)': 0.075496435,\n", " 'whip(v)': 0.075496435,\n", " 'relay(v)': 0.075416684,\n", " 'warrant(v)': 0.075416684,\n", " 'recover(v)': 0.07538148,\n", " 'depict(v)': 0.07531361,\n", " 'intimidate(v)': 0.07527496,\n", " 'construct(v)': 0.07494726,\n", " 'avoid(v)': 0.07493459,\n", " 'reassign(v)': 0.074779526,\n", " 'envy(v)': 0.07471363,\n", " 'lay(v)': 0.07437402,\n", " 'postpone(v)': 0.07434472,\n", " 'hijack(v)': 0.074313775,\n", " 'paste(v)': 0.07425879,\n", " 'cease(v)': 0.074105844,\n", " 'erase(v)': 0.07409359,\n", " 'foil(v)': 0.07409359,\n", " 'utilize(v)': 0.07396221,\n", " 'roam(v)': 0.07391025,\n", " 'elevate(v)': 0.073882796,\n", " 'tie(v)': 0.073881276,\n", " 'compound(v)': 0.07378762,\n", " 'disturb(v)': 0.07376899,\n", " 'fix_up(v)': 0.07373368,\n", " 'persecute(v)': 0.07368273,\n", " 'rebuild(v)': 0.0735921,\n", " 'curb(v)': 0.073579096,\n", " 'interrogate(v)': 0.07351245,\n", " 'withdraw(v)': 0.07351245,\n", " 'recreate(v)': 0.07351245,\n", " 'foster(v)': 0.07346084,\n", " 'register(v)': 0.073456064,\n", " 'measure(v)': 0.07338776,\n", " 'host(v)': 0.07324231,\n", " 'expose(v)': 0.07321055,\n", " 'mishandle(v)': 0.07306099,\n", " 'crowd(v)': 0.07299241,\n", " 'stress(v)': 0.07298527,\n", " 'leverage(v)': 0.07288466,\n", " 'exempt(v)': 0.07288466,\n", " 'mimic(v)': 0.072770484,\n", " 'specify(v)': 0.07269106,\n", " 'stop(v)': 0.07250169,\n", " 'clean(v)': 0.0723939,\n", " 'exchange(v)': 0.07220252,\n", " 'melt(v)': 0.07218839,\n", " 'hamper(v)': 0.07201359,\n", " 'believe(v)': 0.07200386,\n", " 'eclipse(v)': 0.0717835,\n", " 'overstay(v)': 0.0717835,\n", " 'slam(v)': 0.0717835,\n", " 'requisition(v)': 0.0717835,\n", " 'inhibit(v)': 0.0717835,\n", " 'scout(v)': 0.0717835,\n", " 'slay(v)': 0.0717835,\n", " 'install(v)': 0.07174191,\n", " 'dry(v)': 0.07153256,\n", " 'wreck(v)': 0.07144739,\n", " 'rejoin(v)': 0.07144739,\n", " 'reintroduce(v)': 0.07144739,\n", " 'condition(v)': 0.07144739,\n", " 'chant(v)': 0.07144739,\n", " 'roil(v)': 0.07144739,\n", " 'buttress(v)': 0.07144739,\n", " 'double(v)': 0.07131755,\n", " 'enlist(v)': 0.07117872,\n", " 'harass(v)': 0.07117872,\n", " 'photograph(v)': 0.07117872,\n", " 'honor(v)': 0.071125806,\n", " 'shorten(v)': 0.071103536,\n", " 'widen(v)': 0.071073555,\n", " 'battle(v)': 0.070901245,\n", " 'chair(v)': 0.070854776,\n", " 'utter(v)': 0.07084702,\n", " 'slash(v)': 0.07078575,\n", " 'rest(v)': 0.0707404,\n", " 'pose(v)': 0.07059809,\n", " 'commercialize(v)': 0.07054585,\n", " 'plant(v)': 0.07052846,\n", " 'disseminate(v)': 0.07044807,\n", " 'spend(v)': 0.07040865,\n", " 'separate(v)': 0.070171654,\n", " 'start(v)': 0.07013512,\n", " 'make(v)': 0.07011076,\n", " 'repatriate(v)': 0.07001186,\n", " 'curtail(v)': 0.07001186,\n", " 'shackle(v)': 0.07001186,\n", " 'navigate(v)': 0.07001186,\n", " 'influence(v)': 0.07000109,\n", " 'dispatch(v)': 0.069932446,\n", " 'scare(v)': 0.06980326,\n", " 'add(v)': 0.069798805,\n", " 'unify(v)': 0.069740035,\n", " 'reinstate(v)': 0.06966092,\n", " 'consult(v)': 0.069634766,\n", " 'view(v)': 0.06953756,\n", " 'inherit(v)': 0.06946274,\n", " 'prevent(v)': 0.06938901,\n", " 'revise(v)': 0.0693388,\n", " 'crucify(v)': 0.06930821,\n", " 'outrank(v)': 0.06930821,\n", " 'degrade(v)': 0.06930821,\n", " 'net(v)': 0.06930821,\n", " 'outsell(v)': 0.06930821,\n", " 'loathe(v)': 0.06930821,\n", " 'mismanage(v)': 0.06930821,\n", " 'hoard(v)': 0.06930821,\n", " 'exalt(v)': 0.06930821,\n", " 'render(v)': 0.06913671,\n", " 'disclose(v)': 0.069121056,\n", " 'increase(v)': 0.069077194,\n", " 'correct(v)': 0.0690737,\n", " 'promise(v)': 0.06898892,\n", " 'craft(v)': 0.068933174,\n", " 'revoke(v)': 0.068933174,\n", " 'wound(v)': 0.06891861,\n", " 'invigorate(v)': 0.06888256,\n", " 'bombard(v)': 0.06888256,\n", " 'vent(v)': 0.06888256,\n", " 'combine(v)': 0.06883316,\n", " 'revalue(v)': 0.06871632,\n", " 'reassert(v)': 0.06871632,\n", " 'string(v)': 0.06871632,\n", " 'renounce(v)': 0.06871632,\n", " 'remodel(v)': 0.06871632,\n", " 'herald(v)': 0.06871632,\n", " 'renew(v)': 0.068622396,\n", " 'calculate(v)': 0.068487495,\n", " 'like(v)': 0.06843005,\n", " 'purge(v)': 0.068261564,\n", " 'prioritize(v)': 0.06807055,\n", " 'prohibit(v)': 0.06789021,\n", " 'lure(v)': 0.06788277,\n", " 'concede(v)': 0.06780281,\n", " 'frequent(v)': 0.06767813,\n", " 'need(v)': 0.06747856,\n", " 'fuck(v)': 0.06747809,\n", " 'author(v)': 0.06747809,\n", " 'replace(v)': 0.067448504,\n", " 'fly(v)': 0.06740709,\n", " 'deposit(v)': 0.06736124,\n", " 'weigh(v)': 0.06721934,\n", " 'draft(v)': 0.067193,\n", " 'prompt(v)': 0.06715888,\n", " 'coordinate(v)': 0.066890426,\n", " 'tail(v)': 0.06683291,\n", " 'finesse(v)': 0.06683291,\n", " 'bemoan(v)': 0.06683291,\n", " 'whipsaw(v)': 0.06683291,\n", " 'flex(v)': 0.06683291,\n", " 'lash(v)': 0.06683291,\n", " 'remake(v)': 0.06683291,\n", " 'redraw(v)': 0.06683291,\n", " 'enshrine(v)': 0.06683291,\n", " 'source(v)': 0.06683291,\n", " 'overhang(v)': 0.06683291,\n", " 'barricade(v)': 0.06683291,\n", " 'ravage(v)': 0.06683291,\n", " 'sour(v)': 0.06683291,\n", " 'shelve(v)': 0.06683291,\n", " 'ogle(v)': 0.06683291,\n", " 'torpedo(v)': 0.06683291,\n", " 'decree(v)': 0.06683291,\n", " 'mint(v)': 0.06683291,\n", " 'repress(v)': 0.06683291,\n", " 'reimpose(v)': 0.06683291,\n", " 'rig(v)': 0.06683291,\n", " 'pain(v)': 0.06683291,\n", " 'shirk(v)': 0.06683291,\n", " 'stalk(v)': 0.06683291,\n", " 'hike(v)': 0.06683291,\n", " 'enumerate(v)': 0.06683291,\n", " 'stock(v)': 0.06683291,\n", " 'rake(v)': 0.06683291,\n", " 'distribute(v)': 0.06678329,\n", " 'encode(v)': 0.06669525,\n", " 'mistreat(v)': 0.06669525,\n", " 'mute(v)': 0.06669525,\n", " ...}" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "execution_count": 12 }, { "metadata": {}, "cell_type": "markdown", "source": "## Using the grammar to comprehend new utterances", "id": "3ba548afeeb764a1" }, { "cell_type": "markdown", "id": "57b3b5ef", "metadata": {}, "source": [ "Our agent can now use its pretrained grammar to comprehend new utterances. Below, we instruct our agent to comprehend the passive utterance \"Margaret Thatcher was elected Prime Minister of Britain.\". The resulting meaning representation reveals that the agent identified a single semantic frame that instantiates the ```elect.01``` PropBank roleset (*elect someone to an office or position*). The agent also understood that the roles of *candidate* (```arg1```) and *office or position* (```arg2```) in this instance of ```elect.01``` are respectively taken up by \"Margaret Thatcher\" and \"Prime Minister of Britain\"." ] }, { "cell_type": "code", "id": "487fbead", "metadata": { "ExecuteTime": { "end_time": "2026-03-17T11:02:35.780439Z", "start_time": "2026-03-17T11:02:34.894377Z" } }, "source": "propbank_agent.comprehend(\"Margaret Thatcher was elected Prime Minister of Britain.\")", "outputs": [ { "data": { "text/plain": [ "[{'roleset': 'be.01',\n", " 'roles': [('v', 'was', [2]),\n", " ('arg1', 'Margaret Thatcher', [0, 1]),\n", " ('arg2', 'elected Prime Minister of Britain', [3, 4, 5, 6, 7])]},\n", " {'roleset': 'elect.01',\n", " 'roles': [('v', 'elected', [3]),\n", " ('arg1', 'Margaret Thatcher', [0, 1]),\n", " ('arg2', 'Prime Minister of Britain', [4, 5, 6, 7])]}]" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "execution_count": 13 }, { "cell_type": "markdown", "id": "58a618ee042eddb5", "metadata": {}, "source": [ "To enhance human readability, we can choose to activate an FCG monitor to trace the comprehension process in the web interface:\n" ] }, { "cell_type": "code", "id": "1abc9f55", "metadata": { "ExecuteTime": { "end_time": "2026-03-17T11:02:40.976522Z", "start_time": "2026-03-17T11:02:39.320389Z" } }, "source": [ "fcg.start_web_interface()\n", "fcg.activate_monitor('trace-fcg')\n", "propbank_agent.comprehend(\"She especially enjoyed visiting the old historic churches.\")" ], "outputs": [ { "data": { "text/plain": [ "[{'roleset': 'enjoy.01',\n", " 'roles': [('v', 'enjoyed', [2]),\n", " ('arg0', 'She', [0]),\n", " ('arg1', 'visiting the old historic churches', [3, 4, 5, 6, 7])]},\n", " {'roleset': 'visit.01',\n", " 'roles': [('v', 'visiting', [3]),\n", " ('arg0', 'She', [0]),\n", " ('arg1', 'the old historic churches', [4, 5, 6, 7])]}]" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "execution_count": 14 }, { "cell_type": "markdown", "id": "93bdd539334bc0f7", "metadata": {}, "source": [ "In order to better understand the PropBank rolesets that are retrieved by our agent, we define a new function ```describe_roleset```. The function makes use of ```nltk```'s ```propbank``` module to look up all roles of a given roleset, together with their descriptions:" ] }, { "cell_type": "code", "id": "931008a7", "metadata": { "ExecuteTime": { "end_time": "2026-03-17T11:02:46.069176Z", "start_time": "2026-03-17T11:02:45.120463Z" } }, "source": [ "import nltk\n", "nltk.download('propbank')\n", "from nltk.corpus import propbank" ], "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[nltk_data] Downloading package propbank to\n", "[nltk_data] /Users/katrien/nltk_data...\n", "[nltk_data] Package propbank is already up-to-date!\n" ] } ], "execution_count": 15 }, { "cell_type": "code", "id": "9c49c57e", "metadata": { "ExecuteTime": { "end_time": "2026-03-17T11:02:46.126289Z", "start_time": "2026-03-17T11:02:46.070239Z" } }, "source": [ "def describe_roleset(roleset):\n", " nltk_roleset = propbank.roleset(roleset)\n", " print(nltk_roleset.attrib['id'])\n", " for role in nltk_roleset.findall(\"roles/role\"):\n", " print(' arg' + role.attrib['n'] + ':', role.attrib['descr'])\n", "\n", "describe_roleset('elect.01')" ], "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "elect.01\n", " arg0: voters\n", " arg1: candidate\n", " arg2: office or position\n" ] } ], "execution_count": 16 }, { "cell_type": "code", "id": "464d64ee", "metadata": { "ExecuteTime": { "end_time": "2026-03-17T11:02:47.200469Z", "start_time": "2026-03-17T11:02:46.136992Z" } }, "source": [ "display(propbank_agent.comprehend(\"Attention passengers, the taxi is arriving at Gate 1.\"))\n", "describe_roleset('arrive.01')" ], "outputs": [ { "data": { "text/plain": [ "[{'roleset': 'arrive.01',\n", " 'roles': [('v', 'arriving', [6]),\n", " ('arg1', 'the taxi', [3, 4]),\n", " ('arg4', 'at Gate 1', [7, 8, 9])]},\n", " {'roleset': 'be.01',\n", " 'roles': [('v', 'is', [5]),\n", " ('arg1', 'the taxi', [3, 4]),\n", " ('arg2', 'arriving at Gate 1', [6, 7, 8, 9])]}]" ] }, "metadata": {}, "output_type": "display_data", "jetTransient": { "display_id": null } }, { "name": "stdout", "output_type": "stream", "text": [ "arrive.01\n", " arg1: entity in motion / 'comer'\n", " arg2: extent -- rare)\n", " arg3: start point -- also rare)\n", " arg4: end point, destination\n" ] } ], "execution_count": 17 }, { "cell_type": "code", "id": "76ee723f", "metadata": { "ExecuteTime": { "end_time": "2026-03-17T11:02:47.843563Z", "start_time": "2026-03-17T11:02:47.219323Z" } }, "source": [ "display(propbank_agent.comprehend(\"Explain this to me again.\"))\n", "describe_roleset('explain.01')" ], "outputs": [ { "data": { "text/plain": [ "[{'roleset': 'explain.01',\n", " 'roles': [('v', 'Explain', [0]),\n", " ('arg1', 'this', [1]),\n", " ('arg2', 'to me', [2, 3])]}]" ] }, "metadata": {}, "output_type": "display_data", "jetTransient": { "display_id": null } }, { "name": "stdout", "output_type": "stream", "text": [ "explain.01\n", " arg0: explainer\n", " arg1: thing explained\n", " arg2: explained to\n" ] } ], "execution_count": 18 }, { "cell_type": "code", "id": "137b6b86", "metadata": { "ExecuteTime": { "end_time": "2026-03-17T11:02:48.730Z", "start_time": "2026-03-17T11:02:47.862006Z" } }, "source": [ "display(propbank_agent.comprehend(\"They enjoy visiting New York.\"))\n", "describe_roleset('visit.01')\n", "describe_roleset('enjoy.01')" ], "outputs": [ { "data": { "text/plain": [ "[{'roleset': 'enjoy.01',\n", " 'roles': [('v', 'enjoy', [1]),\n", " ('arg0', 'They', [0]),\n", " ('arg1', 'visiting New York', [2, 3, 4])]},\n", " {'roleset': 'visit.01',\n", " 'roles': [('v', 'visiting', [2]),\n", " ('arg0', 'They', [0]),\n", " ('arg1', 'New York', [3, 4])]}]" ] }, "metadata": {}, "output_type": "display_data", "jetTransient": { "display_id": null } }, { "name": "stdout", "output_type": "stream", "text": [ "visit.01\n", " arg0: one party\n", " arg1: other party\n", "enjoy.01\n", " arg0: enjoyer\n", " arg1: thing enjoyed\n" ] } ], "execution_count": 19 }, { "cell_type": "markdown", "id": "60e900f2", "metadata": {}, "source": [ "## Training a new grammar" ] }, { "cell_type": "markdown", "id": "9a3f0d763ee7aa95", "metadata": {}, "source": [ "Let us now create a second agent, again as an instance of the ```fcg.PropBankAgent``` class, but let it learn a new grammar from corpus data instead of loading a pretrained one. After having downloaded an example CoNNL file, in which a number of English sentences are annotated with PropBank rolesets, we can inspect the first sentence of the file:\n" ] }, { "cell_type": "code", "id": "bfe788c7", "metadata": { "ExecuteTime": { "end_time": "2026-03-17T11:02:51.957176Z", "start_time": "2026-03-17T11:02:51.897602Z" } }, "source": [ "propbank_agent_learner = fcg.PropBankAgent()\n", "conll_annotations = fcg.load_resource('pb-annotations.conll')\n", "with open(conll_annotations, 'r') as f:\n", " sentence_end = False\n", " while sentence_end == False:\n", " line = f.readline()\n", " if not '/' in line:\n", " sentence_end = True\n", " else:\n", " print(line)" ], "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "/ 0 0 I / / - - (ARG0*) \n", "\n", "/ 0 1 gave / / give give.01 (V*) \n", "\n", "/ 0 2 flowers / / - - (ARG1*) \n", "\n", "/ 0 3 to / / - - (ARG2* \n", "\n", "/ 0 4 my / / - - *\n", "\n", "/ 0 5 mother / / - - *) \n", "\n" ] } ], "execution_count": 20 }, { "cell_type": "markdown", "id": "386f4236395d65fc", "metadata": {}, "source": [ "We now call the agent's ```learn_grammar_from_conll_file``` method. This call initiates the learning process implemented by the ```fcg-propbank``` subsystem and equips the agent with the resulting grammar. In this case, the agent has learnt two lexical constructions (for verbs with the lemmas *give* and *send*), two word sense constructions (for the rolesets ```give.01``` and ```send.01```), and two argument structure constructions (a double object construction and a prepositional dative construction)." ] }, { "cell_type": "code", "id": "761624a87d2127ff", "metadata": { "ExecuteTime": { "end_time": "2026-03-17T11:02:53.515563Z", "start_time": "2026-03-17T11:02:52.999407Z" } }, "source": [ "propbank_agent_learner.learn_grammar_from_conll_file(conll_annotations)\n", "propbank_agent_learner" ], "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "execution_count": 21 }, { "cell_type": "markdown", "id": "2a1e9255cc13b31f", "metadata": {}, "source": [ "We can inspect the agent's grammar in the web interface." ] }, { "cell_type": "code", "id": "ff40272e45412f67", "metadata": { "ExecuteTime": { "end_time": "2026-03-17T11:02:54.961380Z", "start_time": "2026-03-17T11:02:54.925085Z" } }, "source": [ "propbank_agent_learner.grammar.show_in_web_interface()\n" ], "outputs": [], "execution_count": 22 }, { "cell_type": "markdown", "id": "1115d421", "metadata": {}, "source": [ "We can now instruct our agent to comprehend a previously unseen utterance, using the grammar it just learnt, by calling its ```comprehend``` method. While comprehending \"The King of the Belgians sent a box of chocolates to Forrest Gump.\", the agent identifies an instance of the ```send.01``` (*give*) roleset, with \"The King of the Belgians\" as the *sender* (```arg0```), \"a box of chocolates\" as the *thing sent* (```arg1```) and \"to Forrest Gump\" as the *sent-to* entity (```arg2```).\n" ] }, { "cell_type": "code", "id": "90f47627ad404a42", "metadata": { "ExecuteTime": { "end_time": "2026-03-17T11:02:56.780546Z", "start_time": "2026-03-17T11:02:56.208286Z" } }, "source": [ "display(propbank_agent_learner.comprehend('The King of the Belgians sent a box of chocolates to Forrest Gump.'))\n", "describe_roleset('send.01')" ], "outputs": [ { "data": { "text/plain": [ "[{'roleset': 'send.01',\n", " 'roles': [('v', 'sent', [5]),\n", " ('arg0', 'The King of the Belgians', [0, 1, 2, 3, 4]),\n", " ('arg1', 'a box of chocolates', [6, 7, 8, 9]),\n", " ('arg2', 'to Forrest Gump', [10, 11, 12])]}]" ] }, "metadata": {}, "output_type": "display_data", "jetTransient": { "display_id": null } }, { "name": "stdout", "output_type": "stream", "text": [ "send.01\n", " arg0: sender\n", " arg1: sent\n", " arg2: sent-to\n" ] } ], "execution_count": 23 }, { "cell_type": "markdown", "id": "6e7571f297af62ea", "metadata": {}, "source": [ "After learning a grammar, it can be saved by calling the ```save_grammar_image``` method of the ```fcg.Agent``` class. This method saves the grammar to a file in a compiled, binary format that can later efficiently be loaded using an agent's ```load_grammar_image``` method.\n" ] }, { "cell_type": "code", "id": "afcd9901", "metadata": { "ExecuteTime": { "end_time": "2026-03-17T11:02:57.511261Z", "start_time": "2026-03-17T11:02:57.468683Z" } }, "source": [ "propbank_agent_learner.save_grammar_image('usage-based-grammar.store')" ], "outputs": [ { "data": { "text/plain": [ "'/Users/katrien/Projects/pyfcg/docs/source/walkthrough_tutorials/usage-based-grammar.store'" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "execution_count": 24 }, { "cell_type": "code", "id": "e507ca6b05515014", "metadata": { "ExecuteTime": { "end_time": "2026-03-17T11:02:58.123567Z", "start_time": "2026-03-17T11:02:58.056062Z" } }, "source": [ "new_agent = fcg.PropBankAgent()\n", "new_agent.load_grammar_image('usage-based-grammar.store')\n", "new_agent" ], "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "execution_count": 25 } ], "metadata": { "kernelspec": { "display_name": ".venv", "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.12.10" } }, "nbformat": 4, "nbformat_minor": 5 }