{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"\n",
"\n",
"\n",
"\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"# Proper"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"A text visualization in which proper nouns and verbs are marked.\n",
"\n",
"The sentences, clauses and phrases are also marked.\n",
"\n",
"The visualization shows genre transitions to and from genealogies."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
" 0.00s This is LAF-Fabric 4.3.3\n",
"http://laf-fabric.readthedocs.org/en/latest/texts/API-reference.html\n"
]
}
],
"source": [
"import sys\n",
"import collections\n",
"\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"\n",
"from laf.fabric import LafFabric\n",
"fabric = LafFabric()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
" 0.00s LOADING API: please wait ... \n",
" 0.00s INFO: USING DATA COMPILED AT: 2014-07-14T16-45-08\n",
" 4.25s LOGFILE=/Users/dirk/laf-fabric-output/etcbc4/proper/__log__proper.txt\n",
" 4.25s INFO: DATA LOADED FROM SOURCE etcbc4 AND ANNOX -- FOR TASK proper AT 2014-07-15T17-57-54\n"
]
}
],
"source": [
"fabric.load('etcbc4', '--', 'proper', {\n",
" \"xmlids\": {\"node\": False, \"edge\": False},\n",
" \"features\": ('''\n",
" otype monads maxmonad minmonad\n",
" gn sp\n",
" label chapter book\n",
" ''',''),\n",
" \"primary\": False,\n",
"})\n",
"exec(fabric.localnames.format(var='fabric'))"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true,
"deletable": true,
"editable": true
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Genesis Exodus Leviticus Numeri DeuteronomiumJosua Judices Samuel_I Samuel_II Reges_I Reges_II Jesaia Jeremia Ezechiel Hosea Joel Amos Obadia Jona Micha Nahum Habakuk Zephania Haggai Sacharia Maleachi Psalmi Iob Proverbia Ruth Canticum EcclesiastesThreni Esther Daniel Esra Nehemia Chronica_I Chronica_II 4m 29s Results directory:\n",
"/Users/dirk/laf-fabric-output/etcbc4/proper\n",
"\n",
"__log__proper.txt 205 Tue Jul 15 20:02:23 2014\n",
"properviz.txt 3166173 Tue Jul 15 20:02:23 2014\n"
]
}
],
"source": [
"out = outfile(\"properviz.txt\")\n",
"\n",
"type_map = collections.defaultdict(lambda: None, [\n",
" (\"chapter\", 'Ch'),\n",
" (\"verse\", 'V'),\n",
" (\"sentence\", 'S'),\n",
" (\"clause\", 'C'),\n",
" (\"phrase\", 'P'),\n",
" (\"word\", 'w'),\n",
"])\n",
"otypes = ['Ch', 'V', 'S', 'C', 'P', 'w']\n",
"watch = collections.defaultdict(lambda: {})\n",
"start = {}\n",
"cur_verse_label = ['','']\n",
"\n",
"def print_node(ob, obdata):\n",
" (node, minm, maxm, monads) = obdata\n",
" if ob == \"w\":\n",
" if not watch:\n",
" out.write(\"◘\".format(monads))\n",
" else:\n",
" outchar = \"─\"\n",
" p_o_s = F.sp.v(node)\n",
" if p_o_s == \"nmpr\":\n",
" if F.gn.v(node) == \"m\": outchar = \"♂\"\n",
" elif F.gn.v(node) == \"f\": outchar = \"♀\"\n",
" elif F.gn.v(node) == \"unknown\": outchar = \"⊙\"\n",
" elif p_o_s == \"verb\":\n",
" outchar = \"♠\"\n",
" out.write(outchar)\n",
" if monads in watch:\n",
" tofinish = watch[monads]\n",
" for o in reversed(otypes):\n",
" if o in tofinish:\n",
" if o == 'C':\n",
" out.write(\"┤\")\n",
" elif o == 'P':\n",
" if 'C' not in tofinish:\n",
" out.write(\"┼\")\n",
" elif o != 'S':\n",
" out.write(\"{}»\".format(o))\n",
" del watch[monads]\n",
" elif ob == \"Ch\":\n",
" this_chapter_label = \"{} {}\".format(F.book.v(node), F.chapter.v(node))\n",
" elif ob == \"V\":\n",
" this_verse_label = F.label.v(node).strip(\" \")\n",
" cur_verse_label[0] = this_verse_label\n",
" cur_verse_label[1] = this_verse_label\n",
" elif ob == \"S\":\n",
" out.write(\"\\n{:<11} \".format(cur_verse_label[1]))\n",
" cur_verse_label[1] = ''\n",
" watch[maxm][ob] = None\n",
" elif ob == \"C\":\n",
" out.write(\"├\")\n",
" watch[maxm][ob] = None\n",
" elif ob == \"P\":\n",
" watch[maxm][ob] = None\n",
" else:\n",
" out.write(\"«{}\".format(ob))\n",
" watch[maxm][ob] = None\n",
"\n",
"lastmin = None\n",
"lastmax = None\n",
"\n",
"for i in NN():\n",
" otype = F.otype.v(i)\n",
" if otype == 'book':\n",
" sys.stderr.write(\"{:<11}\".format(F.book.v(i)))\n",
" \n",
" ob = type_map[otype]\n",
" if ob == None:\n",
" continue\n",
" monads = F.monads.v(i)\n",
" minm = F.minmonad.v(i)\n",
" maxm = F.maxmonad.v(i)\n",
" if lastmin == minm and lastmax == maxm:\n",
" start[ob] = (i, minm, maxm, monads)\n",
" else:\n",
" for o in otypes:\n",
" if o in start:\n",
" print_node(o, start[o])\n",
" start = {ob: (i, minm, maxm, monads)}\n",
" lastmin = minm\n",
" lastmax = maxm\n",
"for ob in otypes:\n",
" if ob in start:\n",
" print_node(ob, start[ob])\n",
"\n",
"close()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" ├─┼♠┼─┤\n",
" ├─┼♠┼─┼─┤\n",
"EXO 05,11 ├─┤├♠┤\n",
" ├♠┼─┼─┤├──┼♠┤\n",
" ├─┼─┼♠┼──┼─┤\n",
"EXO 05,12 ├─┼♠┼──┼───⊙┤├─♠┼─┼──┤◘\n",
"EXO 05,13 ├─┼─♠┼♠┤├─♠┤\n",
" ├♠┼─┼──┼──┤├──┼─♠┼──┤\n",
"EXO 05,14 ├─┼♠┼♠─⊙┤├─┼♠┼─┼♠─┤├─♠┤\n",
" ├─┼─┼♠┼─┼├─♠┼───┤─────┤\n",
"EXO 05,15 ├─┼♠┼♠─⊙┤\n",
" ├─┼♠┼──┤├─♠┤\n",
" ├─┼♠┼─┼──┤\n",
"EXO 05,16 ├─┼─┼♠┼──┤\n",
" ├─┼─┼\n",
" ├♠┼─┤♠┤\n",
" ├─┼─┼─┼♠┤\n",
" ├─┼♠┼─┤\n",
"EXO 05,17 ├─┼♠┤\n",
" ├♠┼─┤├♠┤\n",
" ├──┼─┼♠┤\n",
" ├♠┤\n",
" ├♠┼─♂┤\n",
"EXO 05,18 ├─┼─┤\n",
" ├♠┤\n",
" ├♠┤\n",
" ├─┼─┼─┼♠┼─┤\n",
" ├─┼──┼♠┤\n",
"EXO 05,19 ├─┼♠┼♠─⊙┼─┼──┤├─♠┤\n",
" ├─┼♠┼──┼──┼──┤\n",
"EXO 05,20 ├─┼♠┼─♂──♂┤├♠┤├─♠┤├─♠┼───┤\n",
"EXO 05,21 ├─┼♠┼─┤\n",
" ├♠┼♂┼─┤\n",
" ├─┼♠┤├─┼♠┼──┼───────┤├─♠┼─┼──┤├─♠┤\n",
"EXO 05,22 ├─┼♠┼♂┼─♂┤\n",
" ├─┼♠┤\n",
" ├♂┤├─┼♠┼─────┤\n",
" ├──┼♠┤\n",
"EXO 05,23 ├─┼──┼♠┼──┤├─♠┼──┤\n",
" ├♠┼─────┤\n",
" ├─┼♠┼─┼♠┼──┤\n",
"EXO 06,01 ├─┼♠┼♂┼─♂┤\n",
" ├─┼♠┤├─┼♠┼──┤\n",
" ├─┼───┼♠┤\n",
" ├─┼───┼♠┼──┤\n",
"EXO 06,02 ├─┼♠┼─┼─♂┤\n",
" ├─┼♠┼─┤\n",
" ├─┼♂┤\n",
"EXO 06,03 ├─┼♠┼─♂─♂──♂┼──♂┤\n",
" ├─┼─♂┤├─┼♠┼─┤\n",
"EXO 06,04 ├─┼─┼♠┼──┼─┤├─♠┼─┼──⊙───┤├─┼♠┼─┤\n",
"EXO 06,05 ├─┼──┼♠┼───⊙┤├─┼⊙┼♠┼─┤\n",
" ├─┼♠┼──┤\n",
"EXO 06,06 ├─┤\n",
" ├♠┼──⊙┤\n",
" ├─┼♂┤\n",
" ├─┼♠┼─┼───⊙┤\n",
" ├─┼♠┼─┼──┤\n",
" ├─┼♠┼─┼──♠────┤\n",
"EXO 06,07 ├─┼♠┼─┼─┼──┤\n",
" ├─┼♠┼─┼──┤\n",
" ├─┼♠┤├─┼─┼♂─┤├─┼♠┼─┼───⊙┤\n",
"EXO 06,08 ├─┼♠┼─┼───┤├─┼♠┼──┤├─♠┼─┼─♂─♂──♂┤\n",
" ├─┼♠┼─┼─┼─┤\n",
" ├─┼♂┤\n",
"EXO 06,09 ├─┼♠┼♂┼─┼──⊙┤\n",
" ├─┼─┼♠┼─♂┼───────┤\n",
"EXO 06,10 ├─┼♠┼♂┼─♂┤├─♠┤\n",
"EXO 06,11 ├♠┤\n",
" ├♠┼───⊙┤\n",
" ├─┼♠┼──⊙┼──┤\n",
"EXO 06,12 ├─┼♠┼♂┼──♂┤├─♠┤\n",
" ├─┤\n",
" ├─⊙┼─┼♠┼─┤\n",
" ├─┼─┼♠┼─┤\n",
" ├─┼─┼──┤\n",
"EXO 06,13 ├─┼♠┼♂┼─♂──♂┤\n",
" ├─┼♠┼──⊙────⊙┤├─♠┼──⊙┼──⊙┤\n",
"EXO 06,14 ├─┼───┤\n",
" ├─⊙─⊙┼♂─♂♂─♂┤\n",
" ├─┼─⊙┤\n",
"EXO 06,15 ├─┼─⊙┼♂─♂─♂─♂─♂─♂───┤\n",
" ├─┼─⊙┤\n",
"EXO 06,16 ├─┼─┼──⊙┼──┤\n",
" ├♂─♂─♂┤\n",
" ├─┼──⊙┼──────┤\n",
"EXO 06,17 ├─♂┼♂─♂┼──┤\n",
"EXO 06,18 ├─┼─♂┼♂─♂─♂─♂┤\n",
" ├─┼──♂┼──────┤\n",
"EXO 06,19 ├─┼─♂┼♂─♂┤\n",
" ├─┼───┼──┤\n",
"EXO 06,20 ├─┼♠┼♂┼─♀─┼─┼──┤\n",
" ├─┼♠┼─┼─♂──♂┤\n",
" ├─┼──♂┼──────┤\n",
"EXO 06,21 ├─┼─♂┼♂─♂─♂┤\n",
"EXO 06,22 ├─┼─♂┼♂─♂─♂┤\n",
"EXO 06,23 ├─┼♠┼♂┼─♀─♂─♂┼─┼──┤\n",
" ├─┼♠┼─┼─♂──♂─♂──♂┤\n",
"EXO 06,24 ├─┼─♂┼♂─♂─♂┤\n",
" ├─┼───┤\n",
"\n"
]
}
],
"source": [
"viz = infile('properviz.txt')\n",
"lines = viz.readlines()\n",
"print(''.join(lines[5021:5121]))"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"Let us plot the proper noun density per chapter.\n",
"First we put the chapters, proper noun frequencies and verb frequencies in corresponding lists ``ch``, ``p``, and ``v``."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": [
"book = None\n",
"chapter = None\n",
"words = 0\n",
"proper = 0\n",
"verb = 0\n",
"ch = []\n",
"p = []\n",
"v = []\n",
"\n",
"for node in NN(test=F.otype.v, values=['word', 'chapter', 'book']):\n",
" otype = F.otype.v(node)\n",
" if otype == 'book':\n",
" book = F.book.v(node)\n",
" elif otype == 'chapter':\n",
" if chapter != None:\n",
" p.append(100 * float(proper)/words if words else 0)\n",
" v.append(100 * float(verb)/words if words else 0)\n",
" ch.append(cur_chapter)\n",
" chapter = F.chapter.v(node)\n",
" cur_chapter = \"{} {}\".format(book, chapter)\n",
" verb = 0\n",
" proper = 0\n",
" words = 0\n",
" else:\n",
" words += 1\n",
" if F.sp.v(node) == 'nmpr':\n",
" proper += 1\n",
" if F.sp.v(node) == 'verb':\n",
" verb += 1\n",
"if chapter != None:\n",
" ch.append(cur_chapter)\n",
" p.append(100 * float(proper)/words if words else 0)\n",
" v.append(100 * float(verb)/words if words else 0)"
]
},
{
"cell_type": "markdown",
"metadata": {
"deletable": true,
"editable": true
},
"source": [
"Then we plot the ``p`` and ``v`` series against the ``ch`` series."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAWwAAAEsCAYAAADnx4nVAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xd8VFX6x/FPFEUFQVGUYtcFsWL9uSoSe8P2Q9xV14br\nWnZdsC5YFuwKumBBXd2lCAJWlPVnAZWIgCJFpChFqiBNBKWEkuT8/ngmmyGZSe5k7sycm3zfr9e8\nMnNn5pknycwz5557zrkgIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiKRUKeGvpaISGQsALoAM4Cf\ngb5AXSAfWAzcDSwFBgDbA72BJbFLr9g24h7fFVgJzAeuiHudusCTwEJgGfACsEO558a/loiIlLMA\nmAo0B3YFxgAPAW2BLcBjwHZYcX0QGAfsHruMjW0DK7pbsKK8HXAKsA5oEbu/F/AOsAtQHxgOPFru\nufGvJSIi5cwH/hR3+1zge6xgb6KsBU1s+zlxt8+KPR/Kiu6Ocfe/BtwH5GHF+4C4+34LzIt7bvnX\nEskK9b9J1PwQd30R0Cx2fSWwOe6+ZliXRqLHAqwGCuNuLwSaYq3xnYBJcfflAdvE3S7/WiJZsU3V\nDxHxyj7lrv8Yu+7KPe5HYL8kjwXrUtkp7va+sft/wgr5IbHH7Ip1jTSIe2z51xLJChVsiZI84Bas\nD7sRcC8wNMljh2BdHKV92H8HBpZ7zANYP3Qb4HzgDawYv4wdsGwce1xzrEtFJKdUsCVKHDAYGAHM\nBeYAD2OFvHyr92FgInaQcmrs+sNx9y/DukV+xAr5jcDs2H1/w/rAvwR+AUZSdkCyNA8Rby3A3vRf\nA1/FtjXC3sizsQ/QLjnJTGqT+cBpIcTJZ+u+cJFICNrCdtib/Cjg+Ni2LpS1PD6J3RYRkQxJpUsk\nr9ztCymbNDAAuDiUjESyQ90aUmPNw7pDJgI3xLatjrs/r9xtERHJkaaxn42BKdhR9fIF+uesZiQi\nUssEnTizNPZzJTAM68deDjTBjrY3BVaUf9KBBx7o5s6dG0KaIiK1yjdA6/Ibg/Rh7wTsHLteDxuP\nOg1bX+Ga2PZrsLUXtjJ37lycc2ldunXrltPn+xLDhxx8ieFDDr7E8CEHX2L4kENYMYAjExXjIC3s\nPbFWdenjX8WG8U0EXgeux4b9XRYgloiIVFOQgj2fBE1zrM/6jHDTERGRZLbNcPzu3bt3TzvIfvvt\nl9Pn+xLDhxx8ieFDDr7E8CEHX2L4kEMYMR544AGwpRO2Un5sddhcrD9GREQCysvLgwT1WWuJiIhE\nhAq2iEhEqGCLiESECraISESoYIuIRIQKtohIRKhgi4hEhAq2iEhEqGCLiESECraISESoYIuIRIQK\ntohIRKhgi4hEhAq2iEhEqGCLiESECraISESoYIuIRIQKtohIRKhgi4hEhAq2iEhEqGCLiESECraI\nSESoYIuIRIQKtohIRKhgi4hEhAq2iEhEqGCLiESECraISESoYIuIRIQKtohIRKhgi4hEhAq2iEhE\nBC3Y2wJfA/+J3W4EjARmAyOAXcJPTURE4gUt2J2AbwEXu90FK9gtgE9it0VEJIOCFOy9gPOAfwF5\nsW0XAgNi1wcAF4efmoiIxAtSsHsBdwElcdv2BJbHri+P3RYRkQyqqmC3A1Zg/dd5SR7jKOsqERGR\nDKlTxf0nYt0f5wE7AA2AgVirugmwDGiKFfWEunfv/t/r+fn55Ofnp5OviEiNU1BQQEFBQZWPS9Zq\nTqQtcCdwAdADWAU8gR1w3IXEBx6dc2p8i4ikIi8vDxLU51THYZdW38eBM7FhfafFbouISAal0sKu\nDrWwRURSFFYLW0REckQFW0QkIlSwRUQiQgVbRCQiVLBFRCJCBVtEJCJUsEVEIkIFW0QkIlSwRUQi\nQgVbRCQiVLBFRCJCBVtEJCJUsEVEIkIFW0QkIlSwRUQiQgVbRCQiVLBFRCJCBVtEJCJUsEVEIkIF\nW0QkIlSwRUQiQgVbRCQiVLBFRCJCBVtEJCJUsEVEIkIFW0QkIlSwRUQiQgVbRCQiVLBFRCJCBVtE\nJCJUsEVEIkIFW0QkIlSwRUQiQgVbRCQiVLBFRCKiqoK9AzAemAJ8CzwW294IGAnMBkYAu2QqQRER\nMXkBHrMTsAGoA4wB7gQuBH4CegB/A3YFuiR4rnPOhZOpiEgtkZeXBwnqc5AukQ2xn9sD2wKrsYI9\nILZ9AHBx+imKiEhlghTsbbAukeXAKGAGsGfsNrGfe2YkOxER+a86AR5TArQGGgIfAaeWu9/FLgl1\n7979v9fz8/PJz89PNUcRkRqtoKCAgoKCKh8XpA873v1AIfBHIB9YBjTFWt4HJ3i8+rBFRFJU3T7s\n3SkbAbIjcCbwNTAcuCa2/RrgnVCyFBGRpKpqYR+OHVTcJnYZCPTEhvW9DuwDLAAuA9YkeL5a2CIi\n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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"x = range(len(ch))\n",
"start = 50\n",
"end = 70\n",
"fig = plt.figure()\n",
"plt.plot(x[start:end], p[start:end], 'b-', x[start:end], v[start:end], 'r-')\n",
"plt.axis([start, end, 0, 50])\n",
"plt.xticks(x[start:end], ch[start:end], rotation='vertical')\n",
"plt.margins(0.2)\n",
"plt.subplots_adjust(bottom=0.15);\n",
"plt.title('proper');"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"deletable": true,
"editable": true
},
"outputs": [],
"source": []
}
],
"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.0"
}
},
"nbformat": 4,
"nbformat_minor": 0
}