{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "\n", "# Tutorial\n", "\n", "This notebook gets you started with using\n", "[Text-Fabric](https://annotation.github.io/text-fabric/) for coding in the Hebrew Bible.\n", "\n", "If you are totally new to Text-Fabric, it might be helpful to read about the underlying\n", "[data model](https://annotation.github.io/text-fabric/Model/Data-Model/) first.\n", "\n", "Short introductions to other TF datasets:\n", "\n", "* [Dead Sea Scrolls](https://nbviewer.jupyter.org/github/annotation/tutorials/blob/master/lorentz2020/dss.ipynb),\n", "* [Old Babylonian Letters](https://nbviewer.jupyter.org/github/annotation/tutorials/blob/master/lorentz2020/oldbabylonian.ipynb),\n", "or the \n", "* [Q'uran](https://nbviewer.jupyter.org/github/annotation/tutorials/blob/master/lorentz2020/quran.ipynb)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Export to Excel\n", "\n", "In a notebook, you can perform searches and view them in a tabular display and zoom in on items with\n", "pretty displays.\n", "\n", "But there are times that you want to take your results outside Text-Fabric, outside a notebook, outside Python, and just\n", "work with them in other programs, such as Excel.\n", "\n", "You want to do that not only with query results, but with all kinds of lists of tuples of nodes.\n", "\n", "There is a function for that, `A.export()`, and here we show what it can do." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%load_ext autoreload\n", "%autoreload 2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Incantation\n", "\n", "The ins and outs of installing Text-Fabric, getting the corpus, and initializing a notebook are\n", "explained in the [start tutorial](start.ipynb)." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2018-05-24T10:06:39.818664Z", "start_time": "2018-05-24T10:06:39.796588Z" } }, "outputs": [], "source": [ "import os\n", "from tf.app import use" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Using TF-app in /Users/dirk/github/annotation/app-bhsa/code:\n", "\trepo clone offline under ~/github (local github)\n", "Using data in /Users/dirk/github/etcbc/bhsa/tf/c:\n", "\trepo clone offline under ~/github (local github)\n", "Using data in /Users/dirk/github/etcbc/phono/tf/c:\n", "\trepo clone offline under ~/github (local github)\n", "Using data in /Users/dirk/github/etcbc/parallels/tf/c:\n", "\trepo clone offline under ~/github (local github)\n", " | 0.00s Dataset without structure sections in otext:no structure functions in the T-API\n" ] }, { "data": { "text/html": [ "Documentation: BHSA Character table Feature docs bhsa API Text-Fabric API 8.0.0 Search Reference
Loaded features:\n", "

Parallel Passages: crossref

BHSA = Biblia Hebraica Stuttgartensia Amstelodamensis: book book@ll chapter code det domain freq_lex function g_cons g_cons_utf8 g_lex g_lex_utf8 g_word g_word_utf8 gloss gn label language lex lex_utf8 ls nametype nme nu number otype pargr pdp pfm prs prs_gn prs_nu prs_ps ps qere qere_trailer qere_trailer_utf8 qere_utf8 rank_lex rela sp st tab trailer trailer_utf8 txt typ uvf vbe vbs verse voc_lex voc_lex_utf8 vs vt mother oslots

Phonetic Transcriptions: phono phono_trailer

" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
API members:\n", "C Computed, Call AllComputeds, Cs ComputedString
\n", "E Edge, Eall AllEdges, Es EdgeString
\n", "ensureLoaded, TF, ignored, loadLog
\n", "L Locality
\n", "cache, error, indent, info, isSilent, reset, setSilent, silentOff, silentOn, warning
\n", "N Nodes, sortKey, sortKeyTuple, otypeRank, sortNodes
\n", "F Feature, Fall AllFeatures, Fs FeatureString
\n", "S Search
\n", "T Text
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "#A = use('bhsa', hoist=globals())\n", "A = use('bhsa:clone', checkout=\"clone\", hoist=globals())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Inspect the contents of a file\n", "We write a function that can peek into file on your system, and show the first few lines.\n", "We'll use it to inspect the exported files that we are going to produce." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "EXPORT_FILE = os.path.expanduser('~/Downloads/results.tsv')\n", "UPTO = 10\n", "\n", "def checkout():\n", " with open(EXPORT_FILE, encoding='utf_16') as fh:\n", " for (i, line) in enumerate(fh):\n", " if i >= UPTO:\n", " break\n", " print(line)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Encoding\n", "\n", "Our exported `.tsv` files open in Excel without hassle, even if they contain non-latin characters.\n", "That is because TF writes such files in an\n", "encoding that works well with Excel: `utf_16_le`.\n", "You can just open them in Excel, there is no need for conversion before or after opening these files.\n", "\n", "Should you want to process these files by means of a (Python) program, \n", "take care to read them with encoding `utf_16`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Example query\n", "\n", "We first run a query in order to export the results." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2018-05-24T07:46:55.998382Z", "start_time": "2018-05-24T07:46:55.137956Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 0.55s 1868 results\n" ] } ], "source": [ "query = '''\n", "book book=Samuel_I\n", " clause\n", " word sp=nmpr\n", "'''\n", "results = A.search(query)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Bare export\n", "\n", "You can export the table of results to Excel.\n", "\n", "The following command writes a tab-separated file `results.tsv` to your downloads directory.\n", "\n", "You can specify arguments `toDir=directory` and `toFile=file name` to write to a different file.\n", "If the directory does not exist, it will be created.\n", "\n", "We stick to the default, however." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "A.export(results)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Check out the contents:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "R\tS1\tS2\tS3\tNODE1\tTYPE1\tbook1\tNODE2\tTYPE2\tTEXT2\tNODE3\tTYPE3\tTEXT3\tsp3\n", "\n", "1\t1_Samuel\t1\t1\t426592\tbook\tSamuel_I\t453942\tclause\tוַיְהִי֩ אִ֨ישׁ אֶחָ֜ד מִן־הָרָמָתַ֛יִם צֹופִ֖ים מֵהַ֣ר אֶפְרָ֑יִם \t141547\tword\tאֶפְרָ֑יִם \tnmpr\n", "\n", "2\t1_Samuel\t1\t1\t426592\tbook\tSamuel_I\t453943\tclause\tוּשְׁמֹ֡ו אֶ֠לְקָנָה בֶּן־יְרֹחָ֧ם בֶּן־אֱלִיה֛וּא בֶּן־תֹּ֥חוּ בֶן־צ֖וּף אֶפְרָתִֽי׃ \t141550\tword\tאֶ֠לְקָנָה \tnmpr\n", "\n", "3\t1_Samuel\t1\t1\t426592\tbook\tSamuel_I\t453943\tclause\tוּשְׁמֹ֡ו אֶ֠לְקָנָה בֶּן־יְרֹחָ֧ם בֶּן־אֱלִיה֛וּא בֶּן־תֹּ֥חוּ בֶן־צ֖וּף אֶפְרָתִֽי׃ \t141552\tword\tיְרֹחָ֧ם \tnmpr\n", "\n", "4\t1_Samuel\t1\t1\t426592\tbook\tSamuel_I\t453943\tclause\tוּשְׁמֹ֡ו אֶ֠לְקָנָה בֶּן־יְרֹחָ֧ם בֶּן־אֱלִיה֛וּא בֶּן־תֹּ֥חוּ בֶן־צ֖וּף אֶפְרָתִֽי׃ \t141554\tword\tאֱלִיה֛וּא \tnmpr\n", "\n", "5\t1_Samuel\t1\t1\t426592\tbook\tSamuel_I\t453943\tclause\tוּשְׁמֹ֡ו אֶ֠לְקָנָה בֶּן־יְרֹחָ֧ם בֶּן־אֱלִיה֛וּא בֶּן־תֹּ֥חוּ בֶן־צ֖וּף אֶפְרָתִֽי׃ \t141556\tword\tתֹּ֥חוּ \tnmpr\n", "\n", "6\t1_Samuel\t1\t1\t426592\tbook\tSamuel_I\t453943\tclause\tוּשְׁמֹ֡ו אֶ֠לְקָנָה בֶּן־יְרֹחָ֧ם בֶּן־אֱלִיה֛וּא בֶּן־תֹּ֥חוּ בֶן־צ֖וּף אֶפְרָתִֽי׃ \t141558\tword\tצ֖וּף \tnmpr\n", "\n", "7\t1_Samuel\t1\t2\t426592\tbook\tSamuel_I\t453945\tclause\tשֵׁ֤ם אַחַת֙ חַנָּ֔ה \t141566\tword\tחַנָּ֔ה \tnmpr\n", "\n", "8\t1_Samuel\t1\t2\t426592\tbook\tSamuel_I\t453946\tclause\tוְשֵׁ֥ם הַשֵּׁנִ֖ית פְּנִנָּ֑ה \t141571\tword\tפְּנִנָּ֑ה \tnmpr\n", "\n", "9\t1_Samuel\t1\t2\t426592\tbook\tSamuel_I\t453948\tclause\tלִפְנִנָּה֙ יְלָדִ֔ים \t141575\tword\tפְנִנָּה֙ \tnmpr\n", "\n" ] } ], "source": [ "checkout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You see the following columns:\n", "\n", "* **R** the sequence number of the result tuple in the result list\n", "* **S1 S2 S3** the section as book, chapter, verse, in separate columns\n", "* **NODEi TYPEi** the node and its type, for each node **i** in the result tuple\n", "* **TEXTi** the full text of node **i**, if the node type admits a concise text representation\n", "* **sp3** the value of feature **3**, since our query mentions the feature `sp` on node 3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Richer exports\n", "\n", "If we want to see the clause type (feature `typ`) and the word gender (feature `gn`) as well, we must mention them\n", "in the query. \n", "\n", "We can do so as follows:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "ExecuteTime": { "end_time": "2018-05-24T07:46:55.998382Z", "start_time": "2018-05-24T07:46:55.137956Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 1.03s 1868 results\n" ] } ], "source": [ "query = '''\n", "book book=Samuel_I\n", " clause typ*\n", " word sp=nmpr gn*\n", "'''\n", "results = A.search(query)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The same number of results as before. \n", "The `*` is a trivial condition, it is always true.\n", "\n", "We do the export again and peek at the results." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "R\tS1\tS2\tS3\tNODE1\tTYPE1\tbook1\tNODE2\tTYPE2\tTEXT2\ttyp2\tNODE3\tTYPE3\tTEXT3\tgn3\tsp3\n", "\n", "1\t1_Samuel\t1\t1\t426592\tbook\tSamuel_I\t453942\tclause\tוַיְהִי֩ אִ֨ישׁ אֶחָ֜ד מִן־הָרָמָתַ֛יִם צֹופִ֖ים מֵהַ֣ר אֶפְרָ֑יִם \tWayX\t141547\tword\tאֶפְרָ֑יִם \tunknown\tnmpr\n", "\n", "2\t1_Samuel\t1\t1\t426592\tbook\tSamuel_I\t453943\tclause\tוּשְׁמֹ֡ו אֶ֠לְקָנָה בֶּן־יְרֹחָ֧ם בֶּן־אֱלִיה֛וּא בֶּן־תֹּ֥חוּ בֶן־צ֖וּף אֶפְרָתִֽי׃ \tNmCl\t141550\tword\tאֶ֠לְקָנָה \tm\tnmpr\n", "\n", "3\t1_Samuel\t1\t1\t426592\tbook\tSamuel_I\t453943\tclause\tוּשְׁמֹ֡ו אֶ֠לְקָנָה בֶּן־יְרֹחָ֧ם בֶּן־אֱלִיה֛וּא בֶּן־תֹּ֥חוּ בֶן־צ֖וּף אֶפְרָתִֽי׃ \tNmCl\t141552\tword\tיְרֹחָ֧ם \tm\tnmpr\n", "\n", "4\t1_Samuel\t1\t1\t426592\tbook\tSamuel_I\t453943\tclause\tוּשְׁמֹ֡ו אֶ֠לְקָנָה בֶּן־יְרֹחָ֧ם בֶּן־אֱלִיה֛וּא בֶּן־תֹּ֥חוּ בֶן־צ֖וּף אֶפְרָתִֽי׃ \tNmCl\t141554\tword\tאֱלִיה֛וּא \tm\tnmpr\n", "\n", "5\t1_Samuel\t1\t1\t426592\tbook\tSamuel_I\t453943\tclause\tוּשְׁמֹ֡ו אֶ֠לְקָנָה בֶּן־יְרֹחָ֧ם בֶּן־אֱלִיה֛וּא בֶּן־תֹּ֥חוּ בֶן־צ֖וּף אֶפְרָתִֽי׃ \tNmCl\t141556\tword\tתֹּ֥חוּ \tm\tnmpr\n", "\n", "6\t1_Samuel\t1\t1\t426592\tbook\tSamuel_I\t453943\tclause\tוּשְׁמֹ֡ו אֶ֠לְקָנָה בֶּן־יְרֹחָ֧ם בֶּן־אֱלִיה֛וּא בֶּן־תֹּ֥חוּ בֶן־צ֖וּף אֶפְרָתִֽי׃ \tNmCl\t141558\tword\tצ֖וּף \tm\tnmpr\n", "\n", "7\t1_Samuel\t1\t2\t426592\tbook\tSamuel_I\t453945\tclause\tשֵׁ֤ם אַחַת֙ חַנָּ֔ה \tNmCl\t141566\tword\tחַנָּ֔ה \tf\tnmpr\n", "\n", "8\t1_Samuel\t1\t2\t426592\tbook\tSamuel_I\t453946\tclause\tוְשֵׁ֥ם הַשֵּׁנִ֖ית פְּנִנָּ֑ה \tNmCl\t141571\tword\tפְּנִנָּ֑ה \tf\tnmpr\n", "\n", "9\t1_Samuel\t1\t2\t426592\tbook\tSamuel_I\t453948\tclause\tלִפְנִנָּה֙ יְלָדִ֔ים \tNmCl\t141575\tword\tפְנִנָּה֙ \tf\tnmpr\n", "\n" ] } ], "source": [ "A.export(results)\n", "checkout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As you see, you have an extra column **typ2** and **gn3**.\n", "\n", "This gives you a lot of control over the generation of spreadsheets." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Not from queries\n", "\n", "You can also export lists of node tuples that are not obtained by a query:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "((453942, 141547), (453943, 141550))" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tuples = (\n", " tuple(results[0][1:3]),\n", " tuple(results[1][1:3]),\n", ")\n", "\n", "tuples" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Two rows, each row has a clause node and a word node.\n", "\n", "Let's do a bare export:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "R\tS1\tS2\tS3\tNODE1\tTYPE1\tTEXT1\tbook1\tNODE2\tTYPE2\tTEXT2\ttyp2\n", "\n", "1\t1_Samuel\t1\t1\t453942\tclause\tוַיְהִי֩ אִ֨ישׁ אֶחָ֜ד מִן־הָרָמָתַ֛יִם צֹופִ֖ים מֵהַ֣ר אֶפְרָ֑יִם \t\t141547\tword\tאֶפְרָ֑יִם \t\n", "\n", "2\t1_Samuel\t1\t1\t453943\tclause\tוּשְׁמֹ֡ו אֶ֠לְקָנָה בֶּן־יְרֹחָ֧ם בֶּן־אֱלִיה֛וּא בֶּן־תֹּ֥חוּ בֶן־צ֖וּף אֶפְרָתִֽי׃ \t\t141550\tword\tאֶ֠לְקָנָה \t\n", "\n" ] } ], "source": [ "A.export(tuples)\n", "checkout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Wait a minute: why is the `typ2` there?\n", "\n", "It is because we have run a query before where we asked for `typ`.\n", "\n", "If we do not want to be influenced by previous things we've run, we need to reset the display:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "A.displayReset('tupleFeatures')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Again:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "R\tS1\tS2\tS3\tNODE1\tTYPE1\tTEXT1\tNODE2\tTYPE2\tTEXT2\n", "\n", "1\t1_Samuel\t1\t1\t453942\tclause\tוַיְהִי֩ אִ֨ישׁ אֶחָ֜ד מִן־הָרָמָתַ֛יִם צֹופִ֖ים מֵהַ֣ר אֶפְרָ֑יִם \t141547\tword\tאֶפְרָ֑יִם \n", "\n", "2\t1_Samuel\t1\t1\t453943\tclause\tוּשְׁמֹ֡ו אֶ֠לְקָנָה בֶּן־יְרֹחָ֧ם בֶּן־אֱלִיה֛וּא בֶּן־תֹּ֥חוּ בֶן־צ֖וּף אֶפְרָתִֽי׃ \t141550\tword\tאֶ֠לְקָנָה \n", "\n" ] } ], "source": [ "A.export(tuples)\n", "checkout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Display setup\n", "\n", "We can get richer exports by means of\n", "`A.displaySetup()`, using the parameter `tupleFeatures`:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "A.displaySetup(tupleFeatures=(\n", " (0, 'typ rela'),\n", " (1, 'sp gn nu pdp'),\n", "))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We assign extra features per member of the tuple.\n", "\n", "In the above case:\n", "\n", "* the first (`0`) member (the clause node), gets feature `typ`;\n", "* the second (`1`) member (the word node), gets features `sp` and `gn`." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "R\tS1\tS2\tS3\tNODE1\tTYPE1\tTEXT1\ttyp1\trela1\tNODE2\tTYPE2\tTEXT2\tsp2\tgn2\tnu2\tpdp2\n", "\n", "1\t1_Samuel\t1\t1\t453942\tclause\tוַיְהִי֩ אִ֨ישׁ אֶחָ֜ד מִן־הָרָמָתַ֛יִם צֹופִ֖ים מֵהַ֣ר אֶפְרָ֑יִם \tWayX\tNA\t141547\tword\tאֶפְרָ֑יִם \tnmpr\tunknown\tsg\tnmpr\n", "\n", "2\t1_Samuel\t1\t1\t453943\tclause\tוּשְׁמֹ֡ו אֶ֠לְקָנָה בֶּן־יְרֹחָ֧ם בֶּן־אֱלִיה֛וּא בֶּן־תֹּ֥חוּ בֶן־צ֖וּף אֶפְרָתִֽי׃ \tNmCl\tNA\t141550\tword\tאֶ֠לְקָנָה \tnmpr\tm\tsg\tnmpr\n", "\n" ] } ], "source": [ "A.export(tuples)\n", "checkout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Talking about display setup: other parameters also have effect, e.g. the text format.\n", "\n", "Let's change it to the phonetic representation." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "R\tS1\tS2\tS3\tNODE1\tTYPE1\tTEXT1\ttyp1\trela1\tNODE2\tTYPE2\tTEXT2\tsp2\tgn2\tnu2\tpdp2\n", "\n", "1\t1_Samuel\t1\t1\t453942\tclause\twayᵊhˌî ʔˌîš ʔeḥˈāḏ min-hārāmāṯˈayim ṣôfˌîm mēhˈar ʔefrˈāyim \tWayX\tNA\t141547\tword\tʔefrˈāyim \tnmpr\tunknown\tsg\tnmpr\n", "\n", "2\t1_Samuel\t1\t1\t453943\tclause\tûšᵊmˈô ʔelqānˌā ben-yᵊrōḥˈām ben-ʔᵉlîhˈû ben-tˌōḥû ven-ṣˌûf ʔefrāṯˈî . \tNmCl\tNA\t141550\tword\tʔelqānˌā \tnmpr\tm\tsg\tnmpr\n", "\n" ] } ], "source": [ "A.export(tuples, fmt='text-phono-full')\n", "checkout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Chained queries\n", "\n", "You can chain queries like this:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 0.56s 6 results\n", " 0.59s 1 result\n" ] } ], "source": [ "results = (\n", " A.search('''\n", "book book=Samuel_I\n", " chapter chapter=1\n", " verse verse=1\n", " clause\n", " word sp=nmpr\n", "''')\n", " +\n", " A.search('''\n", "book book=Samuel_I\n", " chapter chapter=1\n", " verse verse=1\n", " clause\n", " word sp=verb nu=pl\n", "''')\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In such cases, it is better to setup the features yourself:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "A.displaySetup(\n", " tupleFeatures=(\n", " (3, 'typ rela'),\n", " (4, 'sp gn vt vs'),\n", " ),\n", " fmt='text-phono-full',\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can do a fine export:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "R\tS1\tS2\tS3\tNODE1\tTYPE1\tNODE2\tTYPE2\tNODE3\tTYPE3\tTEXT3\tNODE4\tTYPE4\tTEXT4\ttyp4\trela4\tNODE5\tTYPE5\tTEXT5\tsp5\tgn5\tvt5\tvs5\n", "\n", "1\t1_Samuel\t1\t1\t426592\tbook\t426856\tchapter\t1421483\tverse\twayᵊhˌî ʔˌîš ʔeḥˈāḏ min-hārāmāṯˈayim ṣôfˌîm mēhˈar ʔefrˈāyim ûšᵊmˈô ʔelqānˌā ben-yᵊrōḥˈām ben-ʔᵉlîhˈû ben-tˌōḥû ven-ṣˌûf ʔefrāṯˈî . \t453942\tclause\twayᵊhˌî ʔˌîš ʔeḥˈāḏ min-hārāmāṯˈayim ṣôfˌîm mēhˈar ʔefrˈāyim \tWayX\tNA\t141547\tword\tʔefrˈāyim \tnmpr\tunknown\tNA\tNA\n", "\n", "2\t1_Samuel\t1\t1\t426592\tbook\t426856\tchapter\t1421483\tverse\twayᵊhˌî ʔˌîš ʔeḥˈāḏ min-hārāmāṯˈayim ṣôfˌîm mēhˈar ʔefrˈāyim ûšᵊmˈô ʔelqānˌā ben-yᵊrōḥˈām ben-ʔᵉlîhˈû ben-tˌōḥû ven-ṣˌûf ʔefrāṯˈî . \t453943\tclause\tûšᵊmˈô ʔelqānˌā ben-yᵊrōḥˈām ben-ʔᵉlîhˈû ben-tˌōḥû ven-ṣˌûf ʔefrāṯˈî . \tNmCl\tNA\t141550\tword\tʔelqānˌā \tnmpr\tm\tNA\tNA\n", "\n", "3\t1_Samuel\t1\t1\t426592\tbook\t426856\tchapter\t1421483\tverse\twayᵊhˌî ʔˌîš ʔeḥˈāḏ min-hārāmāṯˈayim ṣôfˌîm mēhˈar ʔefrˈāyim ûšᵊmˈô ʔelqānˌā ben-yᵊrōḥˈām ben-ʔᵉlîhˈû ben-tˌōḥû ven-ṣˌûf ʔefrāṯˈî . \t453943\tclause\tûšᵊmˈô ʔelqānˌā ben-yᵊrōḥˈām ben-ʔᵉlîhˈû ben-tˌōḥû ven-ṣˌûf ʔefrāṯˈî . \tNmCl\tNA\t141552\tword\tyᵊrōḥˈām \tnmpr\tm\tNA\tNA\n", "\n", "4\t1_Samuel\t1\t1\t426592\tbook\t426856\tchapter\t1421483\tverse\twayᵊhˌî ʔˌîš ʔeḥˈāḏ min-hārāmāṯˈayim ṣôfˌîm mēhˈar ʔefrˈāyim ûšᵊmˈô ʔelqānˌā ben-yᵊrōḥˈām ben-ʔᵉlîhˈû ben-tˌōḥû ven-ṣˌûf ʔefrāṯˈî . \t453943\tclause\tûšᵊmˈô ʔelqānˌā ben-yᵊrōḥˈām ben-ʔᵉlîhˈû ben-tˌōḥû ven-ṣˌûf ʔefrāṯˈî . \tNmCl\tNA\t141554\tword\tʔᵉlîhˈû \tnmpr\tm\tNA\tNA\n", "\n", "5\t1_Samuel\t1\t1\t426592\tbook\t426856\tchapter\t1421483\tverse\twayᵊhˌî ʔˌîš ʔeḥˈāḏ min-hārāmāṯˈayim ṣôfˌîm mēhˈar ʔefrˈāyim ûšᵊmˈô ʔelqānˌā ben-yᵊrōḥˈām ben-ʔᵉlîhˈû ben-tˌōḥû ven-ṣˌûf ʔefrāṯˈî . \t453943\tclause\tûšᵊmˈô ʔelqānˌā ben-yᵊrōḥˈām ben-ʔᵉlîhˈû ben-tˌōḥû ven-ṣˌûf ʔefrāṯˈî . \tNmCl\tNA\t141556\tword\ttˌōḥû \tnmpr\tm\tNA\tNA\n", "\n", "6\t1_Samuel\t1\t1\t426592\tbook\t426856\tchapter\t1421483\tverse\twayᵊhˌî ʔˌîš ʔeḥˈāḏ min-hārāmāṯˈayim ṣôfˌîm mēhˈar ʔefrˈāyim ûšᵊmˈô ʔelqānˌā ben-yᵊrōḥˈām ben-ʔᵉlîhˈû ben-tˌōḥû ven-ṣˌûf ʔefrāṯˈî . \t453943\tclause\tûšᵊmˈô ʔelqānˌā ben-yᵊrōḥˈām ben-ʔᵉlîhˈû ben-tˌōḥû ven-ṣˌûf ʔefrāṯˈî . \tNmCl\tNA\t141558\tword\tṣˌûf \tnmpr\tm\tNA\tNA\n", "\n", "7\t1_Samuel\t1\t1\t426592\tbook\t426856\tchapter\t1421483\tverse\twayᵊhˌî ʔˌîš ʔeḥˈāḏ min-hārāmāṯˈayim ṣôfˌîm mēhˈar ʔefrˈāyim ûšᵊmˈô ʔelqānˌā ben-yᵊrōḥˈām ben-ʔᵉlîhˈû ben-tˌōḥû ven-ṣˌûf ʔefrāṯˈî . \t453942\tclause\twayᵊhˌî ʔˌîš ʔeḥˈāḏ min-hārāmāṯˈayim ṣôfˌîm mēhˈar ʔefrˈāyim \tWayX\tNA\t141544\tword\tṣôfˌîm \tverb\tm\tptca\tqal\n", "\n" ] } ], "source": [ "A.export(results)\n", "checkout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# All steps\n", "\n", "Now you now how to escape from Text-Fabric.\n", "\n", "We hope that this makes your stay in TF more comfortable.\n", "It's not a *Hotel California*.\n", "\n", "* **[start](start.ipynb)** your first step in mastering the bible computationally\n", "* **[display](display.ipynb)** become an expert in creating pretty displays of your text structures\n", "* **[search](search.ipynb)** turbo charge your hand-coding with search templates\n", "* **exportExcel** make tailor-made spreadsheets out of your results\n", "* **[share](share.ipynb)** draw in other people's data and let them use yours\n", "* **[export](export.ipynb)** export your dataset as an Emdros database\n", "\n", "CC-BY Dirk Roorda" ] } ], "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.7" } }, "nbformat": 4, "nbformat_minor": 4 }