Last active
October 18, 2016 20:27
-
-
Save dirkroorda/8404866 to your computer and use it in GitHub Desktop.
ipython notebook for gender analysis in the Hebrew Bible
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"metadata": { | |
"name": "" | |
}, | |
"nbformat": 3, | |
"nbformat_minor": 0, | |
"worksheets": [ | |
{ | |
"cells": [ | |
{ | |
"cell_type": "heading", | |
"level": 1, | |
"metadata": {}, | |
"source": [ | |
"Gender in the Hebrew Bible" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"This task extracts a table from the Hebrew Bible data. Each row specifies a chapter and has the percentage of masculine and feminine words is that chapter." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# 0. About this notebook\n", | |
"\n", | |
"This notebook illustrates the working of LAF-Fabric, a tool to analyze the data inside *LAF* resources (Linguistic Annotation Framework). We use it for a particular LAF resource: the Hebrew Bible with linguistic annotations. The software to get the Hebrew Bible in LAF and the LAF-Fabric are on github and are documented here: [WIVU2LAF](http://wivu2laf.readthedocs.org) and [LAF-Fabric](http://laf-fabric.readthedocs.org). There you can find more information on the provenance of the data.\n", | |
"\n", | |
"> **NB 1.** This is a static copy of the Gender notebook. You can download it, and if you have iPython installed and the LAF-Fabric, then you can run this notebook. And you can create many more notebooks like this, looking for patterns in the Hebrew Bible.\n", | |
"\n", | |
"> **NB 2.** All software involved is open source, but the data is not freely available. We are working on a version of the data that may be distributed freely.\n", | |
"If you are seriously interested in working with this tool, we can grant you non-commercial access to the data. Just drop a mail to [Wido van Peursen](mailto:[email protected]) or [Dirk Roorda](mailto:[email protected])." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## 1. Importing\n", | |
"The next cell loads the required libraries and creates a task processor.\n", | |
"\n", | |
"Note the *matplotlib*, this is the one that can draw a chart based on a table.\n", | |
"In order to show the chart withib this page, we issue a magic command (%matplotlib inline).\n", | |
"\n", | |
"The Notebook class in *graf.notebook* implements a LAF-Fabric task processor." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"import sys\n", | |
"import collections\n", | |
"import matplotlib.pyplot as plt\n", | |
"import graf\n", | |
"from graf.notebook import Notebook\n", | |
"%matplotlib inline\n", | |
"processor = Notebook()" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 1 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## 2. Loading\n", | |
"\n", | |
"The processor needs data. Here is where we say what data to load. We do not need the XML identifiers as they show up in the original LAF resource. But we do need a few features of nodes, namely the ones that give us the gender of the words, and the numbers of the chapters and the books in which the chapters are contained.\n", | |
"\n", | |
"The *init* function actually draws that data in, and it will take a few seconds. It needs to know the name of the LAF header file (in fact the *GrAF* header file).\n", | |
"The '--' means that we do not draw in an extra annotation package. If you want to do that, this is the place to give the name of such a package.\n", | |
"\n", | |
"Then *gender* is just a name we choose to give to this task. This name determines where on the filesystem the log file and output (if any) will be put." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"processor.init('bhs3.txt.hdr', '--', 'gender', {\n", | |
" \"xmlids\": {\n", | |
" \"node\": False,\n", | |
" \"edge\": False,\n", | |
" },\n", | |
" \"features\": {\n", | |
" \"shebanq\": {\n", | |
" \"node\": [\n", | |
" \"db.otype\",\n", | |
" \"ft.gender\",\n", | |
" \"sft.chapter,book\",\n", | |
" ],\n", | |
" \"edge\": [\n", | |
" ],\n", | |
" },\n", | |
" },\n", | |
"})" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
" 0.00s COMPILING source: UP TO DATE\n" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
" 0.00s COMPILING annox: UP TO DATE\n" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
" 0.00s loading common: node_sort ... \n" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
" 0.16s loading common: node_out ... \n" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
" 0.45s loading common: node_in ... \n" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
" 0.76s loading common: edges_from ... \n" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
" 0.87s loading common: edges_to ... \n" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
" 0.99s clearing xmlids: xid ...\n" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
" 0.99s clearing feature: feature ...\n" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
" 2.42s clearing annox: xfeature ...\n" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
" 3.16s present feature: shebanq:db.otype (node) from source bhs3.txt.hdr\n" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
" 3.16s present feature: shebanq:ft.gender (node) from source bhs3.txt.hdr\n" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
" 3.16s present feature: shebanq:sft.chapter (node) from source bhs3.txt.hdr\n" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
" 3.16s present feature: shebanq:sft.book (node) from source bhs3.txt.hdr\n" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
" 0.00s LOGFILE=/Users/dirk/Scratch/shebanq/results/db/bhs3.txt.hdr/gender/__log__gender.txt\n" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
" 0.00s BEGIN TASK=gender SOURCE=bhs3.txt.hdr\n" | |
] | |
} | |
], | |
"prompt_number": 2 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## 3. Naming\n", | |
"\n", | |
"The workbench provides us with some objects by which we can query for data. Here they are:\n", | |
"\n", | |
"### F\n", | |
"All that you want to know about features and are not afraid to ask.\n", | |
"It is an object, and for each feature that you have declared, it has a member\n", | |
"with a handy name. For example, ``F.shebanq_db_otype`` is a feature object\n", | |
"that corresponds with the LAF feature given in an annotation in the annotation space ``shebanq``,\n", | |
"with label ``db`` and name ``otype``.\n", | |
"It is a node feature, because otherwise the name had a \n", | |
"``_e`` appended to it.\n", | |
"You can look up a feature value of this feature, say for node ``n``,by saying:\n", | |
"``F.shebanq_db_otype.v(n)``. \n", | |
"\n", | |
"### P(node)\n", | |
"Your gateway to the primary data. For nodes *n* that are linked to the primary data by one or more regions,\n", | |
"P(*n*) yields a set of chunks of primary data, corresponding with those regions.\n", | |
"The chunks are maximal, non-overlapping, ordered according to the primary data.\n", | |
"Every chunk is given as a tuple (*pos*, *text*), where *pos* is the position in the primary data where\n", | |
"the start of *text* can be found, and *text* is the chunk of actual text that is specified by the region.\n", | |
"The primary data is only available if you have specified in the *load* directives: \n", | |
"``primary: True``\n", | |
"\n", | |
"### NN(test=function value=something)\n", | |
"If you want to walk through all the nodes, possibly skipping some, then this is your method.\n", | |
"It is an *iterator* that yields a new node everytime it is called.\n", | |
"The order is so-called *primary data order*, which will be explained below.\n", | |
"The ``test`` and ``value`` arguments are optional.\n", | |
"If given, ``test`` should be a *callable* with one argument, returning a string;\n", | |
"``value`` should be a string.\n", | |
"``test`` will be called for each passing node,\n", | |
"and if the value returned is not equal to the given ``value``,\n", | |
"the node will be skipped.\n", | |
"\n", | |
"### X\n", | |
"If you need to convert the integers that identify nodes and edges in the compiled data back to\n", | |
"their original XML identifiers, you can do that with the *X* object.\n", | |
"It has two members, ``X.node`` and ``X.edge``, which contain the separate mapping tables for\n", | |
"nodes and edges. Both have two methods, corresponding to the direction of the translation:\n", | |
"with ``X.node.i(\u00abxml id\u00bb)`` you get the corresponding number of a node, and with ``X.node.r(\u00abnumber\u00bb)``\n", | |
"you get the original XML id by which the node was identified in the LAF resource." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"(msg, P, NN, F, X) = processor.data()" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 12 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## 4. Task Execution\n", | |
"\n", | |
"### Initialization\n", | |
"\n", | |
"We initialize the counters in which we store the word counts." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"stats = [0, 0, 0]\n", | |
"cur_chapter = None\n", | |
"ch = []\n", | |
"m = []\n", | |
"f = []" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 13 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"### Looping\n", | |
"\n", | |
"Here we loop over a bunch of nodes (in fact over all nodes), in a convenient document order.\n", | |
"We keep track of the chapter we are in and accumulate counts of the words, masculine and feminine.\n", | |
"For each chapter we create entries in the *ch*, *m* and *f* lists.\n", | |
"\n", | |
"Note also the progress messages after each chapter." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"for node in NN():\n", | |
" otype = F.shebanq_db_otype.v(node)\n", | |
" if otype == \"word\":\n", | |
" stats[0] += 1\n", | |
" if F.shebanq_ft_gender.v(node) == \"masculine\":\n", | |
" stats[1] += 1\n", | |
" elif F.shebanq_ft_gender.v(node) == \"feminine\":\n", | |
" stats[2] += 1\n", | |
" elif otype == \"chapter\":\n", | |
" if cur_chapter != None:\n", | |
" masc = 0 if not stats[0] else 100 * float(stats[1]) / stats[0]\n", | |
" fem = 0 if not stats[0] else 100 * float(stats[2]) / stats[0]\n", | |
" ch.append(cur_chapter)\n", | |
" m.append(masc)\n", | |
" f.append(fem)\n", | |
" this_chapter = \"{} {}\".format(F.shebanq_sft_book.v(node), F.shebanq_sft_chapter.v(node))\n", | |
"# sys.stderr.write(\"\\r{:<15}\".format(this_chapter))\n", | |
" stats = [0, 0, 0]\n", | |
" cur_chapter = this_chapter" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 22 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## 5 Closing\n", | |
"\n", | |
"We need to close open files." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"processor.final()" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"24m 25s END TASK gender\n" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"24m 25s \n", | |
"total 200\n", | |
"-rw-r--r--@ 1 dirk staff 75K 7 nov 16:53 Gender.pdf\n", | |
"-rw-r--r-- 1 dirk staff 434B 13 jan 15:31 __log__gender.txt\n", | |
"-rw-r--r-- 1 dirk staff 19K 13 jan 12:19 stats.txt\n", | |
"\n" | |
] | |
}, | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": [ | |
"24m 25s \n", | |
"100K\t/Users/dirk/Scratch/shebanq/results/db/bhs3.txt.hdr/gender\n", | |
"\n" | |
] | |
} | |
], | |
"prompt_number": 15 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## 6 Showing off\n", | |
"\n", | |
"Everything is still in memory. Now it is the time to generate a graphical representation of the data.\n", | |
"The *matplotlib* is full of instruments to do that, here we just show a line graph of 20 chapters.\n", | |
"\n", | |
"If you want to see another series of chapters, just modify the *start* and *end* variables below and execute again by pressing *Shift Enter*. You can repeat this as often as you like without re-running earlier steps." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"x = range(len(ch))\n", | |
"start = 100\n", | |
"end = 120\n", | |
"fig = plt.figure()\n", | |
"plt.plot(x[start:end], m[start:end], 'b-', x[start:end], f[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('gender');" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "display_data", | |
"png": "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\n", | |
"text": [ | |
"<matplotlib.figure.Figure at 0x128b95c10>" | |
] | |
} | |
], | |
"prompt_number": 24 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Note the chapters where the feminine words dominate the masculine words: Leviticus 12 and 18." | |
] | |
} | |
], | |
"metadata": {} | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment