parallels.ipynb
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"%load_ext autoreload\n",
"%autoreload 2"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"import collections\n",
"import pickle\n",
"import gzip\n",
"\n",
"from tf.app import use"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Using TF app oldbabylonian in /Users/dirk/github/annotation/app-oldbabylonian/code\n",
"Using Nino-cunei/oldbabylonian/tf - 1.0.4 in /Users/dirk/github\n"
]
},
{
"data": {
"text/html": [
"<b>Documentation:</b> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs/\" title=\"provenance of Old Babylonian Letters 1900-1600: Cuneiform tablets \">OLDBABYLONIAN</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs/transcription.md\" title=\"How TF features represent ATF\">Character table</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"OLDBABYLONIAN feature documentation\">Feature docs</a> <a target=\"_blank\" href=\"https://github.com/annotation/app-oldbabylonian\" title=\"oldbabylonian API documentation\">oldbabylonian API</a> <a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Fabric/\" title=\"text-fabric-api\">Text-Fabric API 7.5.1</a> <a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Use/Search/\" title=\"Search Templates Introduction and Reference\">Search Reference</a><details open><summary><b>Loaded features</b>:</summary>\n",
"<p><b>Old Babylonian Letters 1900-1600: Cuneiform tablets </b>: <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/ARK.tf\">ARK</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/after.tf\">after</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/afterr.tf\">afterr</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/afteru.tf\">afteru</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/atf.tf\">atf</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/atfpost.tf\">atfpost</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/atfpre.tf\">atfpre</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/author.tf\">author</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/col.tf\">col</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/collated.tf\">collated</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/collection.tf\">collection</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/comment.tf\">comment</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/damage.tf\">damage</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/det.tf\">det</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/docnote.tf\">docnote</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/docnumber.tf\">docnumber</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/excavation.tf\">excavation</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/excised.tf\">excised</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/face.tf\">face</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/flags.tf\">flags</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/fraction.tf\">fraction</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/genre.tf\">genre</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/grapheme.tf\">grapheme</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/graphemer.tf\">graphemer</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/graphemeu.tf\">graphemeu</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/lang.tf\">lang</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/langalt.tf\">langalt</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/ln.tf\">ln</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/lnc.tf\">lnc</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/lnno.tf\">lnno</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/material.tf\">material</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/missing.tf\">missing</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/museumcode.tf\">museumcode</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/museumname.tf\">museumname</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/object.tf\">object</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/operator.tf\">operator</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/operatorr.tf\">operatorr</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/operatoru.tf\">operatoru</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/otype.tf\">otype</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/period.tf\">period</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/pnumber.tf\">pnumber</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/primecol.tf\">primecol</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/primeln.tf\">primeln</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/pubdate.tf\">pubdate</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/question.tf\">question</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/reading.tf\">reading</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/readingr.tf\">readingr</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/readingu.tf\">readingu</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/remarkable.tf\">remarkable</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/remarks.tf\">remarks</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/repeat.tf\">repeat</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/srcLn.tf\">srcLn</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/srcLnNum.tf\">srcLnNum</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/srcfile.tf\">srcfile</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/subgenre.tf\">subgenre</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/supplied.tf\">supplied</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/sym.tf\">sym</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/symr.tf\">symr</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/symu.tf\">symu</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/trans.tf\">trans</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/transcriber.tf\">transcriber</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/translation@en.tf\">translation@ll</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/type.tf\">type</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/uncertain.tf\">uncertain</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/volume.tf\">volume</a> <b><i><a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/github/Nino-cunei/oldbabylonian/tf/1.0.4/oslots.tf\">oslots</a></i></b> </p></details>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<style>\n",
"@font-face {\n",
" font-family: \"Santakku\";\n",
" src:\n",
" local(\"Santakku.ttf\"),\n",
" url(\"https://github.com/annotation/text-fabric/blob/master/tf/server/static/fonts/Santakku.woff?raw=true\");\n",
"}\n",
".txtn,.txtn a:visited,.txtn a:link {\n",
" font-family: sans-serif;\n",
" font-size: normal;\n",
" text-decoration: none;\n",
"}\n",
".txtp,.txtp a:visited,.txtp a:link {\n",
" font-family: monospace;\n",
" font-size: normal;\n",
" text-decoration: none;\n",
"}\n",
".txtr,.txtr a:visited,.txtr a:link {\n",
" font-family: serif;\n",
" font-size: large;\n",
" text-decoration: none;\n",
"}\n",
".txtu,.txtu a:visited,.txtu a:link {\n",
" font-family: Santakku;\n",
" font-size: x-large;\n",
" text-decoration: none;\n",
"}\n",
".features {\n",
" font-family: monospace;\n",
" font-size: medium;\n",
" font-weight: bold;\n",
" color: #0a6611;\n",
" display: flex;\n",
" flex-flow: column nowrap;\n",
" padding: 0.1em;\n",
" margin: 0.1em;\n",
" direction: ltr;\n",
"}\n",
".features div,.features span {\n",
" padding: 0;\n",
" margin: -0.1rem 0;\n",
"}\n",
".features .f {\n",
" font-family: sans-serif;\n",
" font-size: x-small;\n",
" font-weight: normal;\n",
" color: #5555bb;\n",
"}\n",
".features .xft {\n",
" color: #000000;\n",
" background-color: #eeeeee;\n",
" font-size: medium;\n",
" margin: 0.1em 0em;\n",
"}\n",
".features .xft .f {\n",
" color: #000000;\n",
" background-color: #eeeeee;\n",
" font-style: italic;\n",
" font-size: small;\n",
" font-weight: normal;\n",
"}\n",
".pnum {\n",
" font-family: sans-serif;\n",
" font-size: small;\n",
" font-weight: bold;\n",
" color: #444444;\n",
"}\n",
".nd {\n",
" font-family: monospace;\n",
" font-size: x-small;\n",
" color: #999999;\n",
"}\n",
".meta {\n",
" display: flex;\n",
" justify-content: flex-start;\n",
" align-items: flex-start;\n",
" align-content: flex-start;\n",
" flex-flow: row nowrap;\n",
"}\n",
".features,.comments {\n",
" display: flex;\n",
" justify-content: flex-start;\n",
" align-items: flex-start;\n",
" align-content: flex-start;\n",
" flex-flow: column nowrap;\n",
"}\n",
".children {\n",
" display: flex;\n",
" justify-content: flex-start;\n",
" align-items: flex-start;\n",
" align-content: flex-start;\n",
" border: 0;\n",
" background-color: #ffffff;\n",
"}\n",
".children.document {\n",
" flex-flow: column nowrap;\n",
"}\n",
".children.face {\n",
" flex-flow: column nowrap;\n",
"}\n",
".children.line {\n",
" align-items: stretch;\n",
" flex-flow: row nowrap;\n",
"}\n",
".children.cluster {\n",
" flex-flow: row wrap;\n",
"}\n",
".children.line {\n",
" align-items: stretch;\n",
" flex-flow: row nowrap;\n",
"}\n",
".children.sign {\n",
" flex-flow: column nowrap;\n",
"}\n",
".contnr {\n",
" width: fit-content;\n",
"}\n",
".contnr.document,.contnr.face,\n",
".contnr.line,\n",
".contnr.cluster,\n",
".contnr.word,\n",
".contnr.sign {\n",
" display: flex;\n",
" justify-content: flex-start;\n",
" align-items: flex-start;\n",
" align-content: flex-start;\n",
" flex-flow: column nowrap;\n",
" background: #ffffff none repeat scroll 0 0;\n",
" padding: 0.5em 0.1em 0.1em 0.1em;\n",
" margin: 0.8em 0.1em 0.1em 0.1em;\n",
" border-radius: 0.2em;\n",
" border-style: solid;\n",
" border-width: 0.2em;\n",
" font-size: small;\n",
"}\n",
".contnr.document,.contnr.face {\n",
" border-color: #bb8800;\n",
"}\n",
".contnr.line {\n",
" border-color: #0088bb;\n",
"}\n",
".contnr.cluster {\n",
" flex-flow: row wrap;\n",
" border: 0;\n",
"}\n",
".contnr.word {\n",
" border-color: #44bbff;\n",
"}\n",
".contnr.sign {\n",
" border-color: #bbbbbb;\n",
"}\n",
".contnr.hl {\n",
" background-color: #ffee66;\n",
"}\n",
".lbl.document,.lbl.face,\n",
".lbl.line,\n",
".lbl.cluster,\n",
".lbl.sign,.lbl.word {\n",
" margin-top: -1.2em;\n",
" margin-left: 1em;\n",
" background: #ffffff none repeat scroll 0 0;\n",
" padding: 0 0.3em;\n",
" border-style: solid;\n",
" font-size: small;\n",
" display: block;\n",
"}\n",
".lbl.document,.lbl.face {\n",
" border-color: #bb8800;\n",
" border-width: 0.3em;\n",
" border-radius: 0.3em;\n",
" color: #bb8800;\n",
"}\n",
".lbl.line {\n",
" border-color: #0088bb;\n",
" border-width: 0.3em;\n",
" border-radius: 0.3em;\n",
" color: #0088bb;\n",
"}\n",
".lbl.cluster {\n",
" border-color: #dddddd;\n",
" border-width: 0.2em;\n",
" border-radius: 0.2em;\n",
" color: #0000cc;\n",
"}\n",
".lbl.word {\n",
" border-color: #44bbff;\n",
" border-width: 0.2em;\n",
" border-radius: 0.2em;\n",
" font-size: medium;\n",
" color: #000000;\n",
"}\n",
".lbl.sign {\n",
" border-color: #bbbbbb;\n",
" border-width: 0.1em;\n",
" border-radius: 0.1em;\n",
" font-size: small;\n",
" color: #000000;\n",
"}\n",
".op {\n",
" padding: 0.5em 0.1em 0.1em 0.1em;\n",
" margin: 0.8em 0.1em 0.1em 0.1em;\n",
" font-family: monospace;\n",
" font-size: x-large;\n",
" font-weight: bold;\n",
"}\n",
".name {\n",
" font-family: monospace;\n",
" font-size: medium;\n",
" color: #0000bb;\n",
"}\n",
".period {\n",
" font-family: monospace;\n",
" font-size: medium;\n",
" font-weight: bold;\n",
" color: #0000bb;\n",
"}\n",
".text {\n",
" font-family: sans-serif;\n",
" font-size: x-small;\n",
" color: #000000;\n",
"}\n",
".srcln {\n",
" font-family: monospace;\n",
" font-size: medium;\n",
" color: #000000;\n",
"}\n",
".srclnnum {\n",
" font-family: monospace;\n",
" font-size: x-small;\n",
" color: #0000bb;\n",
"}\n",
".comment {\n",
" color: #7777dd;\n",
" font-family: monospace;\n",
" font-size: small;\n",
"}\n",
".operator {\n",
" color: #ff77ff;\n",
" font-size: large;\n",
"}\n",
"/* LANGUAGE: superscript and subscript */\n",
"\n",
"/* cluster */\n",
".det {\n",
" vertical-align: super;\n",
"}\n",
"/* cluster */\n",
".langalt {\n",
" vertical-align: sub;\n",
"}\n",
"/* REDACTIONAL: line over or under */\n",
"\n",
"/* flag */\n",
".collated {\n",
" font-weight: bold;\n",
" text-decoration: underline;\n",
"}\n",
"/* cluster */\n",
".excised {\n",
" color: #dd0000;\n",
" text-decoration: line-through;\n",
"}\n",
"/* cluster */\n",
".supplied {\n",
" color: #0000ff;\n",
" text-decoration: overline;\n",
"}\n",
"/* flag */\n",
".remarkable {\n",
" font-weight: bold;\n",
" text-decoration: overline;\n",
"}\n",
"\n",
"/* UNSURE: italic*/\n",
"\n",
"/* cluster */\n",
".uncertain {\n",
" font-style: italic\n",
"}\n",
"/* flag */\n",
".question {\n",
" font-weight: bold;\n",
" font-style: italic\n",
"}\n",
"\n",
"/* BROKEN: text-shadow */\n",
"\n",
"/* cluster */\n",
".missing {\n",
" color: #999999;\n",
" text-shadow: #bbbbbb 1px 1px;\n",
"}\n",
"/* flag */\n",
".damage {\n",
" font-weight: bold;\n",
" color: #999999;\n",
" text-shadow: #bbbbbb 1px 1px;\n",
"}\n",
".empty {\n",
" color: #ff0000;\n",
"}\n",
"\n",
"\n",
"tr.tf, td.tf, th.tf {\n",
" text-align: left;\n",
"}\n",
"\n",
"span.hldot {\n",
"\tbackground-color: var(--hl-strong);\n",
"\tborder: 0.2rem solid var(--hl-rim);\n",
"\tborder-radius: 0.4rem;\n",
"\t/*\n",
"\tdisplay: inline-block;\n",
"\twidth: 0.8rem;\n",
"\theight: 0.8rem;\n",
"\t*/\n",
"}\n",
"span.hl {\n",
"\tbackground-color: var(--hl-strong);\n",
"\tborder-width: 0;\n",
"\tborder-radius: 0.1rem;\n",
"\tborder-style: solid;\n",
"}\n",
"\n",
"span.hlup {\n",
"\tborder-color: var(--hl-dark);\n",
"\tborder-width: 0.1rem;\n",
"\tborder-style: solid;\n",
"\tborder-radius: 0.2rem;\n",
" padding: 0.2rem;\n",
"}\n",
"\n",
":root {\n",
"\t--hl-strong: hsla( 60, 100%, 70%, 0.9 );\n",
"\t--hl-rim: hsla( 55, 100%, 60%, 0.9 );\n",
"\t--hl-dark: hsla( 55, 100%, 40%, 0.9 );\n",
"}\n",
"</style>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<details open><summary><b>API members</b>:</summary>\n",
"<a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Computed/#computed-data\" title=\"doc\">C Computed</a>, <a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Computed/#computed-data\" title=\"doc\">Call AllComputeds</a>, <a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Computed/#computed-data\" title=\"doc\">Cs ComputedString</a><br/>\n",
"<a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Features/#edge-features\" title=\"doc\">E Edge</a>, <a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Features/#edge-features\" title=\"doc\">Eall AllEdges</a>, <a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Features/#edge-features\" title=\"doc\">Es EdgeString</a><br/>\n",
"<a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Fabric/#loading\" title=\"doc\">ensureLoaded</a>, <a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Fabric/#loading\" title=\"doc\">TF</a>, <a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Fabric/#loading\" title=\"doc\">ignored</a>, <a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Fabric/#loading\" title=\"doc\">loadLog</a><br/>\n",
"<a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Locality/#locality\" title=\"doc\">L Locality</a><br/>\n",
"<a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Misc/#messaging\" title=\"doc\">cache</a>, <a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Misc/#messaging\" title=\"doc\">error</a>, <a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Misc/#messaging\" title=\"doc\">indent</a>, <a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Misc/#messaging\" title=\"doc\">info</a>, <a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Misc/#messaging\" title=\"doc\">reset</a><br/>\n",
"<a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Nodes/#navigating-nodes\" title=\"doc\">N Nodes</a>, <a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Nodes/#navigating-nodes\" title=\"doc\">sortKey</a>, <a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Nodes/#navigating-nodes\" title=\"doc\">sortKeyTuple</a>, <a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Nodes/#navigating-nodes\" title=\"doc\">otypeRank</a>, <a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Nodes/#navigating-nodes\" title=\"doc\">sortNodes</a><br/>\n",
"<a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Features/#node-features\" title=\"doc\">F Feature</a>, <a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Features/#node-features\" title=\"doc\">Fall AllFeatures</a>, <a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Features/#node-features\" title=\"doc\">Fs FeatureString</a><br/>\n",
"<a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Search/#search\" title=\"doc\">S Search</a><br/>\n",
"<a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Text/#text\" title=\"doc\">T Text</a></details>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"A = use('oldbabylonian', hoist=globals(), lgc=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Parallels\n",
"\n",
"We make edges between similar lines.\n",
"\n",
"When are lines similar?\n",
"\n",
"If a certain distance metric is above a certain threshold.\n",
"\n",
"We choose this metric:\n",
"\n",
"* we reduce a line to the set of readings and graphemes in it, excluding unknown signs and ellipses.\n",
"* the similarity between two lines is the length of the intersection divided by the length of the union of their sets times 100."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Preparation\n",
"\n",
"We pre-compute all sets for all lines."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"READABLE_TYPES = {'reading', 'grapheme', 'numeral', 'complex'}\n",
"\n",
"def makeSet(l):\n",
" if F.lnc.v(l): # comment line\n",
" return None\n",
" lineSet = set()\n",
" for s in L.d(l, otype='sign'):\n",
" if F.type.v(s) in READABLE_TYPES:\n",
" r = F.readingr.v(s)\n",
" if r:\n",
" lineSet.add(r)\n",
" g = F.graphemer.v(s)\n",
" if g:\n",
" lineSet.add(g)\n",
" return lineSet"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"25923 lines\n"
]
}
],
"source": [
"lines = {}\n",
"\n",
"for l in F.otype.s('line'):\n",
" lineSet = makeSet(l)\n",
" if lineSet:\n",
" lines[l] = lineSet\n",
" \n",
"nLines = len(lines)\n",
"print(f'{nLines} lines')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Measure"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"def sim(lSet, mSet):\n",
" return int(round(100 * len(lSet & mSet) / len(lSet | mSet)))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Compute all similarities\n",
"\n",
"We are going to perform several hundreds of millions of comparisons, each of which is more than an elemetary operation.\n",
"\n",
"Let's measure time."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"THRESHOLD = 90\n",
"\n",
"def computeSim(limit=None):\n",
" similarity = {}\n",
"\n",
" lineNodes = sorted(lines.keys())\n",
" nLines = len(lineNodes)\n",
"\n",
" nComparisons = nLines * (nLines - 1) // 2\n",
"\n",
" print(f'{nComparisons} comparisons to make')\n",
" chunkSize = nComparisons // 100\n",
"\n",
" co = 0\n",
" b = 0\n",
" si = 0\n",
" p = 0\n",
"\n",
" indent(reset=True)\n",
"\n",
" stop = False\n",
" for i in range(nLines):\n",
" nodeI = lineNodes[i]\n",
" lineI = lines[nodeI]\n",
" for j in range(i + 1, nLines):\n",
" nodeJ = lineNodes[j]\n",
" lineJ = lines[nodeJ]\n",
" s = sim(lineI, lineJ)\n",
" co += 1\n",
" b += 1\n",
" if b == chunkSize:\n",
" p += 1\n",
" info(f'{p:>3}% - {co:>12} comparisons and {si:>10} similarities')\n",
" b = 0\n",
" if limit is not None and p >= limit:\n",
" stop = True\n",
" break\n",
"\n",
" if s < THRESHOLD:\n",
" continue\n",
" similarity[(nodeI, nodeJ)] = sim(lineI, lineJ)\n",
" si += 1\n",
" if stop:\n",
" break\n",
"\n",
" info(f'{p:>3}% - {co:>12} comparisons and {si:>10} similarities')\n",
" return similarity"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We are going to run it to 1% first and do some checks then."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"335988003 comparisons to make\n",
" 4.42s 1% - 3359880 comparisons and 5695 similarities\n",
" 4.42s 1% - 3359880 comparisons and 5695 similarities\n"
]
}
],
"source": [
"similarity = computeSim(limit=1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We check the sanity of the results."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"90\n",
"100\n"
]
}
],
"source": [
"print(min(similarity.values()))\n",
"print(max(similarity.values()))"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"eq = [x for x in similarity.items() if x[1] >= 100]\n",
"neq = [x for x in similarity.items() if x[1] <= 90]"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"5689\n",
"5\n"
]
}
],
"source": [
"print(len(eq))\n",
"print(len(neq))"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"((230788, 235394), 100)\n",
"((230797, 230811), 90)\n"
]
}
],
"source": [
"print(eq[0])\n",
"print(neq[0])"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<a href=\"https://cdli.ucla.edu/search/search_results.php?SearchMode=Text&ObjectID=P509373\" title=\"P509373 obverse:1\" sec=\"P509373 obverse:1\">P509373 obverse:1 </a><span class=\"txtp\">[a-na] _{d}suen_-i-[din-nam]</span>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<a href=\"https://cdli.ucla.edu/search/search_results.php?SearchMode=Text&ObjectID=P510729\" title=\"P510729 obverse:1\" sec=\"P510729 obverse:1\">P510729 obverse:1 </a><span class=\"txtp\">a-na {d}suen-i-din-[nam]</span>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"A.plain(eq[0][0][0])\n",
"A.plain(eq[0][0][1])"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<a href=\"https://cdli.ucla.edu/search/search_results.php?SearchMode=Text&ObjectID=P509373\" title=\"P509373 obverse:10\" sec=\"P509373 obverse:10\">P509373 obverse:10 </a><span class=\"txtp\">_a-sza3 a-gar3_ na-ag-[ma-lum] _uru_ x x x{ki}</span>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<a href=\"https://cdli.ucla.edu/search/search_results.php?SearchMode=Text&ObjectID=P509373\" title=\"P509373 reverse:7'\" sec=\"P509373 reverse:7'\">P509373 reverse:7' </a><span class=\"txtp\">_a-[sza3 a-gar3_ na-ag]-ma-lum _uru gan2_ x x{ki}</span>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"A.plain(neq[0][0][0])\n",
"A.plain(neq[0][0][1])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Looks good.\n",
"\n",
"Now the whole computation.\n",
"\n",
"But if we have done this before, and nothing has changed, we load previous results from disk.\n",
"\n",
"If we do not find previous results, we compute them and save the results to disk."
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"PARA_DIR = f'{A.tempDir}/parallels'\n",
"\n",
"def writeResults(data, location, name):\n",
" if not os.path.exists(location):\n",
" os.makedirs(location, exist_ok=True)\n",
" path = f'{location}/{name}'\n",
" with gzip.open(path, 'wb') as f:\n",
" pickle.dump(data, f)\n",
" print(f'Data written to {path}')\n",
" \n",
"def readResults(location, name):\n",
" path = f'{location}/{name}'\n",
" if not os.path.exists(path):\n",
" print(f'File not found: {path}')\n",
" return None\n",
" with gzip.open(path, 'rb') as f:\n",
" data = pickle.load(f)\n",
" print(f'Data read from {path}')\n",
" return data"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"File not found: /Users/dirk/github/Nino-cunei/oldbabylonian/_temp/parallels/sim-1.0.4.zip\n",
"335988003 comparisons to make\n",
" 4.52s 1% - 3359880 comparisons and 5695 similarities\n",
" 8.68s 2% - 6719760 comparisons and 10604 similarities\n",
" 13s 3% - 10079640 comparisons and 16028 similarities\n",
" 17s 4% - 13439520 comparisons and 24005 similarities\n",
" 21s 5% - 16799400 comparisons and 30694 similarities\n",
" 26s 6% - 20159280 comparisons and 37992 similarities\n",
" 30s 7% - 23519160 comparisons and 44479 similarities\n",
" 34s 8% - 26879040 comparisons and 49298 similarities\n",
" 38s 9% - 30238920 comparisons and 56259 similarities\n",
" 43s 10% - 33598800 comparisons and 59520 similarities\n",
" 47s 11% - 36958680 comparisons and 64009 similarities\n",
" 52s 12% - 40318560 comparisons and 69139 similarities\n",
" 56s 13% - 43678440 comparisons and 71511 similarities\n",
" 1m 00s 14% - 47038320 comparisons and 75137 similarities\n",
" 1m 05s 15% - 50398200 comparisons and 82081 similarities\n",
" 1m 09s 16% - 53758080 comparisons and 88712 similarities\n",
" 1m 13s 17% - 57117960 comparisons and 92990 similarities\n",
" 1m 18s 18% - 60477840 comparisons and 98118 similarities\n",
" 1m 22s 19% - 63837720 comparisons and 103792 similarities\n",
" 1m 26s 20% - 67197600 comparisons and 110670 similarities\n",
" 1m 31s 21% - 70557480 comparisons and 116855 similarities\n",
" 1m 35s 22% - 73917360 comparisons and 123838 similarities\n",
" 1m 39s 23% - 77277240 comparisons and 127108 similarities\n",
" 1m 43s 24% - 80637120 comparisons and 131270 similarities\n",
" 1m 48s 25% - 83997000 comparisons and 135406 similarities\n",
" 1m 52s 26% - 87356880 comparisons and 140367 similarities\n",
" 1m 56s 27% - 90716760 comparisons and 146136 similarities\n",
" 2m 00s 28% - 94076640 comparisons and 149919 similarities\n",
" 2m 04s 29% - 97436520 comparisons and 155037 similarities\n",
" 2m 08s 30% - 100796400 comparisons and 160769 similarities\n",
" 2m 13s 31% - 104156280 comparisons and 164146 similarities\n",
" 2m 17s 32% - 107516160 comparisons and 171161 similarities\n",
" 2m 23s 33% - 110876040 comparisons and 177745 similarities\n",
" 2m 27s 34% - 114235920 comparisons and 187290 similarities\n",
" 2m 31s 35% - 117595800 comparisons and 192678 similarities\n",
" 2m 36s 36% - 120955680 comparisons and 199539 similarities\n",
" 2m 40s 37% - 124315560 comparisons and 204863 similarities\n",
" 2m 44s 38% - 127675440 comparisons and 208504 similarities\n",
" 2m 48s 39% - 131035320 comparisons and 214004 similarities\n",
" 2m 53s 40% - 134395200 comparisons and 218780 similarities\n",
" 2m 57s 41% - 137755080 comparisons and 224134 similarities\n",
" 3m 01s 42% - 141114960 comparisons and 230051 similarities\n",
" 3m 05s 43% - 144474840 comparisons and 234167 similarities\n",
" 3m 10s 44% - 147834720 comparisons and 238211 similarities\n",
" 3m 14s 45% - 151194600 comparisons and 243529 similarities\n",
" 3m 18s 46% - 154554480 comparisons and 252826 similarities\n",
" 3m 22s 47% - 157914360 comparisons and 258940 similarities\n",
" 3m 27s 48% - 161274240 comparisons and 265872 similarities\n",
" 3m 31s 49% - 164634120 comparisons and 275280 similarities\n",
" 3m 35s 50% - 167994000 comparisons and 282491 similarities\n",
" 3m 39s 51% - 171353880 comparisons and 291007 similarities\n",
" 3m 43s 52% - 174713760 comparisons and 298643 similarities\n",
" 3m 47s 53% - 178073640 comparisons and 305316 similarities\n",
" 3m 51s 54% - 181433520 comparisons and 311836 similarities\n",
" 3m 56s 55% - 184793400 comparisons and 318089 similarities\n",
" 4m 00s 56% - 188153280 comparisons and 327814 similarities\n",
" 4m 05s 57% - 191513160 comparisons and 334815 similarities\n",
" 4m 09s 58% - 194873040 comparisons and 340222 similarities\n",
" 4m 13s 59% - 198232920 comparisons and 346843 similarities\n",
" 4m 18s 60% - 201592800 comparisons and 351896 similarities\n",
" 4m 22s 61% - 204952680 comparisons and 355541 similarities\n",
" 4m 27s 62% - 208312560 comparisons and 360413 similarities\n",
" 4m 32s 63% - 211672440 comparisons and 364007 similarities\n",
" 4m 37s 64% - 215032320 comparisons and 367280 similarities\n",
" 4m 41s 65% - 218392200 comparisons and 373743 similarities\n",
" 4m 46s 66% - 221752080 comparisons and 381456 similarities\n",
" 4m 51s 67% - 225111960 comparisons and 387048 similarities\n",
" 4m 55s 68% - 228471840 comparisons and 393861 similarities\n",
" 5m 00s 69% - 231831720 comparisons and 400752 similarities\n",
" 5m 04s 70% - 235191600 comparisons and 406637 similarities\n",
" 5m 08s 71% - 238551480 comparisons and 412543 similarities\n",
" 5m 13s 72% - 241911360 comparisons and 416528 similarities\n",
" 5m 18s 73% - 245271240 comparisons and 420429 similarities\n",
" 5m 22s 74% - 248631120 comparisons and 423760 similarities\n",
" 5m 27s 75% - 251991000 comparisons and 427780 similarities\n",
" 5m 31s 76% - 255350880 comparisons and 433772 similarities\n",
" 5m 35s 77% - 258710760 comparisons and 440648 similarities\n",
" 5m 39s 78% - 262070640 comparisons and 445911 similarities\n",
" 5m 44s 79% - 265430520 comparisons and 449549 similarities\n",
" 5m 48s 80% - 268790400 comparisons and 452116 similarities\n",
" 5m 53s 81% - 272150280 comparisons and 455801 similarities\n",
" 5m 57s 82% - 275510160 comparisons and 459217 similarities\n",
" 6m 01s 83% - 278870040 comparisons and 466400 similarities\n",
" 6m 06s 84% - 282229920 comparisons and 474485 similarities\n",
" 6m 10s 85% - 285589800 comparisons and 480417 similarities\n",
" 6m 14s 86% - 288949680 comparisons and 488060 similarities\n",
" 6m 19s 87% - 292309560 comparisons and 494339 similarities\n",
" 6m 23s 88% - 295669440 comparisons and 500244 similarities\n",
" 6m 28s 89% - 299029320 comparisons and 505300 similarities\n",
" 6m 32s 90% - 302389200 comparisons and 511420 similarities\n",
" 6m 36s 91% - 305749080 comparisons and 518972 similarities\n",
" 6m 41s 92% - 309108960 comparisons and 525355 similarities\n",
" 6m 45s 93% - 312468840 comparisons and 531069 similarities\n",
" 6m 49s 94% - 315828720 comparisons and 536378 similarities\n",
" 6m 54s 95% - 319188600 comparisons and 543423 similarities\n",
" 6m 58s 96% - 322548480 comparisons and 549768 similarities\n",
" 7m 03s 97% - 325908360 comparisons and 557939 similarities\n",
" 7m 07s 98% - 329268240 comparisons and 564490 similarities\n",
" 7m 11s 99% - 332628120 comparisons and 569775 similarities\n",
" 7m 16s 100% - 335988000 comparisons and 576523 similarities\n",
" 7m 16s 100% - 335988003 comparisons and 576523 similarities\n",
"Data written to /Users/dirk/github/Nino-cunei/oldbabylonian/_temp/parallels/sim-1.0.4.zip\n"
]
}
],
"source": [
"similarity = readResults(PARA_DIR, f'sim-{A.version}.zip')\n",
"if not similarity:\n",
" similarity = computeSim()\n",
" writeResults(similarity, PARA_DIR, f'sim-{A.version}.zip')"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"576523"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(similarity)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"So, over half a million pairs of similar lines.\n",
"\n",
"Let's find out which lines have the most correspondences."
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"8344 out of 25923 lines have at least one similar line\n"
]
}
],
"source": [
"parallels = {}\n",
"\n",
"for (l, m) in similarity:\n",
" parallels.setdefault(l, set()).add(m)\n",
" parallels.setdefault(m, set()).add(l)\n",
" \n",
"print(f'{len(parallels)} out of {nLines} lines have at least one similar line')"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [],
"source": [
"rankedParallels = sorted(\n",
" parallels.items(),\n",
" key=lambda x: (-len(x[1]), x[0]),\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1005 siblings of 230789 = qi2-bi2-[ma]\n",
"1005 siblings of 230825 = qi2-bi2-ma\n",
"1005 siblings of 230843 = [qi2]-bi2#-ma\n",
"1005 siblings of 230907 = qi2-bi2-ma\n",
"1005 siblings of 230915 = qi2-bi2-ma\n",
"1005 siblings of 231003 = qi2-bi2-ma\n",
"1005 siblings of 231021 = qi2-bi2-ma\n",
"1005 siblings of 231054 = [qi2]-bi2-ma\n",
"1005 siblings of 231067 = qi2-bi2-ma\n",
"1005 siblings of 231087 = [qi2]-bi2#-ma\n"
]
}
],
"source": [
"for (l, paras) in rankedParallels[0:10]:\n",
" print(f'{len(paras):>4} siblings of {l} = {T.text(l)}')"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1005 siblings of qi2-bi2-ma\n",
"1005 siblings of qi2-bi2-ma\n",
"1005 siblings of qi2-bi2-ma\n",
"1005 siblings of qi2-bi2-ma\n",
"1005 siblings of qi2-bi2-ma\n",
"1005 siblings of qi2-[bi2]-ma\n",
" 128 siblings of {d}utu u3 {d}marduk li-ba-al-li-t,u2-ka\n",
" 128 siblings of {d}utu u3 {d}marduk li-ba-al-li-t,u2-ka\n",
" 128 siblings of {d}utu u3 {d}marduk li-ba-al#-li#-t,u2#-[ka]\n",
" 128 siblings of [{d}utu u3 {d}]marduk# li#-[ba]-al#-[li]-t,u2#-ka#\n"
]
}
],
"source": [
"for (l, paras) in rankedParallels[1000:1010]:\n",
" print(f'{len(paras):>4} siblings of {T.text(l)}')"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" 128 siblings of _{d}utu_ u3 _{d}marduk_ li-ba-al-li-t,u2-ka\n",
" 128 siblings of _{d}utu_ u3 _{d}marduk_ li-ba-al#-li#-t,u2#-ka#\n",
" 128 siblings of _{d}utu_ u3 _{d}marduk_ li-ba-al-li-t,u2-ka#\n",
" 127 siblings of {d}utu u3 {d}marduk li-ba-al-li-t,u2-ka!(KI)\n",
" 127 siblings of {d}utu u3 {d}marduk tu-ba-al-li-t,u2-ka\n",
" 125 siblings of um-ma ha-am-mu-ra-pi2-ma\n",
" 125 siblings of um-ma ha-am-mu-ra-pi2-ma\n",
" 125 siblings of um-ma ha-am-mu-ra-pi2-ma\n",
" 125 siblings of um-ma ha-am-mu#-[ra]-pi2-ma\n",
" 125 siblings of um-ma ha-am-mu#-[ra-pi2-ma]\n"
]
}
],
"source": [
"for (l, paras) in rankedParallels[1130:1140]:\n",
" print(f'{len(paras):>4} siblings of {T.text(l)}')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And how many lines have just one correspondence?\n",
"\n",
"We look at the tail of rankedParallels."
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"There are 1994 exclusively parallel pairs of lines\n"
]
}
],
"source": [
"pairs = [(x, list(paras)[0]) for (x, paras) in rankedParallels if len(paras) == 1]\n",
"print(f'There are {len(pairs)} exclusively parallel pairs of lines')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Why not make an overview of exactly how wide-spread parallel lines are?\n",
"\n",
"We count how many lines have how many parallels."
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1990 lines have n sisters where n > 100\n",
" 939 lines have n sisters where 20 < n <= 50\n",
" 775 lines have n sisters where 10 < n <= 20\n",
"2646 lines have n sisters where 2 < n <= 10\n",
"1994 lines have n sisters where n <= 2\n"
]
}
],
"source": [
"parallelCount = collections.Counter()\n",
"\n",
"buckets = (2, 10, 20, 50, 100)\n",
"\n",
"bucketRep = {}\n",
"prevBucket = None\n",
"for bucket in buckets:\n",
" if prevBucket is None:\n",
" bucketRep[bucket] = f' n <= {bucket:>3}'\n",
" elif bucket == buckets[-1]:\n",
" bucketRep[bucket] = f' n > {bucket:>3}'\n",
" else:\n",
" bucketRep[bucket] = f'{prevBucket:>3} < n <= {bucket:>3}'\n",
" prevBucket = bucket\n",
"\n",
"for (l, paras) in rankedParallels:\n",
" clusterSize = len(paras) + 1\n",
" if clusterSize > buckets[-1]:\n",
" theBucket = buckets[-1]\n",
" else:\n",
" for bucket in buckets:\n",
" if clusterSize <= bucket:\n",
" theBucket = bucket\n",
" break\n",
" parallelCount[theBucket] += 1\n",
" \n",
"for (bucket, amount) in sorted(\n",
" parallelCount.items(),\n",
" key=lambda x: (-x[0], x[1]),\n",
"):\n",
" print(f'{amount:>4} lines have n sisters where {bucketRep[bucket]}')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Add parallels to the TF dataset\n",
"\n",
"We can add this information to the Oldbabylonian dataset as an *edge feature*.\n",
"\n",
"An edge feature links two nodes and may annotate that link with a value.\n",
"\n",
"For parallels, we link each line to each of its parallel lines and we annotate that link with the similarity between\n",
"the two lines. The similarity is a percentage, and we round it to integer values.\n",
"\n",
"If *n1* is similar to *n2*, then *n2* is similar to *n1*.\n",
"In order to save space, we only add such links once.\n",
"\n",
"We can then use\n",
"[`E.sim.b(node)`](https://annotation.github.io/text-fabric/Api/Features/#edge-features)\n",
"to find all nodes that are parallel to node.\n"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [],
"source": [
"metaData = {\n",
" '': {\n",
" 'name': 'AbB Old Babylonian Cuneiform',\n",
" 'editor': 'Cale Johnson et. al.',\n",
" 'institute': 'CDL',\n",
" 'converters': 'Cale Johnson, Dirk Roorda', \n",
" },\n",
" 'sim': {\n",
" 'valueType': 'int',\n",
" 'edgeValues': True,\n",
" 'description': 'similarity between lines, as a percentage of the common material wrt the combined material',\n",
" },\n",
"}"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [],
"source": [
"simData = {}\n",
"for ((f, t), d) in similarity.items():\n",
" simData.setdefault(f, {})[t] = d"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [],
"source": [
"ghBase = os.path.expanduser('~/github')\n",
"subdir = 'parallels'\n",
"path = f'{A.org}/{A.repo}/{subdir}/tf'\n",
"location = f'{ghBase}/{path}'\n",
"module = A.version"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" | 0.53s T sim to /Users/dirk/github/Nino-cunei/oldbabylonian/parallels/tf/1.0.4\n"
]
},
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"TF.save(edgeFeatures=dict(sim=simData), metaData=metaData, location=location, module=module)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Turn the parallels feature into a module\n",
"\n",
"The new `sim` feature is a big data feature. You do not want to load it all the time.\n",
"\n",
"Here we show how to turn it into a module, so that users can easily load it in a Jupyter notebook or in the TF browser."
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"True\n",
"Create release data for Nino-cunei/oldbabylonian/parallels/tf\n",
"zip files end up in /Users/dirk/Downloads/Nino-cunei-release/oldbabylonian\n",
"zipping Nino-cunei/oldbabylonian 1.0.1 with 1 features ==> parallels-tf-1.0.1.zip\n",
"zipping Nino-cunei/oldbabylonian 1.0.4 with 1 features ==> parallels-tf-1.0.4.zip\n"
]
}
],
"source": [
"%%bash\n",
"text-fabric-zip 'Nino-cunei/oldbabylonian/parallels/tf'"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"I have added this file to a new release of the Oldbabylonian Github repo."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Use the parallels module\n",
"\n",
"We load the Oldbabylonian corpus again, but now with the parallels module."
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"TF app is up-to-date.\n",
"Using annotation/app-oldbabylonian commit 82fffd1ec080e9aada4018099c1ad7686317fb2c (=latest)\n",
" in /Users/dirk/text-fabric-data/__apps__/oldbabylonian.\n",
"No new data release available online.\n",
"Using Nino-cunei/oldbabylonian/tf - 1.0.1 rv1.1 (=latest) in /Users/dirk/text-fabric-data.\n",
"No new data release available online.\n",
"Using Nino-cunei/oldbabylonian/parallels/tf - 1.0.1 rv1.1 (=latest) in /Users/dirk/text-fabric-data.\n"
]
},
{
"data": {
"text/html": [
"<b>Documentation:</b> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs/\" title=\"provenance of Old Babylonian Letters 1900-1600: Cuneiform tablets \">OLDBABYLONIAN</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs/transcription.md\" title=\"How TF features represent ATF\">Character table</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"OLDBABYLONIAN feature documentation\">Feature docs</a> <a target=\"_blank\" href=\"https://github.com/annotation/app-oldbabylonian\" title=\"oldbabylonian API documentation\">oldbabylonian API</a> <a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Fabric/\" title=\"text-fabric-api\">Text-Fabric API 7.5.0</a> <a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Use/Search/\" title=\"Search Templates Introduction and Reference\">Search Reference</a><details open><summary><b>Loaded features</b>:</summary>\n",
"<p><b>Old Babylonian Letters 1900-1600: Cuneiform tablets </b>: <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/after.tf\">after</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/afterr.tf\">afterr</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/afteru.tf\">afteru</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/atf.tf\">atf</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/atfpost.tf\">atfpost</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/atfpre.tf\">atfpre</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/col.tf\">col</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/collated.tf\">collated</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/collection.tf\">collection</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/comment.tf\">comment</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/damage.tf\">damage</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/det.tf\">det</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/docnote.tf\">docnote</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/docnumber.tf\">docnumber</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/excised.tf\">excised</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/face.tf\">face</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/flags.tf\">flags</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/fraction.tf\">fraction</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/grapheme.tf\">grapheme</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/graphemer.tf\">graphemer</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/graphemeu.tf\">graphemeu</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/lang.tf\">lang</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/langalt.tf\">langalt</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/ln.tf\">ln</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/lnc.tf\">lnc</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/lnno.tf\">lnno</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/missing.tf\">missing</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/object.tf\">object</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/operator.tf\">operator</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/operatorr.tf\">operatorr</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/operatoru.tf\">operatoru</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/otype.tf\">otype</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/pnumber.tf\">pnumber</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/primecol.tf\">primecol</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/primeln.tf\">primeln</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/question.tf\">question</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/reading.tf\">reading</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/readingr.tf\">readingr</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/readingu.tf\">readingu</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/remarkable.tf\">remarkable</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/remarks.tf\">remarks</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/repeat.tf\">repeat</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/srcLn.tf\">srcLn</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/srcLnNum.tf\">srcLnNum</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/srcfile.tf\">srcfile</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/supplied.tf\">supplied</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/sym.tf\">sym</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/symr.tf\">symr</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/symu.tf\">symu</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/trans.tf\">trans</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/translation@en.tf\">translation@ll</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/type.tf\">type</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/uncertain.tf\">uncertain</a> <a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/volume.tf\">volume</a> <b><i><a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/blob/master/docs//transcription.md\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/tf/1.0.1/oslots.tf\">oslots</a></i></b> </p><p><b>Nino-cunei/oldbabylonian/parallels/tf</b>: <b><i><a target=\"_blank\" href=\"https://github.com/Nino-cunei/oldbabylonian/tree/master/parallels/tf\" title=\"/Users/dirk/text-fabric-data/Nino-cunei/oldbabylonian/parallels/tf/1.0.1/sim.tf\">sim</a></i></b> </p></details>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<style>\n",
"@font-face {\n",
" font-family: \"Santakku\";\n",
" src:\n",
" local(\"Santakku.ttf\"),\n",
" url(\"https://github.com/annotation/text-fabric/blob/master/tf/server/static/fonts/Santakku.woff?raw=true\");\n",
"}\n",
".txtn,.txtn a:visited,.txtn a:link {\n",
" font-family: sans-serif;\n",
" font-size: normal;\n",
" text-decoration: none;\n",
"}\n",
".txtp,.txtp a:visited,.txtp a:link {\n",
" font-family: monospace;\n",
" font-size: normal;\n",
" text-decoration: none;\n",
"}\n",
".txtr,.txtr a:visited,.txtr a:link {\n",
" font-family: serif;\n",
" font-size: large;\n",
" text-decoration: none;\n",
"}\n",
".txtu,.txtu a:visited,.txtu a:link {\n",
" font-family: Santakku;\n",
" font-size: x-large;\n",
" text-decoration: none;\n",
"}\n",
".features {\n",
" font-family: monospace;\n",
" font-size: medium;\n",
" font-weight: bold;\n",
" color: #0a6611;\n",
" display: flex;\n",
" flex-flow: column nowrap;\n",
" padding: 0.1em;\n",
" margin: 0.1em;\n",
" direction: ltr;\n",
"}\n",
".features div,.features span {\n",
" padding: 0;\n",
" margin: -0.1rem 0;\n",
"}\n",
".features .f {\n",
" font-family: sans-serif;\n",
" font-size: x-small;\n",
" font-weight: normal;\n",
" color: #5555bb;\n",
"}\n",
".features .xft {\n",
" color: #000000;\n",
" background-color: #eeeeee;\n",
" font-size: medium;\n",
" margin: 0.1em 0em;\n",
"}\n",
".features .xft .f {\n",
" color: #000000;\n",
" background-color: #eeeeee;\n",
" font-style: italic;\n",
" font-size: small;\n",
" font-weight: normal;\n",
"}\n",
".pnum {\n",
" font-family: sans-serif;\n",
" font-size: small;\n",
" font-weight: bold;\n",
" color: #444444;\n",
"}\n",
".nd {\n",
" font-family: monospace;\n",
" font-size: x-small;\n",
" color: #999999;\n",
"}\n",
".meta {\n",
" display: flex;\n",
" justify-content: flex-start;\n",
" align-items: flex-start;\n",
" align-content: flex-start;\n",
" flex-flow: row nowrap;\n",
"}\n",
".features,.comments {\n",
" display: flex;\n",
" justify-content: flex-start;\n",
" align-items: flex-start;\n",
" align-content: flex-start;\n",
" flex-flow: column nowrap;\n",
"}\n",
".children {\n",
" display: flex;\n",
" justify-content: flex-start;\n",
" align-items: flex-start;\n",
" align-content: flex-start;\n",
" border: 0;\n",
" background-color: #ffffff;\n",
"}\n",
".children.document {\n",
" flex-flow: column nowrap;\n",
"}\n",
".children.face {\n",
" flex-flow: column nowrap;\n",
"}\n",
".children.line {\n",
" align-items: stretch;\n",
" flex-flow: row nowrap;\n",
"}\n",
".children.cluster {\n",
" flex-flow: row wrap;\n",
"}\n",
".children.line {\n",
" align-items: stretch;\n",
" flex-flow: row nowrap;\n",
"}\n",
".children.sign {\n",
" flex-flow: column nowrap;\n",
"}\n",
".contnr {\n",
" width: fit-content;\n",
"}\n",
".contnr.document,.contnr.face,\n",
".contnr.line,\n",
".contnr.cluster,\n",
".contnr.word,\n",
".contnr.sign {\n",
" display: flex;\n",
" justify-content: flex-start;\n",
" align-items: flex-start;\n",
" align-content: flex-start;\n",
" flex-flow: column nowrap;\n",
" background: #ffffff none repeat scroll 0 0;\n",
" padding: 0.5em 0.1em 0.1em 0.1em;\n",
" margin: 0.8em 0.1em 0.1em 0.1em;\n",
" border-radius: 0.2em;\n",
" border-style: solid;\n",
" border-width: 0.2em;\n",
" font-size: small;\n",
"}\n",
".contnr.document,.contnr.face {\n",
" border-color: #bb8800;\n",
"}\n",
".contnr.line {\n",
" border-color: #0088bb;\n",
"}\n",
".contnr.cluster {\n",
" flex-flow: row wrap;\n",
" border: 0;\n",
"}\n",
".contnr.word {\n",
" border-color: #44bbff;\n",
"}\n",
".contnr.sign {\n",
" border-color: #bbbbbb;\n",
"}\n",
".contnr.hl {\n",
" background-color: #ffee66;\n",
"}\n",
".lbl.document,.lbl.face,\n",
".lbl.line,\n",
".lbl.cluster,\n",
".lbl.sign,.lbl.word {\n",
" margin-top: -1.2em;\n",
" margin-left: 1em;\n",
" background: #ffffff none repeat scroll 0 0;\n",
" padding: 0 0.3em;\n",
" border-style: solid;\n",
" font-size: small;\n",
" display: block;\n",
"}\n",
".lbl.document,.lbl.face {\n",
" border-color: #bb8800;\n",
" border-width: 0.3em;\n",
" border-radius: 0.3em;\n",
" color: #bb8800;\n",
"}\n",
".lbl.line {\n",
" border-color: #0088bb;\n",
" border-width: 0.3em;\n",
" border-radius: 0.3em;\n",
" color: #0088bb;\n",
"}\n",
".lbl.cluster {\n",
" border-color: #dddddd;\n",
" border-width: 0.2em;\n",
" border-radius: 0.2em;\n",
" color: #0000cc;\n",
"}\n",
".lbl.word {\n",
" border-color: #44bbff;\n",
" border-width: 0.2em;\n",
" border-radius: 0.2em;\n",
" font-size: medium;\n",
" color: #000000;\n",
"}\n",
".lbl.sign {\n",
" border-color: #bbbbbb;\n",
" border-width: 0.1em;\n",
" border-radius: 0.1em;\n",
" font-size: small;\n",
" color: #000000;\n",
"}\n",
".op {\n",
" padding: 0.5em 0.1em 0.1em 0.1em;\n",
" margin: 0.8em 0.1em 0.1em 0.1em;\n",
" font-family: monospace;\n",
" font-size: x-large;\n",
" font-weight: bold;\n",
"}\n",
".name {\n",
" font-family: monospace;\n",
" font-size: medium;\n",
" color: #0000bb;\n",
"}\n",
".period {\n",
" font-family: monospace;\n",
" font-size: medium;\n",
" font-weight: bold;\n",
" color: #0000bb;\n",
"}\n",
".text {\n",
" font-family: sans-serif;\n",
" font-size: x-small;\n",
" color: #000000;\n",
"}\n",
".srcln {\n",
" font-family: monospace;\n",
" font-size: medium;\n",
" color: #000000;\n",
"}\n",
".srclnnum {\n",
" font-family: monospace;\n",
" font-size: x-small;\n",
" color: #0000bb;\n",
"}\n",
".comment {\n",
" color: #7777dd;\n",
" font-family: monospace;\n",
" font-size: small;\n",
"}\n",
".operator {\n",
" color: #ff77ff;\n",
" font-size: large;\n",
"}\n",
"/* LANGUAGE: superscript and subscript */\n",
"\n",
"/* cluster */\n",
".det {\n",
" vertical-align: super;\n",
"}\n",
"/* cluster */\n",
".langalt {\n",
" vertical-align: sub;\n",
"}\n",
"/* REDACTIONAL: line over or under */\n",
"\n",
"/* flag */\n",
".collated {\n",
" font-weight: bold;\n",
" text-decoration: underline;\n",
"}\n",
"/* cluster */\n",
".excised {\n",
" color: #dd0000;\n",
" text-decoration: line-through;\n",
"}\n",
"/* cluster */\n",
".supplied {\n",
" color: #0000ff;\n",
" text-decoration: overline;\n",
"}\n",
"/* flag */\n",
".remarkable {\n",
" font-weight: bold;\n",
" text-decoration: overline;\n",
"}\n",
"\n",
"/* UNSURE: italic*/\n",
"\n",
"/* cluster */\n",
".uncertain {\n",
" font-style: italic\n",
"}\n",
"/* flag */\n",
".question {\n",
" font-weight: bold;\n",
" font-style: italic\n",
"}\n",
"\n",
"/* BROKEN: text-shadow */\n",
"\n",
"/* cluster */\n",
".missing {\n",
" color: #999999;\n",
" text-shadow: #bbbbbb 1px 1px;\n",
"}\n",
"/* flag */\n",
".damage {\n",
" font-weight: bold;\n",
" color: #999999;\n",
" text-shadow: #bbbbbb 1px 1px;\n",
"}\n",
".empty {\n",
" color: #ff0000;\n",
"}\n",
"\n",
"span.hldot {\n",
"\tbackground-color: var(--hl-strong);\n",
"\tborder: 0.2rem solid var(--hl-rim);\n",
"\tborder-radius: 0.4rem;\n",
"\t/*\n",
"\tdisplay: inline-block;\n",
"\twidth: 0.8rem;\n",
"\theight: 0.8rem;\n",
"\t*/\n",
"}\n",
"span.hl {\n",
"\tbackground-color: var(--hl-strong);\n",
"\tborder-width: 0;\n",
"\tborder-radius: 0.1rem;\n",
"\tborder-style: solid;\n",
"}\n",
"\n",
"span.hlup {\n",
"\tborder-color: var(--hl-dark);\n",
"\tborder-width: 0.1rem;\n",
"\tborder-style: solid;\n",
"\tborder-radius: 0.2rem;\n",
" padding: 0.2rem;\n",
"}\n",
"\n",
":root {\n",
"\t--hl-strong: hsla( 60, 100%, 70%, 0.9 );\n",
"\t--hl-rim: hsla( 55, 100%, 60%, 0.9 );\n",
"\t--hl-dark: hsla( 55, 100%, 40%, 0.9 );\n",
"}\n",
"</style>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<details open><summary><b>API members</b>:</summary>\n",
"<a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Computed/#computed-data\" title=\"doc\">C Computed</a>, <a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Computed/#computed-data\" title=\"doc\">Call AllComputeds</a>, <a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Computed/#computed-data\" title=\"doc\">Cs ComputedString</a><br/>\n",
"<a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Features/#edge-features\" title=\"doc\">E Edge</a>, <a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Features/#edge-features\" title=\"doc\">Eall AllEdges</a>, <a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Features/#edge-features\" title=\"doc\">Es EdgeString</a><br/>\n",
"<a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Fabric/#loading\" title=\"doc\">ensureLoaded</a>, <a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Fabric/#loading\" title=\"doc\">TF</a>, <a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Fabric/#loading\" title=\"doc\">ignored</a>, <a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Fabric/#loading\" title=\"doc\">loadLog</a><br/>\n",
"<a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Locality/#locality\" title=\"doc\">L Locality</a><br/>\n",
"<a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Misc/#messaging\" title=\"doc\">cache</a>, <a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Misc/#messaging\" title=\"doc\">error</a>, <a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Misc/#messaging\" title=\"doc\">indent</a>, <a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Misc/#messaging\" title=\"doc\">info</a>, <a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Misc/#messaging\" title=\"doc\">reset</a><br/>\n",
"<a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Nodes/#navigating-nodes\" title=\"doc\">N Nodes</a>, <a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Nodes/#navigating-nodes\" title=\"doc\">sortKey</a>, <a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Nodes/#navigating-nodes\" title=\"doc\">sortKeyTuple</a>, <a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Nodes/#navigating-nodes\" title=\"doc\">otypeRank</a>, <a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Nodes/#navigating-nodes\" title=\"doc\">sortNodes</a><br/>\n",
"<a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Features/#node-features\" title=\"doc\">F Feature</a>, <a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Features/#node-features\" title=\"doc\">Fall AllFeatures</a>, <a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Features/#node-features\" title=\"doc\">Fs FeatureString</a><br/>\n",
"<a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Search/#search\" title=\"doc\">S Search</a><br/>\n",
"<a target=\"_blank\" href=\"https://annotation.github.io/text-fabric/Api/Text/#text\" title=\"doc\">T Text</a></details>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"A = use('oldbabylonian', hoist=globals(), check=True, mod='Nino-cunei/oldbabylonian/parallels/tf')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Lo and behold: you see the parallels module listed with one feature: `sim`. It is in *italics*, which indicates\n",
"it is an edge feature.\n",
"\n",
"We just do a quick check here and in another notebook we study parallels a bit more, using the feature `sim`.\n",
"\n",
"We count how many similar pairs their are, and how many 100% similar pairs there are."
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" 1.55s 574579 results\n"
]
}
],
"source": [
"query = '''\n",
"line\n",
"-sim> line\n",
"'''\n",
"results = A.search(query)"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" 1.58s 573397 results\n"
]
}
],
"source": [
"query = '''\n",
"line\n",
"-sim=100> line\n",
"'''\n",
"results = A.search(query)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Remarkably, most of the pairs are 100 percent similar. Let's show just a few:"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<table><tr><th>n</th><th>p</th><th>line</th><th>line</th></tr>\n",
"<tr><td>1</td><td> <a href=\"https://cdli.ucla.edu/search/search_results.php?SearchMode=Text&ObjectID=P510729\" title=\"show this document on CDLI\" sec=\"P510729 obverse:1\">P510729 obverse:1</a></td><td><span class=\"txtp\">[a-na] _{d}suen_-i-[din-nam]</span> <i>230787</i> </td><td><span class=\"txtp\">a-na {d}suen-i-din-[nam]</span> <i>235393</i> </td></tr>\n",
"<tr><td>2</td><td> <a href=\"https://cdli.ucla.edu/search/search_results.php?SearchMode=Text&ObjectID=P510730\" title=\"show this document on CDLI\" sec=\"P510730 obverse:1\">P510730 obverse:1</a></td><td><span class=\"txtp\">[a-na] _{d}suen_-i-[din-nam]</span> <i>230787</i> </td><td><span class=\"txtp\">a-na {d}suen-i-din-nam</span> <i>235420</i> </td></tr>\n",
"<tr><td>3</td><td> <a href=\"https://cdli.ucla.edu/search/search_results.php?SearchMode=Text&ObjectID=P510731\" title=\"show this document on CDLI\" sec=\"P510731 obverse:1\">P510731 obverse:1</a></td><td><span class=\"txtp\">[a-na] _{d}suen_-i-[din-nam]</span> <i>230787</i> </td><td><span class=\"txtp\">a-na {d}suen-i-din-nam</span> <i>235433</i> </td></tr>\n",
"<tr><td>4</td><td> <a href=\"https://cdli.ucla.edu/search/search_results.php?SearchMode=Text&ObjectID=P510732\" title=\"show this document on CDLI\" sec=\"P510732 obverse:1\">P510732 obverse:1</a></td><td><span class=\"txtp\">[a-na] _{d}suen_-i-[din-nam]</span> <i>230787</i> </td><td><span class=\"txtp\">a-na {d}suen#-i-din-nam#</span> <i>235463</i> </td></tr>\n",
"<tr><td>5</td><td> <a href=\"https://cdli.ucla.edu/search/search_results.php?SearchMode=Text&ObjectID=P497779\" title=\"show this document on CDLI\" sec=\"P497779 obverse:1\">P497779 obverse:1</a></td><td><span class=\"txtp\">[a-na] _{d}suen_-i-[din-nam]</span> <i>230787</i> </td><td><span class=\"txtp\">a-na {d}suen#-[i]-din-nam</span> <i>235477</i> </td></tr>\n",
"<tr><td>6</td><td> <a href=\"https://cdli.ucla.edu/search/search_results.php?SearchMode=Text&ObjectID=P510733\" title=\"show this document on CDLI\" sec=\"P510733 obverse:1\">P510733 obverse:1</a></td><td><span class=\"txtp\">[a-na] _{d}suen_-i-[din-nam]</span> <i>230787</i> </td><td><span class=\"txtp\">[a-na] {d}[suen-i-din-nam]</span> <i>235502</i> </td></tr>\n",
"<tr><td>7</td><td> <a href=\"https://cdli.ucla.edu/search/search_results.php?SearchMode=Text&ObjectID=P510734\" title=\"show this document on CDLI\" sec=\"P510734 obverse:1\">P510734 obverse:1</a></td><td><span class=\"txtp\">[a-na] _{d}suen_-i-[din-nam]</span> <i>230787</i> </td><td><span class=\"txtp\">[a-na {d}suen-i-din-nam]</span> <i>235528</i> </td></tr>\n",
"<tr><td>8</td><td> <a href=\"https://cdli.ucla.edu/search/search_results.php?SearchMode=Text&ObjectID=P510736\" title=\"show this document on CDLI\" sec=\"P510736 obverse:1\">P510736 obverse:1</a></td><td><span class=\"txtp\">[a-na] _{d}suen_-i-[din-nam]</span> <i>230787</i> </td><td><span class=\"txtp\">a-na {d}suen-i-din-nam</span> <i>235584</i> </td></tr>\n",
"<tr><td>9</td><td> <a href=\"https://cdli.ucla.edu/search/search_results.php?SearchMode=Text&ObjectID=P510737\" title=\"show this document on CDLI\" sec=\"P510737 obverse:1\">P510737 obverse:1</a></td><td><span class=\"txtp\">[a-na] _{d}suen_-i-[din-nam]</span> <i>230787</i> </td><td><span class=\"txtp\">a-na {d}suen-i-din-nam#</span> <i>235614</i> </td></tr>\n",
"<tr><td>10</td><td> <a href=\"https://cdli.ucla.edu/search/search_results.php?SearchMode=Text&ObjectID=P370926\" title=\"show this document on CDLI\" sec=\"P370926 obverse:1\">P370926 obverse:1</a></td><td><span class=\"txtp\">[a-na] _{d}suen_-i-[din-nam]</span> <i>230787</i> </td><td><span class=\"txtp\">a-na {d}suen-i-din-nam</span> <i>235628</i> </td></tr></table>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"A.table(results, start=1, end=10, withNodes=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"There is also a lower level way to work with edge features.\n",
"\n",
"We can list all edges going out from a reference node.\n",
"What we see is tuple of pairs: the target node and the similarity between the reference node and that target node."
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"((235919, 100),\n",
" (235983, 100),\n",
" (235998, 100),\n",
" (236046, 100),\n",
" (236063, 100),\n",
" (236077, 100),\n",
" (236115, 100),\n",
" (236123, 100),\n",
" (236195, 100),\n",
" (236222, 100),\n",
" (236277, 100),\n",
" (236320, 100),\n",
" (243205, 100),\n",
" (244633, 100),\n",
" (245089, 100),\n",
" (246839, 100),\n",
" (246870, 100),\n",
" (246892, 100),\n",
" (246911, 100),\n",
" (246924, 100),\n",
" (246948, 100),\n",
" (246961, 100),\n",
" (247114, 100),\n",
" (247136, 100),\n",
" (247235, 100),\n",
" (247263, 100),\n",
" (247272, 100),\n",
" (247317, 100),\n",
" (247345, 100),\n",
" (247355, 100),\n",
" (247371, 100),\n",
" (247386, 100),\n",
" (247415, 100),\n",
" (247436, 100),\n",
" (247459, 100),\n",
" (247542, 100),\n",
" (247696, 100),\n",
" (247708, 100),\n",
" (247733, 100),\n",
" (247749, 100),\n",
" (247794, 100),\n",
" (247806, 100),\n",
" (247829, 100),\n",
" (247867, 100),\n",
" (247885, 100),\n",
" (248014, 100),\n",
" (248041, 100),\n",
" (248118, 100),\n",
" (248172, 100),\n",
" (248381, 100),\n",
" (248407, 100),\n",
" (254854, 100),\n",
" (256079, 100))"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"refNode = 235900\n",
"\n",
"E.sim.f(refNode)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Likewise, we can observe the nodes that target the reference node:"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"((230787, 100),\n",
" (235393, 100),\n",
" (235420, 100),\n",
" (235433, 100),\n",
" (235463, 100),\n",
" (235477, 100),\n",
" (235502, 100),\n",
" (235528, 100),\n",
" (235584, 100),\n",
" (235614, 100),\n",
" (235628, 100),\n",
" (235656, 100),\n",
" (235683, 100),\n",
" (235729, 100),\n",
" (235755, 100),\n",
" (235777, 100),\n",
" (235810, 100),\n",
" (235821, 100),\n",
" (235837, 100),\n",
" (235850, 100),\n",
" (235864, 100),\n",
" (235878, 100))"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"E.sim.t(refNode)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Both sets of nodes are similar to the reference node and it is inconvenient to use both `.f()` and `.t()` to get the similar lines.\n",
"\n",
"But there is another way:"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"((230787, 100),\n",
" (235393, 100),\n",
" (235420, 100),\n",
" (235433, 100),\n",
" (235463, 100),\n",
" (235477, 100),\n",
" (235502, 100),\n",
" (235528, 100),\n",
" (235584, 100),\n",
" (235614, 100),\n",
" (235628, 100),\n",
" (235656, 100),\n",
" (235683, 100),\n",
" (235729, 100),\n",
" (235755, 100),\n",
" (235777, 100),\n",
" (235810, 100),\n",
" (235821, 100),\n",
" (235837, 100),\n",
" (235850, 100),\n",
" (235864, 100),\n",
" (235878, 100),\n",
" (235919, 100),\n",
" (235983, 100),\n",
" (235998, 100),\n",
" (236046, 100),\n",
" (236063, 100),\n",
" (236077, 100),\n",
" (236115, 100),\n",
" (236123, 100),\n",
" (236195, 100),\n",
" (236222, 100),\n",
" (236277, 100),\n",
" (236320, 100),\n",
" (243205, 100),\n",
" (244633, 100),\n",
" (245089, 100),\n",
" (246839, 100),\n",
" (246870, 100),\n",
" (246892, 100),\n",
" (246911, 100),\n",
" (246924, 100),\n",
" (246948, 100),\n",
" (246961, 100),\n",
" (247114, 100),\n",
" (247136, 100),\n",
" (247235, 100),\n",
" (247263, 100),\n",
" (247272, 100),\n",
" (247317, 100),\n",
" (247345, 100),\n",
" (247355, 100),\n",
" (247371, 100),\n",
" (247386, 100),\n",
" (247415, 100),\n",
" (247436, 100),\n",
" (247459, 100),\n",
" (247542, 100),\n",
" (247696, 100),\n",
" (247708, 100),\n",
" (247733, 100),\n",
" (247749, 100),\n",
" (247794, 100),\n",
" (247806, 100),\n",
" (247829, 100),\n",
" (247867, 100),\n",
" (247885, 100),\n",
" (248014, 100),\n",
" (248041, 100),\n",
" (248118, 100),\n",
" (248172, 100),\n",
" (248381, 100),\n",
" (248407, 100),\n",
" (254854, 100),\n",
" (256079, 100))"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"E.sim.b(refNode)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's make sure that `.b()` gives the combination of `.f()` and `.t()`."
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"the intersection of f and t is set()\n",
"t | f = b ? True\n"
]
}
],
"source": [
"f = {x[0] for x in E.sim.f(refNode)}\n",
"b = {x[0] for x in E.sim.b(refNode)}\n",
"t = {x[0] for x in E.sim.t(refNode)}\n",
"\n",
"# are f and t disjoint ?\n",
"\n",
"print(f'the intersection of f and t is {f & t}')\n",
"\n",
"# is b the union of f and t ?\n",
"\n",
"print(f't | f = b ? {f | t == b}')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"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.7.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}