{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Creating Text-Fabric from LowFat XML trees\n", "\n", "Version: 0.2 (May 17, 2023 - small updates)\n", "\n", "## Table of content \n", "* [1. Introduction](#first-bullet)\n", "* [2. Read LowFat XML data and store in pickle](#second-bullet)\n", "* [3. Production Text-Fabric from pickle input](#third-bullet)\n", "* [4. Basic testing of the textfabric data](#fourth-bullet)" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "\n", "## 1. Introduction \n", "##### [Back to TOC](#TOC)\n", "\n", "The source data for the conversion are the LowFat XML trees files representing the macula-greek version of the Nestle 1904 Greek New Testment. The most recent source data can be found on github https://github.com/Clear-Bible/macula-greek/tree/main/Nestle1904/lowfat. Attribution: \"MACULA Greek Linguistic Datasets, available at https://github.com/Clear-Bible/macula-greek/\". \n", "\n", "The production of the Text-Fabric files consist of two steps. First the creation of piclke files (part 1). Secondly the actual Text-Fabric creation process (part 2). Both steps are independent allowing to start from Part 2 by using the pickle files as input. \n", "\n", "\n", "\n", "Be advised that this Text-Fabric version is a test version (proof of concept) and requires further finetuning, especialy with regards of nomenclature and presentation of (sub)phrases and clauses." ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "## 2. Read LowFat XML data and store in pickle \n", "##### [Back to TOC](#TOC)\n", "\n", "This script harvests all information from the LowFat tree data (XML nodes), puts it into a Panda DataFrame and stores the result per book in a pickle file. Note: pickling (in Python) is serialising an object into a disk file (or buffer). \n", "\n", "In the context of this script, 'Leaf' refers to those node containing the Greek word as data, which happen to be the nodes without any child (hence the analogy with the leaves on the tree). These 'leafs' can also be refered to as 'terminal nodes'. Futher, Parent1 is the leaf's parent, Parent2 is Parent1's parent, etc.\n", "\n", "For a full description of the source data see document [MACULA Greek Treebank for the Nestle 1904 Greek New Testament.pdf](https://github.com/Clear-Bible/macula-greek/blob/main/doc/MACULA%20Greek%20Treebank%20for%20the%20Nestle%201904%20Greek%20New%20Testament.pdf)" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "### Step 1: import various libraries" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "ExecuteTime": { "end_time": "2022-10-28T02:58:14.739227Z", "start_time": "2022-10-28T02:57:38.766097Z" } }, "outputs": [], "source": [ "import pandas as pd\n", "import sys\n", "import os\n", "import time\n", "import pickle\n", "\n", "import re #regular expressions\n", "from os import listdir\n", "from os.path import isfile, join\n", "import xml.etree.ElementTree as ET\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Step 2: initialize global data\n", "\n", "Change BaseDir, XmlDir and PklDir to match location of the datalocation and the OS used." ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [], "source": [ "BaseDir = 'C:\\\\Users\\\\tonyj\\\\my_new_Jupyter_folder\\\\Read_from_lowfat\\\\data\\\\'\n", "XmlDir = BaseDir+'xml\\\\'\n", "PklDir = BaseDir+'pkl\\\\'\n", "XlsxDir = BaseDir+'xlsx\\\\'\n", "# note: create output directory prior running this part\n", "\n", "# key: filename, [0]=book_long, [1]=book_num, [3]=book_short\n", "bo2book = {'01-matthew': ['Matthew', '1', 'Matt'],\n", " '02-mark': ['Mark', '2', 'Mark'],\n", " '03-luke': ['Luke', '3', 'Luke'],\n", " '04-john': ['John', '4', 'John'],\n", " '05-acts': ['Acts', '5', 'Acts'],\n", " '06-romans': ['Romans', '6', 'Rom'],\n", " '07-1corinthians': ['I_Corinthians', '7', '1Cor'],\n", " '08-2corinthians': ['II_Corinthians', '8', '2Cor'],\n", " '09-galatians': ['Galatians', '9', 'Gal'],\n", " '10-ephesians': ['Ephesians', '10', 'Eph'],\n", " '11-philippians': ['Philippians', '11', 'Phil'],\n", " '12-colossians': ['Colossians', '12', 'Col'],\n", " '13-1thessalonians':['I_Thessalonians', '13', '1Thess'],\n", " '14-2thessalonians':['II_Thessalonians','14', '2Thess'],\n", " '15-1timothy': ['I_Timothy', '15', '1Tim'],\n", " '16-2timothy': ['II_Timothy', '16', '2Tim'],\n", " '17-titus': ['Titus', '17', 'Titus'],\n", " '18-philemon': ['Philemon', '18', 'Phlm'],\n", " '19-hebrews': ['Hebrews', '19', 'Heb'],\n", " '20-james': ['James', '20', 'Jas'],\n", " '21-1peter': ['I_Peter', '21', '1Pet'],\n", " '22-2peter': ['II_Peter', '22', '2Pet'],\n", " '23-1john': ['I_John', '23', '1John'],\n", " '24-2john': ['II_John', '24', '2John'],\n", " '25-3john': ['III_John', '25', '3John'], \n", " '26-jude': ['Jude', '26', 'Jude'],\n", " '27-revelation': ['Revelation', '27', 'Rev']}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### step 3: define Function to add parent info to each node of the XML tree\n", "\n", "In order to traverse from the 'leafs' (terminating nodes) upto the root of the tree, it is required to add information to each node pointing to the parent of each node.\n", "\n", "(concept taken from https://stackoverflow.com/questions/2170610/access-elementtree-node-parent-node)" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": [ "def addParentInfo(et):\n", " for child in et:\n", " child.attrib['parent'] = et\n", " addParentInfo(child)\n", "\n", "def getParent(et):\n", " if 'parent' in et.attrib:\n", " return et.attrib['parent']\n", " else:\n", " return None" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Step 4: read and process the XML data and store panda dataframe in pickle" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "scrolled": true, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Processing Matthew at C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\xml\\01-matthew.xml\n", "......................................................................................................................................................................................\n", "Found 18299 items in 75.79531121253967 seconds\n", "\n", "Processing Mark at C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\xml\\02-mark.xml\n", "................................................................................................................\n", "Found 11277 items in 45.66975522041321 seconds\n", "\n", "Processing Luke at C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\xml\\03-luke.xml\n", "..................................................................................................................................................................................................\n", "Found 19456 items in 251.0713756084442 seconds\n", "\n", "Processing John at C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\xml\\04-john.xml\n", "............................................................................................................................................................\n", "Found 15643 items in 62.22022581100464 seconds\n", "\n", "Processing Acts at C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\xml\\05-acts.xml\n", ".......................................................................................................................................................................................\n", "Found 18393 items in 80.11186122894287 seconds\n", "\n", "Processing Romans at C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\xml\\06-romans.xml\n", ".......................................................................\n", "Found 7100 items in 33.103615522384644 seconds\n", "\n", "Processing I_Corinthians at C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\xml\\07-1corinthians.xml\n", "....................................................................\n", "Found 6820 items in 28.27225947380066 seconds\n", "\n", "Processing II_Corinthians at C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\xml\\08-2corinthians.xml\n", "............................................\n", "Found 4469 items in 21.04596710205078 seconds\n", "\n", "Processing Galatians at C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\xml\\09-galatians.xml\n", "......................\n", "Found 2228 items in 9.386286497116089 seconds\n", "\n", "Processing Ephesians at C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\xml\\10-ephesians.xml\n", "........................\n", "Found 2419 items in 12.377203464508057 seconds\n", "\n", "Processing Philippians at C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\xml\\11-philippians.xml\n", "................\n", "Found 1630 items in 6.929890871047974 seconds\n", "\n", "Processing Colossians at C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\xml\\12-colossians.xml\n", "...............\n", "Found 1575 items in 7.252684116363525 seconds\n", "\n", "Processing I_Thessalonians at C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\xml\\13-1thessalonians.xml\n", "..............\n", "Found 1473 items in 6.500782251358032 seconds\n", "\n", "Processing II_Thessalonians at C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\xml\\14-2thessalonians.xml\n", "........\n", "Found 822 items in 3.1195180416107178 seconds\n", "\n", "Processing I_Timothy at C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\xml\\15-1timothy.xml\n", "...............\n", "Found 1588 items in 8.0901620388031 seconds\n", "\n", "Processing II_Timothy at C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\xml\\16-2timothy.xml\n", "............\n", "Found 1237 items in 6.2979772090911865 seconds\n", "\n", "Processing Titus at C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\xml\\17-titus.xml\n", "......\n", "Found 658 items in 2.693586826324463 seconds\n", "\n", "Processing Philemon at C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\xml\\18-philemon.xml\n", "...\n", "Found 335 items in 1.189115047454834 seconds\n", "\n", "Processing Hebrews at C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\xml\\19-hebrews.xml\n", ".................................................\n", "Found 4955 items in 20.371201038360596 seconds\n", "\n", "Processing James at C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\xml\\20-james.xml\n", ".................\n", "Found 1739 items in 5.6465394496917725 seconds\n", "\n", "Processing I_Peter at C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\xml\\21-1peter.xml\n", "................\n", "Found 1676 items in 8.954313278198242 seconds\n", "\n", "Processing II_Peter at C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\xml\\22-2peter.xml\n", "..........\n", "Found 1098 items in 4.5939764976501465 seconds\n", "\n", "Processing I_John at C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\xml\\23-1john.xml\n", ".....................\n", "Found 2136 items in 8.40240740776062 seconds\n", "\n", "Processing II_John at C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\xml\\24-2john.xml\n", "..\n", "Found 245 items in 0.5407323837280273 seconds\n", "\n", "Processing III_John at C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\xml\\25-3john.xml\n", "..\n", "Found 219 items in 0.882843017578125 seconds\n", "\n", "Processing Jude at C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\xml\\26-jude.xml\n", "....\n", "Found 457 items in 1.5982708930969238 seconds\n", "\n", "Processing Revelation at C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\xml\\27-revelation.xml\n", "..................................................................................................\n", "Found 9832 items in 46.32647252082825 seconds\n", "\n" ] } ], "source": [ "# set some globals\n", "monad=1\n", "CollectedItems= 0\n", "\n", "# process books in order\n", "for bo, bookinfo in bo2book.items():\n", " CollectedItems=0\n", " SentenceNumber=0\n", " WordGroupNumber=0\n", " full_df=pd.DataFrame({})\n", " book_long=bookinfo[0]\n", " booknum=bookinfo[1]\n", " book_short=bookinfo[2]\n", " InputFile = os.path.join(XmlDir, f'{bo}.xml')\n", " OutputFile = os.path.join(PklDir, f'{bo}.pkl')\n", " print(f'Processing {book_long} at {InputFile}')\n", " DataFrameList = []\n", "\n", " # send xml document to parsing process\n", " tree = ET.parse(InputFile)\n", " # Now add all the parent info to the nodes in the xtree [important!]\n", " addParentInfo(tree.getroot())\n", " start_time = time.time()\n", " \n", " # walk over all the XML data\n", " for elem in tree.iter():\n", " if elem.tag == 'sentence':\n", " # add running number to 'sentence' tags\n", " SentenceNumber+=1\n", " elem.set('SN', SentenceNumber)\n", " if elem.tag == 'wg':\n", " # add running number to 'wg' tags\n", " WordGroupNumber+=1\n", " elem.set('WGN', WordGroupNumber)\n", " if elem.tag == 'w':\n", " # all nodes containing words are tagged with 'w'\n", " \n", " # show progress on screen\n", " CollectedItems+=1\n", " if (CollectedItems%100==0): print (\".\",end='')\n", " \n", " #Leafref will contain list with book, chapter verse and wordnumber\n", " Leafref = re.sub(r'[!: ]',\" \", elem.attrib.get('ref')).split()\n", " \n", " #push value for monad to element tree \n", " elem.set('monad', monad)\n", " monad+=1\n", " \n", " # add some important computed data to the leaf\n", " elem.set('LeafName', elem.tag)\n", " elem.set('word', elem.text)\n", " elem.set('book_long', book_long)\n", " elem.set('booknum', int(booknum))\n", " elem.set('book_short', book_short)\n", " elem.set('chapter', int(Leafref[1]))\n", " elem.set('verse', int(Leafref[2]))\n", " \n", " # folling code will trace down parents upto the tree and store found attributes\n", " parentnode=getParent(elem)\n", " index=0\n", " while (parentnode):\n", " index+=1\n", " elem.set('Parent{}Name'.format(index), parentnode.tag)\n", " elem.set('Parent{}Type'.format(index), parentnode.attrib.get('type'))\n", " elem.set('Parent{}Appos'.format(index), parentnode.attrib.get('appositioncontainer'))\n", " elem.set('Parent{}Class'.format(index), parentnode.attrib.get('class'))\n", " elem.set('Parent{}Rule'.format(index), parentnode.attrib.get('rule'))\n", " elem.set('Parent{}Role'.format(index), parentnode.attrib.get('role'))\n", " elem.set('Parent{}Cltype'.format(index), parentnode.attrib.get('cltype'))\n", " elem.set('Parent{}Unit'.format(index), parentnode.attrib.get('unit'))\n", " elem.set('Parent{}Junction'.format(index), parentnode.attrib.get('junction'))\n", " elem.set('Parent{}SN'.format(index), parentnode.attrib.get('SN'))\n", " elem.set('Parent{}WGN'.format(index), parentnode.attrib.get('WGN'))\n", " currentnode=parentnode\n", " parentnode=getParent(currentnode) \n", " elem.set('parents', int(index))\n", " \n", " #this will add all elements found in the tree to a list of dataframes\n", " DataFrameChunk=pd.DataFrame(elem.attrib, index={monad})\n", " DataFrameList.append(DataFrameChunk)\n", " \n", " #store the resulting DataFrame per book into a pickle file for further processing\n", " full_df = pd.concat([df for df in DataFrameList])\n", "\n", " output = open(r\"{}\".format(OutputFile), 'wb')\n", " pickle.dump(full_df, output)\n", " output.close()\n", " print(\"\\nFound \",CollectedItems, \" items in %s seconds\\n\" % (time.time() - start_time)) \n", " " ] }, { "cell_type": "markdown", "metadata": { "toc": true }, "source": [ "## 3. Nestle1904 Text-Fabric production from pickle input \n", "##### [Back to TOC](#TOC)\n", "\n", "This script creates the Text-Fabric files by recursive calling the TF walker function.\n", "API info: https://annotation.github.io/text-fabric/tf/convert/walker.html\n", "\n", "The pickle files created by step 1 are stored on Github location T.B.D." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Step 1: Load libraries and initialize some data\n", "\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2022-10-28T03:01:34.810259Z", "start_time": "2022-10-28T03:01:25.745112Z" } }, "outputs": [], "source": [ "import pandas as pd\n", "import os\n", "import re\n", "import gc\n", "from tf.fabric import Fabric\n", "from tf.convert.walker import CV\n", "from tf.parameters import VERSION\n", "from datetime import date\n", "import pickle\n", "\n", "BaseDir = 'C:\\\\Users\\\\tonyj\\\\my_new_Jupyter_folder\\\\Read_from_lowfat\\\\data\\\\'\n", "XmlDir = BaseDir+'xml\\\\'\n", "PklDir = BaseDir+'pkl\\\\'\n", "XlsxDir = BaseDir+'xlsx\\\\'\n", "\n", "# key: filename, [0]=book_long, [1]=book_num, [3]=book_short\n", "bo2book = {'01-matthew': ['Matthew', '1', 'Matt'],\n", " '02-mark': ['Mark', '2', 'Mark'],\n", " '03-luke': ['Luke', '3', 'Luke'],\n", " '04-john': ['John', '4', 'John'],\n", " '05-acts': ['Acts', '5', 'Acts'],\n", " '06-romans': ['Romans', '6', 'Rom'],\n", " '07-1corinthians': ['I_Corinthians', '7', '1Cor'],\n", " '08-2corinthians': ['II_Corinthians', '8', '2Cor'],\n", " '09-galatians': ['Galatians', '9', 'Gal'],\n", " '10-ephesians': ['Ephesians', '10', 'Eph'],\n", " '11-philippians': ['Philippians', '11', 'Phil'],\n", " '12-colossians': ['Colossians', '12', 'Col'],\n", " '13-1thessalonians':['I_Thessalonians', '13', '1Thess'],\n", " '14-2thessalonians':['II_Thessalonians','14', '2Thess'],\n", " '15-1timothy': ['I_Timothy', '15', '1Tim'],\n", " '16-2timothy': ['II_Timothy', '16', '2Tim'],\n", " '17-titus': ['Titus', '17', 'Titus'],\n", " '18-philemon': ['Philemon', '18', 'Phlm'],\n", " '19-hebrews': ['Hebrews', '19', 'Heb'],\n", " '20-james': ['James', '20', 'Jas'],\n", " '21-1peter': ['I_Peter', '21', '1Pet'],\n", " '22-2peter': ['II_Peter', '22', '2Pet'],\n", " '23-1john': ['I_John', '23', '1John'],\n", " '24-2john': ['II_John', '24', '2John'],\n", " '25-3john': ['III_John', '25', '3John'], \n", " '26-jude': ['Jude', '26', 'Jude'],\n", " '27-revelation': ['Revelation', '27', 'Rev']}\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Optional: export to Excel for investigation" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\tloading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\01-matthew.pkl...\n", "\tloading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\02-mark.pkl...\n", "\tloading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\03-luke.pkl...\n", "\tloading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\04-john.pkl...\n", "\tloading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\05-acts.pkl...\n", "\tloading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\06-romans.pkl...\n", "\tloading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\07-1corinthians.pkl...\n", "\tloading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\08-2corinthians.pkl...\n", "\tloading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\09-galatians.pkl...\n", "\tloading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\10-ephesians.pkl...\n", "\tloading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\11-philippians.pkl...\n", "\tloading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\12-colossians.pkl...\n", "\tloading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\13-1thessalonians.pkl...\n", "\tloading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\14-2thessalonians.pkl...\n", "\tloading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\15-1timothy.pkl...\n", "\tloading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\16-2timothy.pkl...\n", "\tloading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\17-titus.pkl...\n", "\tloading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\18-philemon.pkl...\n", "\tloading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\19-hebrews.pkl...\n", "\tloading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\20-james.pkl...\n", "\tloading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\21-1peter.pkl...\n", "\tloading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\22-2peter.pkl...\n", "\tloading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\23-1john.pkl...\n", "\tloading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\24-2john.pkl...\n", "\tloading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\25-3john.pkl...\n", "\tloading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\26-jude.pkl...\n", "\tloading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\27-revelation.pkl...\n" ] } ], "source": [ "# test: sorting the data\n", "import openpyxl\n", "import pickle\n", "\n", "#if True:\n", "for bo in bo2book:\n", " '''\n", " load all data into a dataframe\n", " process books in order (bookinfo is a list!)\n", " ''' \n", " InputFile = os.path.join(PklDir, f'{bo}.pkl')\n", " \n", " print(f'\\tloading {InputFile}...')\n", " pkl_file = open(InputFile, 'rb')\n", " df = pickle.load(pkl_file)\n", " pkl_file.close()\n", " df.to_excel(os.path.join(XlsxDir, f'{bo}.xlsx'), index=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Step 2 Running the TF walker function\n", "\n", "API info: https://annotation.github.io/text-fabric/tf/convert/walker.html\n", "\n", "The logic of interpreting the data is included in the director function." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "This is Text-Fabric 11.4.10\n", "55 features found and 0 ignored\n", " 0.00s Importing data from walking through the source ...\n", " | 0.00s Preparing metadata... \n", " | SECTION TYPES: book, chapter, verse\n", " | SECTION FEATURES: book, chapter, verse\n", " | STRUCTURE TYPES: book, chapter, verse\n", " | STRUCTURE FEATURES: book, chapter, verse\n", " | TEXT FEATURES:\n", " | | text-orig-full after, word\n", " | 0.00s OK\n", " | 0.00s Following director... \n", "\tWe are loading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\01-matthew.pkl...\n", "\tWe are loading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\02-mark.pkl...\n", "\tWe are loading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\03-luke.pkl...\n", "\tWe are loading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\04-john.pkl...\n", "\tWe are loading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\05-acts.pkl...\n", "\tWe are loading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\06-romans.pkl...\n", "\tWe are loading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\07-1corinthians.pkl...\n", "\tWe are loading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\08-2corinthians.pkl...\n", "\tWe are loading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\09-galatians.pkl...\n", "\tWe are loading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\10-ephesians.pkl...\n", "\tWe are loading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\11-philippians.pkl...\n", "\tWe are loading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\12-colossians.pkl...\n", "\tWe are loading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\13-1thessalonians.pkl...\n", "\tWe are loading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\14-2thessalonians.pkl...\n", "\tWe are loading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\15-1timothy.pkl...\n", "\tWe are loading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\16-2timothy.pkl...\n", "\tWe are loading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\17-titus.pkl...\n", "\tWe are loading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\18-philemon.pkl...\n", "\tWe are loading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\19-hebrews.pkl...\n", "\tWe are loading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\20-james.pkl...\n", "\tWe are loading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\21-1peter.pkl...\n", "\tWe are loading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\22-2peter.pkl...\n", "\tWe are loading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\23-1john.pkl...\n", "\tWe are loading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\24-2john.pkl...\n", "\tWe are loading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\25-3john.pkl...\n", "\tWe are loading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\26-jude.pkl...\n", "\tWe are loading C:\\Users\\tonyj\\my_new_Jupyter_folder\\Read_from_lowfat\\data\\pkl\\27-revelation.pkl...\n", " | 42s \"edge\" actions: 0\n", " | 42s \"feature\" actions: 290649\n", " | 42s \"node\" actions: 152870\n", " | 42s \"resume\" actions: 37890\n", " | 42s \"slot\" actions: 137779\n", " | 42s \"terminate\" actions: 328692\n", " | 27 x \"book\" node \n", " | 270 x \"chapter\" node \n", " | 12170 x \"sentence\" node \n", " | 7943 x \"verse\" node \n", " | 132460 x \"wg\" node \n", " | 137779 x \"word\" node = slot type\n", " | 290649 nodes of all types\n", " | 42s OK\n", " | 0.04s Removing unlinked nodes ... \n", " | | 0.00s 10 unlinked \"chapter\" nodes: [1, 30, 47, 72, 94] ...\n", " | | 0.00s 10 unlinked \"sentence\" nodes: [1, 1678, 2765, 4473, 6092] ...\n", " | | 0.00s 20 unlinked nodes\n", " | | 0.00s Leaving 290629 nodes\n", " | 0.00s checking for nodes and edges ... \n", " | 0.00s OK\n", " | 0.00s checking (section) features ... \n", " | 0.20s OK\n", " | 0.00s reordering nodes ...\n", " | 0.03s Sorting 27 nodes of type \"book\"\n", " | 0.04s Sorting 260 nodes of type \"chapter\"\n", " | 0.05s Sorting 12160 nodes of type \"sentence\"\n", " | 0.08s Sorting 7943 nodes of type \"verse\"\n", " | 0.10s Sorting 132460 nodes of type \"wg\"\n", " | 0.23s Max node = 290629\n", " | 0.23s OK\n", " | 0.00s reassigning feature values ...\n", " | | 0.54s node feature \"after\" with 137779 nodes\n", " | | 0.58s node feature \"appos\" with 132460 nodes\n", " | | 0.63s node feature \"book\" with 27 nodes\n", " | | 0.63s node feature \"book_long\" with 137779 nodes\n", " | | 0.67s node feature \"booknumber\" with 137806 nodes\n", " | | 0.71s node feature \"bookshort\" with 137806 nodes\n", " | | 0.76s node feature \"case\" with 137779 nodes\n", " | | 0.79s node feature \"chapter\" with 158098 nodes\n", " | | 0.84s node feature \"clausetype\" with 132460 nodes\n", " | | 0.89s node feature \"containedclause\" with 137779 nodes\n", " | | 0.92s node feature \"degree\" with 137779 nodes\n", " | | 0.96s node feature \"gloss\" with 137779 nodes\n", " | | 1.00s node feature \"gn\" with 137779 nodes\n", " | | 1.04s node feature \"junction\" with 132460 nodes\n", " | | 1.09s node feature \"lemma\" with 137779 nodes\n", " | | 1.13s node feature \"lex_dom\" with 137779 nodes\n", " | | 1.17s node feature \"ln\" with 137779 nodes\n", " | | 1.20s node feature \"monad\" with 137779 nodes\n", " | | 1.24s node feature \"mood\" with 137779 nodes\n", " | | 1.28s node feature \"morph\" with 137779 nodes\n", " | | 1.32s node feature \"nodeID\" with 137779 nodes\n", " | | 1.37s node feature \"normalized\" with 137779 nodes\n", " | | 1.42s node feature \"nu\" with 137779 nodes\n", " | | 1.46s node feature \"number\" with 137779 nodes\n", " | | 1.51s node feature \"orig_order\" with 137779 nodes\n", " | | 1.55s node feature \"person\" with 137779 nodes\n", " | | 1.60s node feature \"ref\" with 137779 nodes\n", " | | 1.64s node feature \"reference\" with 137779 nodes\n", " | | 1.69s node feature \"roleclausedistance\" with 137779 nodes\n", " | | 1.73s node feature \"rule\" with 132460 nodes\n", " | | 1.79s node feature \"sentence\" with 137779 nodes\n", " | | 1.83s node feature \"sp\" with 137779 nodes\n", " | | 1.86s node feature \"sp_full\" with 137779 nodes\n", " | | 1.90s node feature \"strongs\" with 137779 nodes\n", " | | 1.94s node feature \"subj_ref\" with 137779 nodes\n", " | | 1.98s node feature \"tense\" with 137779 nodes\n", " | | 2.02s node feature \"type\" with 137779 nodes\n", " | | 2.06s node feature \"unicode\" with 137779 nodes\n", " | | 2.09s node feature \"verse\" with 157882 nodes\n", " | | 2.14s node feature \"voice\" with 137779 nodes\n", " | | 2.17s node feature \"wgclass\" with 132460 nodes\n", " | | 2.22s node feature \"wglevel\" with 132460 nodes\n", " | | 2.27s node feature \"wgnum\" with 132460 nodes\n", " | | 2.31s node feature \"wgrole\" with 132460 nodes\n", " | | 2.35s node feature \"wgrolelong\" with 132460 nodes\n", " | | 2.40s node feature \"wgtype\" with 132460 nodes\n", " | | 2.45s node feature \"word\" with 137779 nodes\n", " | | 2.48s node feature \"wordlevel\" with 137779 nodes\n", " | | 2.52s node feature \"wordrole\" with 137779 nodes\n", " | | 2.56s node feature \"wordrolelong\" with 137779 nodes\n", " | 2.16s OK\n", " 0.00s Exporting 51 node and 1 edge and 1 config features to ~/my_new_Jupyter_folder/Read_from_lowfat/data:\n", " 0.00s VALIDATING oslots feature\n", " 0.02s VALIDATING oslots feature\n", " 0.02s maxSlot= 137779\n", " 0.02s maxNode= 290629\n", " 0.03s OK: oslots is valid\n", " | 0.14s T after to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.14s T appos to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.01s T book to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.14s T book_long to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.13s T booknumber to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.14s T bookshort to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.15s T case to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.15s T chapter to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.13s T clausetype to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.14s T containedclause to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.14s T degree to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.14s T gloss to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.15s T gn to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.14s T junction to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.16s T lemma to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.14s T lex_dom to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.15s T ln to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.14s T monad to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.14s T mood to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.14s T morph to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.14s T nodeID to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.16s T normalized to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.14s T nu to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.14s T number to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.13s T orig_order to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.06s T otype to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.14s T person to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.14s T ref to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.14s T reference to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.13s T roleclausedistance to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.14s T rule to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.12s T sentence to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.14s T sp to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.14s T sp_full to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.14s T strongs to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.13s T subj_ref to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.14s T tense to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.14s T type to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.16s T unicode to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.16s T verse to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.14s T voice to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.14s T wgclass to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.12s T wglevel to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.19s T wgnum to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.14s T wgrole to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.13s T wgrolelong to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.14s T wgtype to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.16s T word to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.13s T wordlevel to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.14s T wordrole to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.14s T wordrolelong to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.48s T oslots to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " | 0.00s M otext to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " 7.53s Exported 51 node features and 1 edge features and 1 config features to ~/my_new_Jupyter_folder/Read_from_lowfat/data\n", " 7.53s WARNING section chapter \"1\" of level 2 ends inside a verse \"1\" of level 3 (10 x):\n", " | | 10s WARNING section chapter \"??\" of level 2 starts inside a verse \"1\" of level 3 (10 x):\n", " | | 10s use `cv.walk(..., warn=True)` to stop after warnings\n", " | | 10s use `cv.walk(..., warn=None)` to suppress warnings\n", "done\n" ] } ], "source": [ "TF = Fabric(locations=BaseDir, silent=False)\n", "cv = CV(TF)\n", "version = \"0.2\"\n", "\n", "###############################################\n", "# Common helper functions #\n", "###############################################\n", "\n", "#Function to prevent errors during conversion due to missing data\n", "def sanitize(input):\n", " if isinstance(input, float): return ''\n", " if isinstance(input, type(None)): return ''\n", " else: return (input)\n", "\n", "\n", "# Function to expand the syntactic categories of words or wordgroup\n", "# See also \"MACULA Greek Treebank for the Nestle 1904 Greek New Testament.pdf\" \n", "# page 5&6 (section 2.4 Syntactic Categories at Clause Level)\n", "def ExpandRole(input):\n", " if input==\"adv\": return 'Adverbial'\n", " if input==\"io\": return 'Indirect Object'\n", " if input==\"o\": return 'Object'\n", " if input==\"o2\": return 'Second Object'\n", " if input==\"s\": return 'Subject'\n", " if input==\"p\": return 'Predicate'\n", " if input==\"v\": return 'Verbal'\n", " if input==\"vc\": return 'Verbal Copula'\n", " if input=='aux': return 'Auxiliar'\n", " return ''\n", "\n", "# Function to expantion of Part of Speech labels. See also the description in \n", "# \"MACULA Greek Treebank for the Nestle 1904 Greek New Testament.pdf\" page 6&7\n", "# (2.2. Syntactic Categories at Word Level: Part of Speech Labels)\n", "def ExpandSP(input):\n", " if input=='adj': return 'adjective'\n", " if input=='conj': return 'conjunction'\n", " if input=='det': return 'determiner' \n", " if input=='intj': return 'interjection' \n", " if input=='noun': return 'noun' \n", " if input=='num': return 'numeral' \n", " if input=='prep': return 'preposition' \n", " if input=='ptcl': return 'particle' \n", " if input=='pron': return 'pronoun' \n", " if input=='verb': return 'verb' \n", " return ''\n", "\n", "###############################################\n", "# The director routine #\n", "###############################################\n", "\n", "def director(cv):\n", " \n", " ###############################################\n", " # Innitial setup of data etc. #\n", " ###############################################\n", " NoneType = type(None) # needed as tool to validate certain data\n", " IndexDict = {} # init an empty dictionary\n", " WordGroupDict={} # init a dummy dictionary\n", " PrevWordGroupSet = WordGroupSet = []\n", " PrevWordGroupList = WordGroupList = []\n", " RootWordGroup = 0\n", " WordNumber=FoundWords=WordGroupTrack=0\n", " # The following is required to recover succesfully from an abnormal condition\n", " # in the LowFat tree data where a element is labeled as \n", " # this number is arbitrary but should be high enough not to clash with 'real' WG numbers\n", " DummyWGN=200000 \n", " \n", " for bo,bookinfo in bo2book.items(): \n", " \n", " ###############################################\n", " # start of section executed for each book #\n", " ###############################################\n", " \n", " # note: bookinfo is a list! Split the data\n", " Book = bookinfo[0] \n", " BookNumber = int(bookinfo[1])\n", " BookShort = bookinfo[2]\n", " BookLoc = os.path.join(PklDir, f'{bo}.pkl') \n", " \n", " \n", " # load data for this book into a dataframe. \n", " # make sure wordorder is correct\n", " print(f'\\tWe are loading {BookLoc}...')\n", " pkl_file = open(BookLoc, 'rb')\n", " df_unsorted = pickle.load(pkl_file)\n", " pkl_file.close()\n", " df=df_unsorted.sort_values(by=['ref'])\n", " \n", " \n", " # set up nodes for new book\n", " ThisBookPointer = cv.node('book')\n", " cv.feature(ThisBookPointer, book=Book, booknumber=BookNumber, bookshort=BookShort)\n", " \n", " ThisChapterPointer = cv.node('chapter')\n", " cv.feature(ThisChapterPointer, chapter=1)\n", " PreviousChapter=1\n", " \n", " ThisVersePointer = cv.node('verse')\n", " cv.feature(ThisVersePointer, verse=1)\n", " PreviousVerse=1\n", " \n", " ThisSentencePointer = cv.node('sentence')\n", " cv.feature(ThisSentencePointer, verse=1)\n", " PreviousSentence=1 \n", "\n", " '''\n", " fill dictionary of column names for this book \n", " sort to ensure proper wordorder\n", " '''\n", " ItemsInRow=1\n", " for itemname in df.columns.to_list():\n", " IndexDict.update({'i_{}'.format(itemname): ItemsInRow})\n", " ItemsInRow+=1\n", " \n", "\n", " ###############################################\n", " # Iterate through words and construct objects #\n", " ###############################################\n", " \n", " for row in df.itertuples():\n", " WordNumber += 1\n", " FoundWords +=1\n", " \n", " # Detect and act upon changes in sentences, verse and chapter \n", " # the order of terminating and creating the nodes is critical: \n", " # close verse - close chapter - open chapter - open verse \n", " NumberOfParents = sanitize(row[IndexDict.get(\"i_parents\")])\n", " ThisSentence=int(row[IndexDict.get(\"i_Parent{}SN\".format(NumberOfParents-1))])\n", " ThisVerse = sanitize(row[IndexDict.get(\"i_verse\")])\n", " ThisChapter = sanitize(row[IndexDict.get(\"i_chapter\")])\n", " if (ThisSentence!=PreviousSentence):\n", " #cv.feature(ThisSentencePointer, statdata?)\n", " cv.terminate(ThisSentencePointer)\n", " \n", " if (ThisVerse!=PreviousVerse):\n", " #cv.feature(ThisVersePointer, statdata?)\n", " cv.terminate(ThisVersePointer)\n", "\n", " if (ThisChapter!=PreviousChapter):\n", " #cv.feature(ThisChapterPointer, statdata?)\n", " cv.terminate(ThisChapterPointer)\n", " PreviousChapter = ThisChapter\n", " ThisChapterPointer = cv.node('chapter')\n", " cv.feature(ThisChapterPointer, chapter=ThisChapter)\n", " \n", " if (ThisVerse!=PreviousVerse):\n", " PreviousVerse = ThisVerse \n", " ThisVersePointer = cv.node('verse')\n", " cv.feature(ThisVersePointer, verse=ThisVerse, chapter=ThisChapter)\n", " \n", " if (ThisSentence!=PreviousSentence):\n", " PreviousSentence=ThisSentence\n", " ThisSentencePointer = cv.node('sentence')\n", " cv.feature(ThisSentencePointer, verse=ThisVerse, chapter=ThisChapter) \n", "\n", " \n", " ###############################################\n", " # analyze and process tags #\n", " ###############################################\n", " \n", " PrevWordGroupList=WordGroupList\n", " WordGroupList=[] # stores current active WordGroup numbers\n", "\n", " for i in range(NumberOfParents-2,0,-1): # important: reversed itteration!\n", " _WGN=row[IndexDict.get(\"i_Parent{}WGN\".format(i))]\n", " if isinstance(_WGN, type(None)): \n", " # handling conditions where XML data has e.g. Acts 26:12\n", " # to recover, we need to create a dummy WG with a sufficient high WGN so it can never match any real WGN. \n", " WGN=DummyWGN\n", " else:\n", " WGN=int(_WGN)\n", " if WGN!='':\n", " WordGroupList.append(WGN)\n", " WordGroupDict[(WGN,0)]=WGN\n", " WGclass=sanitize(row[IndexDict.get(\"i_Parent{}Class\".format(i))])\n", " WGrule=sanitize(row[IndexDict.get(\"i_Parent{}Rule\".format(i))])\n", " WGtype=sanitize(row[IndexDict.get(\"i_Parent{}Type\".format(i))])\n", " if WGclass==WGrule==WGtype=='':\n", " WGclass='to be skipped?'\n", " if WGrule[-2:]=='CL' and WGclass=='': \n", " WGclass='cl*' # to simulate the way Logos presents this condition\n", " WordGroupDict[(WGN,6)]=WGclass\n", " WordGroupDict[(WGN,1)]=WGrule\n", " WordGroupDict[(WGN,8)]=WGtype\n", " WordGroupDict[(WGN,3)]=sanitize(row[IndexDict.get(\"i_Parent{}Junction\".format(i))])\n", " WordGroupDict[(WGN,2)]=sanitize(row[IndexDict.get(\"i_Parent{}Cltype\".format(i))])\n", " WordGroupDict[(WGN,7)]=sanitize(row[IndexDict.get(\"i_Parent{}Role\".format(i))])\n", "\n", " WordGroupDict[(WGN,9)]=sanitize(row[IndexDict.get(\"i_Parent{}Appos\".format(i))]) \n", " WordGroupDict[(WGN,10)]=NumberOfParents-1-i # = number of parent wordgroups \n", " if not PrevWordGroupList==WordGroupList:\n", " if RootWordGroup != WordGroupList[0]:\n", " RootWordGroup = WordGroupList[0]\n", " SuspendableWordGoupList = []\n", " # we have a new sentence. rebuild suspendable wordgroup list\n", " # some cleaning of data may be added here to save on memmory... \n", " #for k in range(6): del WordGroupDict[item,k]\n", " for item in reversed(PrevWordGroupList):\n", " if (item not in WordGroupList):\n", " # CLOSE/SUSPEND CASE\n", " SuspendableWordGoupList.append(item)\n", " cv.terminate(WordGroupDict[item,4])\n", " for item in WordGroupList:\n", " if (item not in PrevWordGroupList):\n", " if (item in SuspendableWordGoupList):\n", " # RESUME CASE\n", " #print ('\\n resume: '+str(item),end=' ')\n", " cv.resume(WordGroupDict[(item,4)])\n", " else:\n", " # CREATE CASE\n", " #print ('\\n create: '+str(item),end=' ')\n", " WordGroupDict[(item,4)]=cv.node('wg')\n", " WordGroupDict[(item,5)]=WordGroupTrack\n", " WordGroupTrack += 1\n", " cv.feature(WordGroupDict[(item,4)], wgnum=WordGroupDict[(item,0)], junction=WordGroupDict[(item,3)], \n", " clausetype=WordGroupDict[(item,2)], rule=WordGroupDict[(item,1)], wgclass=WordGroupDict[(item,6)], \n", " wgrole=WordGroupDict[(item,7)],wgrolelong=ExpandRole(WordGroupDict[(item,7)]),\n", " wgtype=WordGroupDict[(item,8)],appos=WordGroupDict[(item,8)],wglevel=WordGroupDict[(item,10)])\n", "\n", " \n", " \n", " # These roles are performed either by a WG or just a single word.\n", " Role=row[IndexDict.get(\"i_role\")]\n", " ValidRoles=[\"adv\",\"io\",\"o\",\"o2\",\"s\",\"p\",\"v\",\"vc\",\"aux\"]\n", " DistanceToRoleClause=0\n", " if isinstance (Role,str) and Role in ValidRoles: \n", " # role is assign to this word (uniqely)\n", " WordRole=Role\n", " WordRoleLong=ExpandRole(WordRole)\n", " else:\n", " # role details needs to be taken from some uptree wordgroup \n", " WordRole=WordRoleLong=''\n", " for item in range(1,NumberOfParents-1):\n", " Role = sanitize(row[IndexDict.get(\"i_Parent{}Role\".format(item))])\n", " if isinstance (Role,str) and Role in ValidRoles: \n", " WordRole=Role \n", " WordRoleLong=ExpandRole(WordRole)\n", " DistanceToRoleClause=item\n", " break\n", " \n", " # find the number of the WG containing the clause definition\n", " for item in range(1,NumberOfParents-1):\n", " WGrule = sanitize(row[IndexDict.get(\"i_Parent{}Rule\".format(item))])\n", " if row[IndexDict.get(\"i_Parent{}Class\".format(item))]=='cl' or WGrule[-2:]=='CL': \n", " ContainedClause=sanitize(row[IndexDict.get(\"i_Parent{}WGN\".format(item))])\n", " break\n", "\n", " \n", "\n", " ###############################################\n", " # analyze and process tags #\n", " ###############################################\n", " \n", " # determine syntactic categories at word level. \n", " PartOfSpeech=sanitize(row[IndexDict.get(\"i_class\")])\n", " PartOfSpeechFull=ExpandSP(PartOfSpeech)\n", " \n", " # some attributes are not present inside some (small) books. The following is to prevent exceptions.\n", " degree='' \n", " if 'i_degree' in IndexDict: degree=sanitize(row[IndexDict.get(\"i_degree\")]) \n", " subjref=''\n", " if 'i_subjref' in IndexDict: subjref=sanitize(row[IndexDict.get(\"i_subjref\")]) \n", "\n", " \n", " # create the word slots\n", " this_word = cv.slot()\n", " cv.feature(this_word, \n", " after= sanitize(row[IndexDict.get(\"i_after\")]),\n", " unicode= sanitize(row[IndexDict.get(\"i_unicode\")]),\n", " word= sanitize(row[IndexDict.get(\"i_word\")]),\n", " monad= sanitize(row[IndexDict.get(\"i_monad\")]),\n", " orig_order= FoundWords,\n", " book_long= sanitize(row[IndexDict.get(\"i_book_long\")]),\n", " booknumber= BookNumber,\n", " bookshort= sanitize(row[IndexDict.get(\"i_book_short\")]),\n", " chapter= ThisChapter,\n", " ref= sanitize(row[IndexDict.get(\"i_ref\")]),\n", " sp= PartOfSpeech,\n", " sp_full= PartOfSpeechFull,\n", " verse= ThisVerse,\n", " sentence= ThisSentence,\n", " normalized= sanitize(row[IndexDict.get(\"i_normalized\")]),\n", " morph= sanitize(row[IndexDict.get(\"i_morph\")]),\n", " strongs= sanitize(row[IndexDict.get(\"i_strong\")]),\n", " lex_dom= sanitize(row[IndexDict.get(\"i_domain\")]),\n", " ln= sanitize(row[IndexDict.get(\"i_ln\")]),\n", " gloss= sanitize(row[IndexDict.get(\"i_gloss\")]),\n", " gn= sanitize(row[IndexDict.get(\"i_gender\")]),\n", " nu= sanitize(row[IndexDict.get(\"i_number\")]),\n", " case= sanitize(row[IndexDict.get(\"i_case\")]),\n", " lemma= sanitize(row[IndexDict.get(\"i_lemma\")]),\n", " person= sanitize(row[IndexDict.get(\"i_person\")]),\n", " mood= sanitize(row[IndexDict.get(\"i_mood\")]),\n", " tense= sanitize(row[IndexDict.get(\"i_tense\")]),\n", " number= sanitize(row[IndexDict.get(\"i_number\")]),\n", " voice= sanitize(row[IndexDict.get(\"i_voice\")]),\n", " degree= degree,\n", " type= sanitize(row[IndexDict.get(\"i_type\")]),\n", " reference= sanitize(row[IndexDict.get(\"i_ref\")]), \n", " subj_ref= subjref,\n", " nodeID= sanitize(row[4]), #this is a fixed position in dataframe\n", " wordrole= WordRole,\n", " wordrolelong= WordRoleLong,\n", " wordlevel= NumberOfParents-1,\n", " roleclausedistance = DistanceToRoleClause,\n", " containedclause = ContainedClause\n", " )\n", " cv.terminate(this_word)\n", "\n", " \n", " '''\n", " wrap up the book. At the end of the book we need to close all nodes in proper order.\n", " ''' \n", " # close all open WordGroup nodes\n", " for item in WordGroupList:\n", " #cv.feature(WordGroupDict[(item,4)], add some stats?)\n", " cv.terminate(WordGroupDict[item,4])\n", " #cv.feature(ThisSentencePointer, statdata?)\n", " cv.terminate(ThisSentencePointer)\n", " #cv.feature(ThisVersePointer, statdata?)\n", " cv.terminate(ThisVersePointer)\n", " #cv.feature(ThisChapterPonter, statdata?)\n", " cv.terminate(ThisChapterPointer) \n", " #cv.feature(ThisBookPointer, statdata?)\n", " cv.terminate(ThisBookPointer)\n", "\n", " # clear dataframe for this book, clear the index dictionary\n", " del df\n", " IndexDict.clear()\n", " gc.collect()\n", " \n", " ###############################################\n", " # end of section executed for each book #\n", " ###############################################\n", "\n", " ###############################################\n", " # end of director function #\n", " ###############################################\n", " \n", "###############################################\n", "# Output definitions #\n", "###############################################\n", " \n", "slotType = 'word' \n", "otext = { # dictionary of config data for sections and text formats\n", " 'fmt:text-orig-full':'{word}{after}',\n", " 'sectionTypes':'book,chapter,verse',\n", " 'sectionFeatures':'book,chapter,verse',\n", " 'structureFeatures': 'book,chapter,verse',\n", " 'structureTypes': 'book,chapter,verse',\n", " }\n", "\n", "# configure metadata\n", "generic = { # dictionary of metadata meant for all features\n", " 'Name': 'Greek New Testament (Nestle 1904 based on Low Fat Tree)',\n", " 'Editors': 'Eberhard Nestle',\n", " 'Data source': 'MACULA Greek Linguistic Datasets, available at https://github.com/Clear-Bible/macula-greek/tree/main/Nestle1904/lowfat',\n", " 'Availability': 'Creative Commons Attribution 4.0 International (CC BY 4.0)', \n", " 'Converter_author': 'Tony Jurg, ReMa Student Vrije Universiteit Amsterdam, Netherlands', \n", " 'Converter_execution': 'Tony Jurg, ReMa Student Vrije Universiteit Amsterdam, Netherlands', \n", " 'Convertor_source': 'https://github.com/tonyjurg/Nestle1904LFT/tree/main/tools',\n", " 'Converter_version': '{}'.format(version),\n", " 'TextFabric version': '{}'.format(VERSION) #imported from tf.parameters\n", " }\n", "\n", "# set of integer valued feature names\n", "intFeatures = { \n", " 'booknumber',\n", " 'chapter',\n", " 'verse',\n", " 'sentence',\n", " 'wgnum',\n", " 'orig_order',\n", " 'monad',\n", " 'wglevel'\n", " }\n", "\n", "# per feature dicts with metadata\n", "featureMeta = { \n", " 'after': {'description': 'Characters (eg. punctuations) following the word'},\n", " 'book': {'description': 'Book'},\n", " 'book_long': {'description': 'Book name (fully spelled out)'},\n", " 'booknumber': {'description': 'NT book number (Matthew=1, Mark=2, ..., Revelation=27)'},\n", " 'bookshort': {'description': 'Book name (abbreviated)'},\n", " 'chapter': {'description': 'Chapter number inside book'},\n", " 'verse': {'description': 'Verse number inside chapter'},\n", " 'sentence': {'description': 'Sentence number (counted per chapter)'},\n", " 'type': {'description': 'Wordgroup type information (verb, verbless, elided, minor, etc.)'},\n", " 'rule': {'description': 'Wordgroup rule information '},\n", " 'orig_order': {'description': 'Word order within corpus (per book)'},\n", " 'monad': {'description': 'Monad (currently: order of words in XML tree file!)'},\n", " 'word': {'description': 'Word as it appears in the text (excl. punctuations)'},\n", " 'unicode': {'description': 'Word as it arears in the text in Unicode (incl. punctuations)'},\n", " 'ref': {'description': 'ref Id'},\n", " 'sp': {'description': 'Part of Speech (abbreviated)'},\n", " 'sp_full': {'description': 'Part of Speech (long description)'}, \n", " 'normalized': {'description': 'Surface word stripped of punctations'},\n", " 'lemma': {'description': 'Lexeme (lemma)'},\n", " 'morph': {'description': 'Morphological tag (Sandborg-Petersen morphology)'},\n", " # see also discussion on relation between lex_dom and ln \n", " # @ https://github.com/Clear-Bible/macula-greek/issues/29\n", " 'lex_dom': {'description': 'Lexical domain according to Semantic Dictionary of Biblical Greek, SDBG (not present everywhere?)'},\n", " 'ln': {'description': 'Lauw-Nida lexical classification (not present everywhere?)'},\n", " 'strongs': {'description': 'Strongs number'},\n", " 'gloss': {'description': 'English gloss'},\n", " 'gn': {'description': 'Gramatical gender (Masculine, Feminine, Neuter)'},\n", " 'nu': {'description': 'Gramatical number (Singular, Plural)'},\n", " 'case': {'description': 'Gramatical case (Nominative, Genitive, Dative, Accusative, Vocative)'},\n", " 'person': {'description': 'Gramatical person of the verb (first, second, third)'},\n", " 'mood': {'description': 'Gramatical mood of the verb (passive, etc)'},\n", " 'tense': {'description': 'Gramatical tense of the verb (e.g. Present, Aorist)'},\n", " 'number': {'description': 'Gramatical number of the verb'},\n", " 'voice': {'description': 'Gramatical voice of the verb'},\n", " 'degree': {'description': 'Degree (e.g. Comparitative, Superlative)'},\n", " 'type': {'description': 'Gramatical type of noun or pronoun (e.g. Common, Personal)'},\n", " 'reference': {'description': 'Reference (to nodeID in XML source data, not yet post-processes)'},\n", " 'subj_ref': {'description': 'Subject reference (to nodeID in XML source data, not yet post-processes)'},\n", " 'nodeID': {'description': 'Node ID (as in the XML source data, not yet post-processes)'},\n", " 'junction': {'description': 'Junction data related to a wordgroup'},\n", " 'wgnum': {'description': 'Wordgroup number (counted per book)'},\n", " 'wgclass': {'description': 'Class of the wordgroup ()'},\n", " 'wgrole': {'description': 'Role of the wordgroup (abbreviated)'},\n", " 'wgrolelong': {'description': 'Role of the wordgroup (full)'},\n", " 'wordrole': {'description': 'Role of the word (abbreviated)'},\n", " 'wordrolelong':{'description': 'Role of the word (full)'},\n", " 'wgtype': {'description': 'Wordgroup type details'},\n", " 'clausetype': {'description': 'Clause type details'},\n", " 'appos': {'description': 'Apposition details'},\n", " 'wglevel': {'description': 'number of parent wordgroups for a wordgroup'},\n", " 'wordlevel': {'description': 'number of parent wordgroups for a word'},\n", " 'roleclausedistance': {'description': 'distance to wordgroup defining the role of this word'},\n", " 'containedclause': {'description': 'Contained clause (WG number)'} \n", " }\n", "\n", "\n", "###############################################\n", "# the main function #\n", "###############################################\n", "\n", "good = cv.walk(\n", " director,\n", " slotType,\n", " otext=otext,\n", " generic=generic,\n", " intFeatures=intFeatures,\n", " featureMeta=featureMeta,\n", " warn=False,\n", " force=False\n", ")\n", "\n", "if good:\n", " print (\"done\")" ] }, { "cell_type": "markdown", "metadata": { "tags": [], "toc": true }, "source": [ "## 5: Basic testing the textfabric data \n", "##### [back to TOC](#TOC)" ] }, { "cell_type": "markdown", "metadata": { "tags": [] }, "source": [ "### Step 1 load the TF data\n", "\n", "The TF will be loaded from github repository https://github.com/tonyjurg/Nestle1904LFT" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "%load_ext autoreload\n", "%autoreload 2" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2022-10-21T02:32:54.197994Z", "start_time": "2022-10-21T02:32:53.217806Z" } }, "outputs": [], "source": [ "# First, I have to laod different modules that I use for analyzing the data and for plotting:\n", "import sys, os, collections\n", "import pandas as pd\n", "import numpy as np\n", "import re\n", "\n", "\n", "from tf.fabric import Fabric\n", "from tf.app import use\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following cell loads the TextFabric files from github repository. " ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "ExecuteTime": { "end_time": "2022-10-21T02:32:55.906200Z", "start_time": "2022-10-21T02:32:55.012231Z" } }, "outputs": [ { "data": { "text/markdown": [ "**Locating corpus resources ...**" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "app: ~/github/tonyjurg/Nestle1904LFT/app" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "data: ~/text-fabric-data/github/tonyjurg/Nestle1904LFT/tf/0.2" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", " Text-Fabric: Text-Fabric API 11.4.10, tonyjurg/Nestle1904LFT/app v3, Search Reference
\n", " Data: tonyjurg - Nestle1904LFT 0.2, Character table, Feature docs
\n", "
Node types\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " \n", " \n", "\n", "
Name# of nodes# slots/node% coverage
book275102.93100
chapter260529.92100
verse794317.35100
sentence1216011.33100
wg1324606.59633
word1377791.00100
\n", " Sets: no custom sets
\n", " Features:
\n", "
Nestle 1904\n", "
\n", "\n", "
\n", "
\n", "after\n", "
\n", "
str
\n", "\n", " Characters (eg. punctuations) following the word\n", "\n", "
\n", "\n", "
\n", "
\n", "appos\n", "
\n", "
str
\n", "\n", " Apposition details\n", "\n", "
\n", "\n", "
\n", "
\n", "book\n", "
\n", "
str
\n", "\n", " Book\n", "\n", "
\n", "\n", "
\n", "
\n", "book_long\n", "
\n", "
str
\n", "\n", " Book name (fully spelled out)\n", "\n", "
\n", "\n", "
\n", "
\n", "booknumber\n", "
\n", "
int
\n", "\n", " NT book number (Matthew=1, Mark=2, ..., Revelation=27)\n", "\n", "
\n", "\n", "
\n", "
\n", "bookshort\n", "
\n", "
str
\n", "\n", " Book name (abbreviated)\n", "\n", "
\n", "\n", "
\n", "
\n", "case\n", "
\n", "
str
\n", "\n", " Gramatical case (Nominative, Genitive, Dative, Accusative, Vocative)\n", "\n", "
\n", "\n", "
\n", "
\n", "chapter\n", "
\n", "
int
\n", "\n", " Chapter number inside book\n", "\n", "
\n", "\n", "
\n", "
\n", "clausetype\n", "
\n", "
str
\n", "\n", " Clause type details\n", "\n", "
\n", "\n", "
\n", "
\n", "containedclause\n", "
\n", "
str
\n", "\n", " Contained clause (WG number)\n", "\n", "
\n", "\n", "
\n", "
\n", "degree\n", "
\n", "
str
\n", "\n", " Degree (e.g. Comparitative, Superlative)\n", "\n", "
\n", "\n", "
\n", "
\n", "gloss\n", "
\n", "
str
\n", "\n", " English gloss\n", "\n", "
\n", "\n", "
\n", "
\n", "gn\n", "
\n", "
str
\n", "\n", " Gramatical gender (Masculine, Feminine, Neuter)\n", "\n", "
\n", "\n", "
\n", "
\n", "id\n", "
\n", "
str
\n", "\n", " id of the word\n", "\n", "
\n", "\n", "
\n", "
\n", "junction\n", "
\n", "
str
\n", "\n", " Junction data related to a wordgroup\n", "\n", "
\n", "\n", "
\n", "
\n", "lemma\n", "
\n", "
str
\n", "\n", " Lexeme (lemma)\n", "\n", "
\n", "\n", "
\n", "
\n", "lex_dom\n", "
\n", "
str
\n", "\n", " Lexical domain according to Semantic Dictionary of Biblical Greek, SDBG (not present everywhere?)\n", "\n", "
\n", "\n", "
\n", "
\n", "ln\n", "
\n", "
str
\n", "\n", " Lauw-Nida lexical classification (not present everywhere?)\n", "\n", "
\n", "\n", "
\n", "
\n", "monad\n", "
\n", "
int
\n", "\n", " Monad (currently: order of words in XML tree file!)\n", "\n", "
\n", "\n", "
\n", "
\n", "mood\n", "
\n", "
str
\n", "\n", " Gramatical mood of the verb (passive, etc)\n", "\n", "
\n", "\n", "
\n", "
\n", "morph\n", "
\n", "
str
\n", "\n", " Morphological tag (Sandborg-Petersen morphology)\n", "\n", "
\n", "\n", "
\n", "
\n", "nodeID\n", "
\n", "
str
\n", "\n", " Node ID (as in the XML source data, not yet post-processes)\n", "\n", "
\n", "\n", "
\n", "
\n", "normalized\n", "
\n", "
str
\n", "\n", " Surface word stripped of punctations\n", "\n", "
\n", "\n", "
\n", "
\n", "nu\n", "
\n", "
str
\n", "\n", " Gramatical number (Singular, Plural)\n", "\n", "
\n", "\n", "
\n", "
\n", "number\n", "
\n", "
str
\n", "\n", " Gramatical number of the verb\n", "\n", "
\n", "\n", "
\n", "
\n", "orig_order\n", "
\n", "
int
\n", "\n", " Word order within corpus (per book)\n", "\n", "
\n", "\n", "
\n", "
\n", "otype\n", "
\n", "
str
\n", "\n", " \n", "\n", "
\n", "\n", "
\n", "
\n", "person\n", "
\n", "
str
\n", "\n", " Gramatical person of the verb (first, second, third)\n", "\n", "
\n", "\n", "
\n", "
\n", "ref\n", "
\n", "
str
\n", "\n", " ref Id\n", "\n", "
\n", "\n", "
\n", "
\n", "roleclausedistance\n", "
\n", "
str
\n", "\n", " distance to wordgroup defining the role of this word\n", "\n", "
\n", "\n", "
\n", "
\n", "rule\n", "
\n", "
str
\n", "\n", " Wordgroup rule information \n", "\n", "
\n", "\n", "
\n", "
\n", "sentence\n", "
\n", "
int
\n", "\n", " Sentence number (counted per chapter)\n", "\n", "
\n", "\n", "
\n", "
\n", "sp\n", "
\n", "
str
\n", "\n", " Part of Speech (abbreviated)\n", "\n", "
\n", "\n", "
\n", "
\n", "sp_full\n", "
\n", "
str
\n", "\n", " Part of Speech (long description)\n", "\n", "
\n", "\n", "
\n", "
\n", "strongs\n", "
\n", "
str
\n", "\n", " Strongs number\n", "\n", "
\n", "\n", "
\n", "
\n", "subj_ref\n", "
\n", "
str
\n", "\n", " Subject reference (to nodeID in XML source data, not yet post-processes)\n", "\n", "
\n", "\n", "
\n", "
\n", "tense\n", "
\n", "
str
\n", "\n", " Gramatical tense of the verb (e.g. Present, Aorist)\n", "\n", "
\n", "\n", "
\n", "
\n", "type\n", "
\n", "
str
\n", "\n", " Gramatical type of noun or pronoun (e.g. Common, Personal)\n", "\n", "
\n", "\n", "
\n", "
\n", "unicode\n", "
\n", "
str
\n", "\n", " Word as it arears in the text in Unicode (incl. punctuations)\n", "\n", "
\n", "\n", "
\n", "
\n", "verse\n", "
\n", "
int
\n", "\n", " Verse number inside chapter\n", "\n", "
\n", "\n", "
\n", "
\n", "voice\n", "
\n", "
str
\n", "\n", " Gramatical voice of the verb\n", "\n", "
\n", "\n", "
\n", "
\n", "wgclass\n", "
\n", "
str
\n", "\n", " Class of the wordgroup ()\n", "\n", "
\n", "\n", "
\n", "
\n", "wglevel\n", "
\n", "
int
\n", "\n", " number of parent wordgroups for a wordgroup\n", "\n", "
\n", "\n", "
\n", "
\n", "wgnum\n", "
\n", "
int
\n", "\n", " Wordgroup number (counted per book)\n", "\n", "
\n", "\n", "
\n", "
\n", "wgrole\n", "
\n", "
str
\n", "\n", " Role of the wordgroup (abbreviated)\n", "\n", "
\n", "\n", "
\n", "
\n", "wgrolelong\n", "
\n", "
str
\n", "\n", " Role of the wordgroup (full)\n", "\n", "
\n", "\n", "
\n", "
\n", "wgtype\n", "
\n", "
str
\n", "\n", " Wordgroup type details\n", "\n", "
\n", "\n", "
\n", "
\n", "word\n", "
\n", "
str
\n", "\n", " Word as it appears in the text (excl. punctuations)\n", "\n", "
\n", "\n", "
\n", "
\n", "wordgroup\n", "
\n", "
int
\n", "\n", " Wordgroup number (counted per book)\n", "\n", "
\n", "\n", "
\n", "
\n", "wordlevel\n", "
\n", "
str
\n", "\n", " number of parent wordgroups for a word\n", "\n", "
\n", "\n", "
\n", "
\n", "wordrole\n", "
\n", "
str
\n", "\n", " Role of the word (abbreviated)\n", "\n", "
\n", "\n", "
\n", "
\n", "wordrolelong\n", "
\n", "
str
\n", "\n", " Role of the word (full)\n", "\n", "
\n", "\n", "
\n", "
\n", "oslots\n", "
\n", "
none
\n", "\n", " \n", "\n", "
\n", "\n", "
\n", "
\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
Text-Fabric API: names N F E L T S C TF directly usable

" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Loading-the-New-Testament-Text-Fabric\n", "N1904 = use (\"tonyjurg/Nestle1904LFT:clone\", version=\"0.2\", hoist=globals())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Basic testing of the textfabric data\n", "##### [Back to TOC](#TOC)\n", "\n", "### Some basic display \n", "\n", "note: the implementation with regards how phrases need to be displayed (esp. with regards to conjunctions) is still to be done." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 0.34s 3 results\n" ] } ], "source": [ "Search0 = '''\n", "book book=Matthew\n", " chapter chapter=1\n", " verse verse=20\n", " wg1:wg wgclass=cl wglevel*\n", " a:word wordrole=v\n", " b:word wordrole=o\n", "a .containedclause. b\n", "'''\n", "Search0 = NA.search(Search0)\n", "N1904.show(Search0, start=20, end=21, condensed=True, extraFeatures={'containedclause','wordrole', 'roleclausedistance'}, suppress={'chapter'}, withNodes=False)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 0.34s 440 results\n" ] }, { "data": { "text/html": [ "

verse 1" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

Matthew 1:10
verse 10
sentence
wg
wgclass=to be skipped?
wg Conj-CL
wgclass=cl*
wg Conj14CL
wgclass=cl*
wg
wg S-V-O coordinate
wgclass=cl
Ἐζεκίας
containedclause=101roleclausedistance=0wordrole=s
wg
wg S-V-O coordinate
wgclass=cl
wg DetNP Object
wgclass=np
Ἀμώς,
containedclause=104roleclausedistance=1wordrole=o
wg
wg S-V-O coordinate
wgclass=cl
Ἀμὼς
containedclause=107roleclausedistance=0wordrole=s
δὲ
containedclause=67roleclausedistance=0
wg S-V-O coordinate
wgclass=cl
ἐγέννησεν
containedclause=107roleclausedistance=0wordrole=v
wg DetNP Object
wgclass=np
τὸν
containedclause=107roleclausedistance=1wordrole=o
Ἰωσείαν,
containedclause=107roleclausedistance=1wordrole=o
wg
δὲ
containedclause=67roleclausedistance=0
wg S-V-O coordinate
wgclass=cl
ἐγέννησεν
containedclause=101roleclausedistance=0wordrole=v
wg DetNP Object
wgclass=np
τὸν
containedclause=101roleclausedistance=1wordrole=o
Μανασσῆ,
containedclause=101roleclausedistance=1wordrole=o
wg
wg S-V-O coordinate
wgclass=cl
Μανασσῆς
containedclause=104roleclausedistance=0wordrole=s
δὲ
containedclause=67roleclausedistance=0
wg S-V-O coordinate
wgclass=cl
ἐγέννησεν
containedclause=104roleclausedistance=0wordrole=v
wg DetNP Object
wgclass=np
τὸν
containedclause=104roleclausedistance=1wordrole=o
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

verse 2" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

Matthew 1:11
verse 11
sentence
wg
wgclass=to be skipped?
wg Conj-CL
wgclass=cl*
wg Conj14CL
wgclass=cl*
wg
wg S-V-O-ADV coordinate
wgclass=cl
Ἰωσείας
containedclause=110roleclausedistance=0wordrole=s
wg PrepNp Adverbial
wgclass=pp
ἐπὶ
containedclause=110roleclausedistance=1wordrole=adv
wg DetNP
wgclass=np
τῆς
containedclause=110roleclausedistance=2wordrole=adv
wg NPofNP
wgclass=np
μετοικεσίας
containedclause=110roleclausedistance=3wordrole=adv
Βαβυλῶνος.
containedclause=110roleclausedistance=3wordrole=adv
δὲ
containedclause=67roleclausedistance=0
wg S-V-O-ADV coordinate
wgclass=cl
ἐγέννησεν
containedclause=110roleclausedistance=0wordrole=v
wg NpaNp Object
wg DetNP
wgclass=np
τὸν
containedclause=110roleclausedistance=2wordrole=o
Ἰεχονίαν
containedclause=110roleclausedistance=2wordrole=o
wg
καὶ
containedclause=110roleclausedistance=2wordrole=o
wg DetNP
wgclass=np
τοὺς
containedclause=110roleclausedistance=3wordrole=o
wg NPofNP
wgclass=np
ἀδελφοὺς
containedclause=110roleclausedistance=4wordrole=o
αὐτοῦ
containedclause=110roleclausedistance=4wordrole=o
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

verse 3" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

Matthew 1:12
verse 12
sentence
wg
wgclass=to be skipped?
wg Conj-CL
wgclass=cl*
wg Conj12CL
wgclass=cl*
wg ADV-S-V-O coordinate
wgclass=cl
wg PrepNp Adverbial
wgclass=pp
Μετὰ
containedclause=122roleclausedistance=1wordrole=adv
wg
wg S-V-O coordinate
wgclass=cl
Σαλαθιὴλ
containedclause=128roleclausedistance=0wordrole=s
δὲ
containedclause=121roleclausedistance=0
wg S-V-O coordinate
wgclass=cl
ἐγέννησεν
containedclause=128roleclausedistance=0wordrole=v
wg DetNP Object
wgclass=np
τὸν
containedclause=128roleclausedistance=1wordrole=o
Ζοροβαβέλ,
containedclause=128roleclausedistance=1wordrole=o
δὲ
containedclause=120roleclausedistance=0
wg Conj12CL
wgclass=cl*
wg ADV-S-V-O coordinate
wgclass=cl
wg PrepNp Adverbial
wgclass=pp
wg DetNP
wgclass=np
τὴν
containedclause=122roleclausedistance=2wordrole=adv
wg NPofNP
wgclass=np
μετοικεσίαν
containedclause=122roleclausedistance=3wordrole=adv
Βαβυλῶνος
containedclause=122roleclausedistance=3wordrole=adv
Ἰεχονίας
containedclause=122roleclausedistance=0wordrole=s
ἐγέννησεν
containedclause=122roleclausedistance=0wordrole=v
wg DetNP Object
wgclass=np
τὸν
containedclause=122roleclausedistance=1wordrole=o
Σαλαθιήλ,
containedclause=122roleclausedistance=1wordrole=o
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

verse 4" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

Matthew 1:13
verse 13
sentence
wg
wgclass=to be skipped?
wg Conj-CL
wgclass=cl*
wg Conj12CL
wgclass=cl*
wg
wg S-V-O coordinate
wgclass=cl
Ζοροβαβὲλ
containedclause=131roleclausedistance=0wordrole=s
wg
wg S-V-O coordinate
wgclass=cl
wg DetNP Object
wgclass=np
Ἐλιακείμ,
containedclause=134roleclausedistance=1wordrole=o
wg
wg S-V-O coordinate
wgclass=cl
Ἐλιακεὶμ
containedclause=137roleclausedistance=0wordrole=s
δὲ
containedclause=121roleclausedistance=0
wg S-V-O coordinate
wgclass=cl
ἐγέννησεν
containedclause=137roleclausedistance=0wordrole=v
wg DetNP Object
wgclass=np
τὸν
containedclause=137roleclausedistance=1wordrole=o
Ἀζώρ,
containedclause=137roleclausedistance=1wordrole=o
wg
δὲ
containedclause=121roleclausedistance=0
wg S-V-O coordinate
wgclass=cl
ἐγέννησεν
containedclause=131roleclausedistance=0wordrole=v
wg DetNP Object
wgclass=np
τὸν
containedclause=131roleclausedistance=1wordrole=o
Ἀβιούδ,
containedclause=131roleclausedistance=1wordrole=o
wg
wg S-V-O coordinate
wgclass=cl
Ἀβιοὺδ
containedclause=134roleclausedistance=0wordrole=s
δὲ
containedclause=121roleclausedistance=0
wg S-V-O coordinate
wgclass=cl
ἐγέννησεν
containedclause=134roleclausedistance=0wordrole=v
wg DetNP Object
wgclass=np
τὸν
containedclause=134roleclausedistance=1wordrole=o
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

verse 5" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

Matthew 1:14
verse 14
sentence
wg
wgclass=to be skipped?
wg Conj-CL
wgclass=cl*
wg Conj12CL
wgclass=cl*
wg
wg S-V-O coordinate
wgclass=cl
Ἀζὼρ
containedclause=140roleclausedistance=0wordrole=s
wg
wg S-V-O coordinate
wgclass=cl
wg DetNP Object
wgclass=np
Ἀχείμ,
containedclause=143roleclausedistance=1wordrole=o
wg
wg S-V-O coordinate
wgclass=cl
Ἀχεὶμ
containedclause=146roleclausedistance=0wordrole=s
δὲ
containedclause=121roleclausedistance=0
wg S-V-O coordinate
wgclass=cl
ἐγέννησεν
containedclause=146roleclausedistance=0wordrole=v
wg DetNP Object
wgclass=np
τὸν
containedclause=146roleclausedistance=1wordrole=o
Ἐλιούδ,
containedclause=146roleclausedistance=1wordrole=o
wg
δὲ
containedclause=121roleclausedistance=0
wg S-V-O coordinate
wgclass=cl
ἐγέννησεν
containedclause=140roleclausedistance=0wordrole=v
wg DetNP Object
wgclass=np
τὸν
containedclause=140roleclausedistance=1wordrole=o
Σαδώκ,
containedclause=140roleclausedistance=1wordrole=o
wg
wg S-V-O coordinate
wgclass=cl
Σαδὼκ
containedclause=143roleclausedistance=0wordrole=s
δὲ
containedclause=121roleclausedistance=0
wg S-V-O coordinate
wgclass=cl
ἐγέννησεν
containedclause=143roleclausedistance=0wordrole=v
wg DetNP Object
wgclass=np
τὸν
containedclause=143roleclausedistance=1wordrole=o
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

verse 6" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

Matthew 1:15
verse 15
sentence
wg
wgclass=to be skipped?
wg Conj-CL
wgclass=cl*
wg Conj12CL
wgclass=cl*
wg
wg S-V-O coordinate
wgclass=cl
Ἐλιοὺδ
containedclause=149roleclausedistance=0wordrole=s
wg
wg S-V-O coordinate
wgclass=cl
wg DetNP Object
wgclass=np
Μαθθάν,
containedclause=152roleclausedistance=1wordrole=o
wg
wg S-V-O coordinate
wgclass=cl
Μαθθὰν
containedclause=155roleclausedistance=0wordrole=s
δὲ
containedclause=121roleclausedistance=0
wg S-V-O coordinate
wgclass=cl
ἐγέννησεν
containedclause=155roleclausedistance=0wordrole=v
wg DetNP Object
wgclass=np
τὸν
containedclause=155roleclausedistance=1wordrole=o
Ἰακώβ,
containedclause=155roleclausedistance=1wordrole=o
wg
δὲ
containedclause=121roleclausedistance=0
wg S-V-O coordinate
wgclass=cl
ἐγέννησεν
containedclause=149roleclausedistance=0wordrole=v
wg DetNP Object
wgclass=np
τὸν
containedclause=149roleclausedistance=1wordrole=o
Ἐλεάζαρ,
containedclause=149roleclausedistance=1wordrole=o
wg
wg S-V-O coordinate
wgclass=cl
Ἐλεάζαρ
containedclause=152roleclausedistance=0wordrole=s
δὲ
containedclause=121roleclausedistance=0
wg S-V-O coordinate
wgclass=cl
ἐγέννησεν
containedclause=152roleclausedistance=0wordrole=v
wg DetNP Object
wgclass=np
τὸν
containedclause=152roleclausedistance=1wordrole=o
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

verse 7" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

Matthew 1:16
verse 16
sentence
wg
wgclass=to be skipped?
wg Conj-CL
wgclass=cl*
wg Conj12CL
wgclass=cl*
wg
wg S-V-O coordinate
wgclass=cl
Ἰακὼβ
containedclause=158roleclausedistance=0wordrole=s
wg Np-Appos Object
wg DetNP
wgclass=np
wg NPofNP
wgclass=np
wg NP-CL
wgclass=cl*
wg ADV-V-S
wgclass=cl
wg PrepNp Adverbial
wgclass=pp
ἧς
containedclause=164roleclausedistance=1wordrole=adv
ἐγεννήθη
containedclause=164roleclausedistance=0wordrole=v
wg Np-Appos Subject
Ἰησοῦς
containedclause=164roleclausedistance=1wordrole=s
wg DetCL
wgclass=cl*
containedclause=167roleclausedistance=2wordrole=s
wg VC-P
wgclass=cl
λεγόμενος
containedclause=168roleclausedistance=0wordrole=vc
Χριστός.
containedclause=168roleclausedistance=0wordrole=p
δὲ
containedclause=121roleclausedistance=0
wg S-V-O coordinate
wgclass=cl
ἐγέννησεν
containedclause=158roleclausedistance=0wordrole=v
wg Np-Appos Object
wg DetNP
wgclass=np
τὸν
containedclause=158roleclausedistance=2wordrole=o
Ἰωσὴφ
containedclause=158roleclausedistance=2wordrole=o
wg DetNP
wgclass=np
τὸν
containedclause=158roleclausedistance=2wordrole=o
wg NPofNP
wgclass=np
ἄνδρα
containedclause=158roleclausedistance=3wordrole=o
wg NP-CL
wgclass=cl*
Μαρίας,
containedclause=163roleclausedistance=4wordrole=o
wg ADV-V-S
wgclass=cl
wg PrepNp Adverbial
wgclass=pp
ἐξ
containedclause=164roleclausedistance=1wordrole=adv
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

verse 8" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

Matthew 1:19
verse 19
sentence
wg
wgclass=to be skipped?
wg Conj-CL
wgclass=cl*
wg S-ADV-V-O
wgclass=cl
wg Np-Appos Subject
Ἰωσὴφ
containedclause=221roleclausedistance=1wordrole=s
wg CLaCL Adverbial subordinate
wgclass=cl*
wg
wg ADV-V-O coordinate
wgclass=cl
θέλων
containedclause=228roleclausedistance=0wordrole=v
wg O-V Object subordinate
wgclass=cl
αὐτὴν
containedclause=229roleclausedistance=0wordrole=o
δειγματίσαι,
containedclause=229roleclausedistance=0wordrole=v
ἐβουλήθη
containedclause=221roleclausedistance=0wordrole=v
wg ADV-V-O Object subordinate
wgclass=cl
λάθρᾳ
containedclause=230roleclausedistance=0wordrole=adv
ἀπολῦσαι
containedclause=230roleclausedistance=0wordrole=v
αὐτήν.
containedclause=230roleclausedistance=0wordrole=o
δὲ
containedclause=220roleclausedistance=0
wg S-ADV-V-O
wgclass=cl
wg Np-Appos Subject
wg DetNP
wgclass=np
containedclause=221roleclausedistance=2wordrole=s
wg NPofNP
wgclass=np
ἀνὴρ
containedclause=221roleclausedistance=3wordrole=s
αὐτῆς,
containedclause=221roleclausedistance=3wordrole=s
wg CLaCL Adverbial subordinate
wgclass=cl*
wg P-VC coordinate
wgclass=cl
δίκαιος
containedclause=226roleclausedistance=0wordrole=p
ὢν
containedclause=226roleclausedistance=0wordrole=vc
wg
καὶ
containedclause=225roleclausedistance=2wordrole=adv
wg ADV-V-O coordinate
wgclass=cl
μὴ
containedclause=228roleclausedistance=0wordrole=adv
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

verse 9" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

Matthew 1:2
verse 2
sentence
wg
wgclass=to be skipped?
wg Conj13CL
wgclass=cl*
wg S-V-O coordinate
wgclass=cl
Ἀβραὰμ
containedclause=12roleclausedistance=0wordrole=s
wg
wg S-V-O coordinate
wgclass=cl
Ἰακὼβ
containedclause=18roleclausedistance=0wordrole=s
δὲ
containedclause=11roleclausedistance=0
wg S-V-O coordinate
wgclass=cl
ἐγέννησεν
containedclause=18roleclausedistance=0wordrole=v
wg NpaNp Object
wg DetNP
wgclass=np
τὸν
containedclause=18roleclausedistance=2wordrole=o
Ἰούδαν
containedclause=18roleclausedistance=2wordrole=o
wg
καὶ
containedclause=18roleclausedistance=2wordrole=o
wg DetNP
wgclass=np
τοὺς
containedclause=18roleclausedistance=3wordrole=o
wg NPofNP
wgclass=np
ἀδελφοὺς
containedclause=18roleclausedistance=4wordrole=o
αὐτοῦ,
containedclause=18roleclausedistance=4wordrole=o
wg S-V-O coordinate
wgclass=cl
ἐγέννησεν
containedclause=12roleclausedistance=0wordrole=v
wg DetNP Object
wgclass=np
τὸν
containedclause=12roleclausedistance=1wordrole=o
Ἰσαάκ,
containedclause=12roleclausedistance=1wordrole=o
wg
wg S-V-O coordinate
wgclass=cl
Ἰσαὰκ
containedclause=15roleclausedistance=0wordrole=s
δὲ
containedclause=11roleclausedistance=0
wg S-V-O coordinate
wgclass=cl
ἐγέννησεν
containedclause=15roleclausedistance=0wordrole=v
wg DetNP Object
wgclass=np
τὸν
containedclause=15roleclausedistance=1wordrole=o
Ἰακώβ,
containedclause=15roleclausedistance=1wordrole=o
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

verse 10" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

Matthew 1:20
verse 20
sentence
wg
wgclass=to be skipped?
wg Conj-CL
wgclass=cl*
wg
wgclass=cl
wg O-S-V
wgclass=cl
ταῦτα
containedclause=234roleclausedistance=0wordrole=o
ἐφάνη
containedclause=233roleclausedistance=0wordrole=v
αὐτῷ
containedclause=233roleclausedistance=0wordrole=io
wg Adverbial
wgclass=cl
λέγων
containedclause=237roleclausedistance=0wordrole=v
wg CLaCL Object
wgclass=cl*
wg ClCl coordinate
wg
wgclass=cl
wg Np2CL Minor
wgclass=cl*
wg Np-Appos Auxiliar
Ἰωσὴφ
containedclause=241roleclausedistance=1wordrole=aux
wg NPofNP
wgclass=np
υἱὸς
containedclause=241roleclausedistance=2wordrole=aux
Δαυείδ,
containedclause=241roleclausedistance=2wordrole=aux
μὴ
containedclause=240roleclausedistance=0wordrole=adv
φοβηθῇς
containedclause=240roleclausedistance=0wordrole=v
wg V-O-O2 Object subordinate
wgclass=cl
παραλαβεῖν
containedclause=244roleclausedistance=0wordrole=v
Μαρίαν
containedclause=244roleclausedistance=0wordrole=o
δὲ
containedclause=232roleclausedistance=0
wg
wgclass=cl
wg Adverbial
wgclass=cl
wg CLaCL Object
wgclass=cl*
wg ClCl coordinate
wg
wgclass=cl
wg V-O-O2 Object subordinate
wgclass=cl
wg DetNP Second Object
wgclass=np
τὴν
containedclause=244roleclausedistance=1wordrole=o2
wg NPofNP
wgclass=np
γυναῖκά
containedclause=244roleclausedistance=2wordrole=o2
σου,
containedclause=244roleclausedistance=2wordrole=o2
wg sub-CL
wgclass=cl*
wg S-P-VC subordinate
wgclass=cl
wg DetCL Subject
wgclass=cl*
τὸ
containedclause=249roleclausedistance=1wordrole=s
γὰρ
containedclause=247roleclausedistance=3wordrole=o
wg S-P-VC subordinate
wgclass=cl
wg DetCL Subject
wgclass=cl*
wg ADV-V
wgclass=cl
wg PrepNp Adverbial
wgclass=pp
ἐν
containedclause=250roleclausedistance=1wordrole=adv
αὐτῇ
containedclause=250roleclausedistance=1wordrole=adv
γεννηθὲν
containedclause=250roleclausedistance=0wordrole=v
wg PrepNp Predicate
wgclass=pp
ἐκ
containedclause=248roleclausedistance=1wordrole=p
wg NpAdjp
wgclass=np
Πνεύματός
containedclause=248roleclausedistance=2wordrole=p
wg O-S-V
wgclass=cl
αὐτοῦ
containedclause=234roleclausedistance=0wordrole=s
wg Adverbial
wgclass=cl
wg CLaCL Object
wgclass=cl*
wg ClCl coordinate
wg sub-CL
wgclass=cl*
wg S-P-VC subordinate
wgclass=cl
ἐστιν
containedclause=248roleclausedistance=0wordrole=vc
wg PrepNp Predicate
wgclass=pp
wg NpAdjp
wgclass=np
Ἁγίου·
containedclause=248roleclausedistance=2wordrole=p
wg O-S-V
wgclass=cl
ἐνθυμηθέντος
containedclause=234roleclausedistance=0wordrole=v
ἰδοὺ
containedclause=233roleclausedistance=0wordrole=aux
wg NPofNP Subject
wgclass=np
ἄγγελος
containedclause=233roleclausedistance=1wordrole=s
Κυρίου
containedclause=233roleclausedistance=1wordrole=s
wg PrepNp Adverbial
wgclass=pp
κατ’
containedclause=233roleclausedistance=1wordrole=adv
ὄναρ
containedclause=233roleclausedistance=1wordrole=adv
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

verse 11" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

Matthew 1:21
verse 21
sentence
wg
wgclass=to be skipped?
wg Conj-CL
wgclass=cl*
wg
wgclass=cl
wg Adverbial
wgclass=cl
wg CLaCL Object
wgclass=cl*
wg
wg CLaCL coordinate
wgclass=cl*
wg V-O coordinate
wgclass=cl
τέξεται
containedclause=256roleclausedistance=0wordrole=v
wg
wg
wgclass=cl
wg sub-CL Adverbial
wgclass=cl*
wg S-V-O-ADV subordinate
wgclass=cl
αὐτὸς
containedclause=262roleclausedistance=0wordrole=s
γὰρ
containedclause=261roleclausedistance=1wordrole=adv
wg S-V-O-ADV subordinate
wgclass=cl
σώσει
containedclause=262roleclausedistance=0wordrole=v
wg DetNP Object
wgclass=np
τὸν
containedclause=262roleclausedistance=1wordrole=o
wg NPofNP
wgclass=np
λαὸν
containedclause=262roleclausedistance=2wordrole=o
αὐτοῦ
containedclause=262roleclausedistance=2wordrole=o
wg PrepNp Adverbial
wgclass=pp
ἀπὸ
containedclause=262roleclausedistance=1wordrole=adv
wg DetNP
wgclass=np
τῶν
containedclause=262roleclausedistance=2wordrole=adv
wg NPofNP
wgclass=np
ἁμαρτιῶν
containedclause=262roleclausedistance=3wordrole=adv
αὐτῶν.
containedclause=262roleclausedistance=3wordrole=adv
δὲ
containedclause=238roleclausedistance=2wordrole=o
wg CLaCL coordinate
wgclass=cl*
wg V-O coordinate
wgclass=cl
υἱὸν
containedclause=256roleclausedistance=0wordrole=o
wg
καὶ
containedclause=255roleclausedistance=4wordrole=o
wg
wgclass=cl
καλέσεις
containedclause=258roleclausedistance=0wordrole=v
wg DetNP Object
wgclass=np
τὸ
containedclause=258roleclausedistance=1wordrole=o
wg NPofNP
wgclass=np
ὄνομα
containedclause=258roleclausedistance=2wordrole=o
αὐτοῦ
containedclause=258roleclausedistance=2wordrole=o
Ἰησοῦν·
containedclause=258roleclausedistance=0wordrole=o2
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

verse 12" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

Matthew 1:22
verse 22
sentence
wg
wgclass=to be skipped?
wg Conj-CL
wgclass=cl*
wg ClCl
wg S-V
wgclass=cl
wg NP-all Subject
wgclass=np
Τοῦτο
containedclause=271roleclausedistance=1wordrole=s
wg sub-CL
wgclass=cl*
wg V-S subordinate
wgclass=cl
wg DetCL Subject
wgclass=cl*
wg V-ADV-ADV-ADV
wgclass=cl
wg PrepNp Adverbial
wgclass=pp
Κυρίου
containedclause=276roleclausedistance=1wordrole=adv
wg PrepNp Adverbial
wgclass=pp
διὰ
containedclause=276roleclausedistance=1wordrole=adv
wg DetNP
wgclass=np
τοῦ
containedclause=276roleclausedistance=2wordrole=adv
προφήτου
containedclause=276roleclausedistance=2wordrole=adv
wg Adverbial
wgclass=cl
λέγοντος
containedclause=280roleclausedistance=0wordrole=v
δὲ
containedclause=269roleclausedistance=0
wg ClCl
wg S-V
wgclass=cl
wg NP-all Subject
wgclass=np
ὅλον
containedclause=271roleclausedistance=1wordrole=s
γέγονεν
containedclause=271roleclausedistance=0wordrole=v
wg sub-CL
wgclass=cl*
ἵνα
containedclause=273roleclausedistance=0
wg V-S subordinate
wgclass=cl
πληρωθῇ
containedclause=274roleclausedistance=0wordrole=v
wg DetCL Subject
wgclass=cl*
τὸ
containedclause=275roleclausedistance=1wordrole=s
wg V-ADV-ADV-ADV
wgclass=cl
ῥηθὲν
containedclause=276roleclausedistance=0wordrole=v
wg PrepNp Adverbial
wgclass=pp
ὑπὸ
containedclause=276roleclausedistance=1wordrole=adv
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

verse 13" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

Matthew 1:23
verse 23
sentence
wg
wgclass=to be skipped?
wg Conj-CL
wgclass=cl*
wg ClCl
wg sub-CL
wgclass=cl*
wg V-S subordinate
wgclass=cl
wg DetCL Subject
wgclass=cl*
wg V-ADV-ADV-ADV
wgclass=cl
wg Adverbial
wgclass=cl
wg Object
wgclass=cl
Ἰδοὺ
containedclause=281roleclausedistance=0wordrole=aux
wg
καὶ
containedclause=281roleclausedistance=2wordrole=o
wg V-O-O2 coordinate
wgclass=cl
καλέσουσιν
containedclause=288roleclausedistance=0wordrole=v
wg DetNP Object
wgclass=np
τὸ
containedclause=288roleclausedistance=1wordrole=o
wg NPofNP
wgclass=np
ὄνομα
containedclause=288roleclausedistance=2wordrole=o
αὐτοῦ
containedclause=288roleclausedistance=2wordrole=o
wg NP-CL Second Object
wgclass=cl*
Ἐμμανουήλ,
containedclause=291roleclausedistance=1wordrole=o2
wg S-VC-P
wgclass=cl
containedclause=292roleclausedistance=0wordrole=s
wg BeVerb Verbal Copula
wgclass=vp
ἐστιν
containedclause=292roleclausedistance=1wordrole=vc
μεθερμηνευόμενον
containedclause=292roleclausedistance=1wordrole=vc
wg P-S Verbless Predicate subordinate
wgclass=cl
wg PrepNp Predicate
wgclass=pp
Μεθ’
containedclause=294roleclausedistance=1wordrole=p
wg S-ADV-V coordinate
wgclass=cl
wg DetNP Subject
wgclass=np
containedclause=282roleclausedistance=1wordrole=s
wg
wg V-O-O2 coordinate
wgclass=cl
wg NP-CL Second Object
wgclass=cl*
wg S-VC-P
wgclass=cl
wg P-S Verbless Predicate subordinate
wgclass=cl
wg PrepNp Predicate
wgclass=pp
ἡμῶν
containedclause=294roleclausedistance=1wordrole=p
wg DetNP Subject
wgclass=np
containedclause=294roleclausedistance=1wordrole=s
Θεός.
containedclause=294roleclausedistance=1wordrole=s
wg S-ADV-V coordinate
wgclass=cl
wg DetNP Subject
wgclass=np
παρθένος
containedclause=282roleclausedistance=1wordrole=s
wg PrepNp Adverbial
wgclass=pp
ἐν
containedclause=282roleclausedistance=1wordrole=adv
γαστρὶ
containedclause=282roleclausedistance=1wordrole=adv
ἕξει
containedclause=282roleclausedistance=0wordrole=v
wg
καὶ
containedclause=281roleclausedistance=2wordrole=o
wg V-O coordinate
wgclass=cl
τέξεται
containedclause=286roleclausedistance=0wordrole=v
υἱόν,
containedclause=286roleclausedistance=0wordrole=o
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

verse 14" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

Matthew 1:24
verse 24
sentence
wg
wgclass=to be skipped?
wg Conj-CL
wgclass=cl*
wg CLaCL
wgclass=cl*
wg CLaCL coordinate
wgclass=cl*
wg ClCl coordinate
wg S-ADV-V
wgclass=cl
wg V-ADV Adverbial subordinate
wgclass=cl
ἐγερθεὶς
containedclause=304roleclausedistance=0wordrole=v
wg sub-CL
wgclass=cl*
wg V-O-S subordinate
wgclass=cl
προσέταξεν
containedclause=308roleclausedistance=0wordrole=v
αὐτῷ
containedclause=308roleclausedistance=0wordrole=o
wg DetNP Subject
wgclass=np
containedclause=308roleclausedistance=1wordrole=s
wg NPofNP
wgclass=np
ἄγγελος
containedclause=308roleclausedistance=2wordrole=s
Κυρίου,
containedclause=308roleclausedistance=2wordrole=s
wg
καὶ
containedclause=300roleclausedistance=0
wg CLaCL coordinate
wgclass=cl*
wg V-O coordinate
wgclass=cl
παρέλαβεν
containedclause=313roleclausedistance=0wordrole=v
wg DetNP Object
wgclass=np
τὴν
containedclause=313roleclausedistance=1wordrole=o
wg NPofNP
wgclass=np
γυναῖκα
containedclause=313roleclausedistance=2wordrole=o
αὐτοῦ·
containedclause=313roleclausedistance=2wordrole=o
δὲ
containedclause=298roleclausedistance=0
wg CLaCL
wgclass=cl*
wg CLaCL coordinate
wgclass=cl*
wg ClCl coordinate
wg S-ADV-V
wgclass=cl
wg DetNP Subject
wgclass=np
containedclause=302roleclausedistance=1wordrole=s
Ἰωσὴφ
containedclause=302roleclausedistance=1wordrole=s
wg V-ADV Adverbial subordinate
wgclass=cl
wg PrepNp Adverbial
wgclass=pp
ἀπὸ
containedclause=304roleclausedistance=1wordrole=adv
wg DetNP
wgclass=np
τοῦ
containedclause=304roleclausedistance=2wordrole=adv
ὕπνου
containedclause=304roleclausedistance=2wordrole=adv
ἐποίησεν
containedclause=302roleclausedistance=0wordrole=v
wg sub-CL
wgclass=cl*
ὡς
containedclause=307roleclausedistance=0
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

verse 15" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

Matthew 1:25
verse 25
sentence
wg
wgclass=to be skipped?
wg Conj-CL
wgclass=cl*
wg CLaCL
wgclass=cl*
wg CLaCL coordinate
wgclass=cl*
wg
wg CLaCL coordinate
wgclass=cl*
wg
καὶ
containedclause=312roleclausedistance=0
wg
wg V-O-O2 coordinate
wgclass=cl
ἐκάλεσεν
containedclause=321roleclausedistance=0wordrole=v
wg DetNP Object
wgclass=np
τὸ
containedclause=321roleclausedistance=1wordrole=o
wg NPofNP
wgclass=np
ὄνομα
containedclause=321roleclausedistance=2wordrole=o
αὐτοῦ
containedclause=321roleclausedistance=2wordrole=o
Ἰησοῦν.
containedclause=321roleclausedistance=0wordrole=o2
wg CLaCL coordinate
wgclass=cl*
wg
wg CLaCL coordinate
wgclass=cl*
wg
wg ADV-V-O-ADV coordinate
wgclass=cl
οὐκ
containedclause=317roleclausedistance=0wordrole=adv
ἐγίνωσκεν
containedclause=317roleclausedistance=0wordrole=v
αὐτὴν
containedclause=317roleclausedistance=0wordrole=o
wg PrepNp Adverbial
wgclass=pp
ἕως
containedclause=317roleclausedistance=1wordrole=adv
wg ADV-V-O subordinate
wgclass=cl
οὗ
containedclause=319roleclausedistance=0wordrole=adv
ἔτεκεν
containedclause=319roleclausedistance=0wordrole=v
υἱόν·
containedclause=319roleclausedistance=0wordrole=o
wg
καὶ
containedclause=299roleclausedistance=0
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

verse 16" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

Matthew 1:3
verse 3
sentence
wg
wgclass=to be skipped?
wg Conj13CL
wgclass=cl*
wg
wg S-V-O-ADV coordinate
wgclass=cl
Ἰούδας
containedclause=25roleclausedistance=0wordrole=s
wg PrepNp Adverbial
wgclass=pp
wg DetNP
wgclass=np
τῆς
containedclause=25roleclausedistance=2wordrole=adv
Θάμαρ,
containedclause=25roleclausedistance=2wordrole=adv
wg
wg S-V-O coordinate
wgclass=cl
Φαρὲς
containedclause=33roleclausedistance=0wordrole=s
δὲ
containedclause=11roleclausedistance=0
wg S-V-O coordinate
wgclass=cl
ἐγέννησεν
containedclause=33roleclausedistance=0wordrole=v
wg DetNP Object
wgclass=np
τὸν
containedclause=33roleclausedistance=1wordrole=o
Ἐσρώμ,
containedclause=33roleclausedistance=1wordrole=o
wg
wg S-V-O coordinate
wgclass=cl
Ἐσρὼμ
containedclause=36roleclausedistance=0wordrole=s
δὲ
containedclause=11roleclausedistance=0
wg S-V-O coordinate
wgclass=cl
ἐγέννησεν
containedclause=36roleclausedistance=0wordrole=v
wg
δὲ
containedclause=11roleclausedistance=0
wg
wg S-V-O coordinate
wgclass=cl
wg DetNP Object
wgclass=np
τὸν
containedclause=36roleclausedistance=1wordrole=o
Ἀράμ,
containedclause=36roleclausedistance=1wordrole=o
wg
wg S-V-O-ADV coordinate
wgclass=cl
ἐγέννησεν
containedclause=25roleclausedistance=0wordrole=v
wg NpaNp Object
wg DetNP
wgclass=np
τὸν
containedclause=25roleclausedistance=2wordrole=o
Φαρὲς
containedclause=25roleclausedistance=2wordrole=o
wg
καὶ
containedclause=25roleclausedistance=2wordrole=o
wg DetNP
wgclass=np
τὸν
containedclause=25roleclausedistance=3wordrole=o
Ζαρὰ
containedclause=25roleclausedistance=3wordrole=o
wg PrepNp Adverbial
wgclass=pp
ἐκ
containedclause=25roleclausedistance=1wordrole=adv
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

verse 17" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

Matthew 1:4
verse 4
sentence
wg
wgclass=to be skipped?
wg Conj13CL
wgclass=cl*
wg
wg S-V-O coordinate
wgclass=cl
Ἀρὰμ
containedclause=39roleclausedistance=0wordrole=s
wg
wg S-V-O coordinate
wgclass=cl
wg DetNP Object
wgclass=np
Ναασσών,
containedclause=42roleclausedistance=1wordrole=o
wg
wg S-V-O coordinate
wgclass=cl
Ναασσὼν
containedclause=45roleclausedistance=0wordrole=s
δὲ
containedclause=11roleclausedistance=0
wg S-V-O coordinate
wgclass=cl
ἐγέννησεν
containedclause=45roleclausedistance=0wordrole=v
wg DetNP Object
wgclass=np
τὸν
containedclause=45roleclausedistance=1wordrole=o
Σαλμών,
containedclause=45roleclausedistance=1wordrole=o
wg
δὲ
containedclause=11roleclausedistance=0
wg S-V-O coordinate
wgclass=cl
ἐγέννησεν
containedclause=39roleclausedistance=0wordrole=v
wg DetNP Object
wgclass=np
τὸν
containedclause=39roleclausedistance=1wordrole=o
Ἀμιναδάβ,
containedclause=39roleclausedistance=1wordrole=o
wg
wg S-V-O coordinate
wgclass=cl
Ἀμιναδὰβ
containedclause=42roleclausedistance=0wordrole=s
δὲ
containedclause=11roleclausedistance=0
wg S-V-O coordinate
wgclass=cl
ἐγέννησεν
containedclause=42roleclausedistance=0wordrole=v
wg DetNP Object
wgclass=np
τὸν
containedclause=42roleclausedistance=1wordrole=o
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

verse 18" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

Matthew 1:5
verse 5
sentence
wg
wgclass=to be skipped?
wg Conj13CL
wgclass=cl*
wg
wg S-V-O-ADV coordinate
wgclass=cl
Σαλμὼν
containedclause=48roleclausedistance=0wordrole=s
wg
δὲ
containedclause=11roleclausedistance=0
wg S-V-O-ADV coordinate
wgclass=cl
ἐγέννησεν
containedclause=53roleclausedistance=0wordrole=v
wg DetNP Object
wgclass=np
τὸν
containedclause=53roleclausedistance=1wordrole=o
Ἰωβὴδ
containedclause=53roleclausedistance=1wordrole=o
wg PrepNp Adverbial
wgclass=pp
ἐκ
containedclause=53roleclausedistance=1wordrole=adv
wg DetNP
wgclass=np
τῆς
containedclause=53roleclausedistance=2wordrole=adv
Ῥούθ,
containedclause=53roleclausedistance=2wordrole=adv
wg
wg S-V-O coordinate
wgclass=cl
Ἰωβὴδ
containedclause=58roleclausedistance=0wordrole=s
δὲ
containedclause=11roleclausedistance=0
wg S-V-O coordinate
wgclass=cl
ἐγέννησεν
containedclause=58roleclausedistance=0wordrole=v
wg
δὲ
containedclause=11roleclausedistance=0
wg
wg S-V-O coordinate
wgclass=cl
wg DetNP Object
wgclass=np
τὸν
containedclause=58roleclausedistance=1wordrole=o
Ἰεσσαί,
containedclause=58roleclausedistance=1wordrole=o
wg
wg S-V-O-ADV coordinate
wgclass=cl
ἐγέννησεν
containedclause=48roleclausedistance=0wordrole=v
wg DetNP Object
wgclass=np
τὸν
containedclause=48roleclausedistance=1wordrole=o
Βόες
containedclause=48roleclausedistance=1wordrole=o
wg PrepNp Adverbial
wgclass=pp
ἐκ
containedclause=48roleclausedistance=1wordrole=adv
wg DetNP
wgclass=np
τῆς
containedclause=48roleclausedistance=2wordrole=adv
Ῥαχάβ,
containedclause=48roleclausedistance=2wordrole=adv
wg
wg S-V-O-ADV coordinate
wgclass=cl
Βόες
containedclause=53roleclausedistance=0wordrole=s
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

verse 19" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

Matthew 1:6
verse 6
sentence
wg
wgclass=to be skipped?
wg Conj13CL
wgclass=cl*
wg
wg S-V-O coordinate
wgclass=cl
Ἰεσσαὶ
containedclause=61roleclausedistance=0wordrole=s
sentence
wg
wgclass=to be skipped?
wg Conj-CL
wgclass=cl*
wg Conj14CL
wgclass=cl*
wg S-V-O-ADV coordinate
wgclass=cl
ἐγέννησεν
containedclause=68roleclausedistance=0wordrole=v
wg DetNP Object
wgclass=np
τὸν
containedclause=68roleclausedistance=1wordrole=o
Σολομῶνα
containedclause=68roleclausedistance=1wordrole=o
wg PrepNp Adverbial
wgclass=pp
ἐκ
containedclause=68roleclausedistance=1wordrole=adv
wg NPofNP
wgclass=np
τῆς
containedclause=68roleclausedistance=2wordrole=adv
wg DetNP
wgclass=np
τοῦ
containedclause=68roleclausedistance=3wordrole=adv
Οὐρίου,
containedclause=68roleclausedistance=3wordrole=adv
sentence
wg
wgclass=to be skipped?
wg Conj13CL
wgclass=cl*
wg
δὲ
containedclause=11roleclausedistance=0
wg S-V-O coordinate
wgclass=cl
ἐγέννησεν
containedclause=61roleclausedistance=0wordrole=v
wg Np-Appos Object
wg DetNP
wgclass=np
τὸν
containedclause=61roleclausedistance=2wordrole=o
Δαυεὶδ
containedclause=61roleclausedistance=2wordrole=o
wg DetNP
wgclass=np
τὸν
containedclause=61roleclausedistance=2wordrole=o
βασιλέα.
containedclause=61roleclausedistance=2wordrole=o
sentence
wg
wgclass=to be skipped?
wg Conj-CL
wgclass=cl*
wg Conj14CL
wgclass=cl*
wg S-V-O-ADV coordinate
wgclass=cl
Δαυεὶδ
containedclause=68roleclausedistance=0wordrole=s
δὲ
containedclause=66roleclausedistance=0
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

verse 20" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

Matthew 1:7
verse 7
sentence
wg
wgclass=to be skipped?
wg Conj-CL
wgclass=cl*
wg Conj14CL
wgclass=cl*
wg
wg S-V-O coordinate
wgclass=cl
Σολομὼν
containedclause=74roleclausedistance=0wordrole=s
wg
wg S-V-O coordinate
wgclass=cl
wg DetNP Object
wgclass=np
Ἀβιά,
containedclause=77roleclausedistance=1wordrole=o
wg
wg S-V-O coordinate
wgclass=cl
Ἀβιὰ
containedclause=80roleclausedistance=0wordrole=s
δὲ
containedclause=67roleclausedistance=0
wg S-V-O coordinate
wgclass=cl
ἐγέννησεν
containedclause=80roleclausedistance=0wordrole=v
wg DetNP Object
wgclass=np
τὸν
containedclause=80roleclausedistance=1wordrole=o
Ἀσάφ,
containedclause=80roleclausedistance=1wordrole=o
wg
δὲ
containedclause=67roleclausedistance=0
wg S-V-O coordinate
wgclass=cl
ἐγέννησεν
containedclause=74roleclausedistance=0wordrole=v
wg DetNP Object
wgclass=np
τὸν
containedclause=74roleclausedistance=1wordrole=o
Ῥοβοάμ,
containedclause=74roleclausedistance=1wordrole=o
wg
wg S-V-O coordinate
wgclass=cl
Ῥοβοὰμ
containedclause=77roleclausedistance=0wordrole=s
δὲ
containedclause=67roleclausedistance=0
wg S-V-O coordinate
wgclass=cl
ἐγέννησεν
containedclause=77roleclausedistance=0wordrole=v
wg DetNP Object
wgclass=np
τὸν
containedclause=77roleclausedistance=1wordrole=o
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Search0 = '''\n", "book book=Matthew\n", " chapter chapter=1\n", " wg wgclass=cl\n", " word wordrole=v\n", " word wordrole=o\n", "'''\n", "Search0 = NA.search(Search0)\n", "NA.show(Search0, start=1, end=20, condensed=True, extraFeatures={'containedclause','wordrole', 'roleclausedistance'}, suppress={'chapter'}, colorMap={4:'pink', 5:'turquoise', 6:'lightblue', 7:'red'}, multiFeatures=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Step 3 dump some structure information" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "A heading is a tuple of pairs (node type, feature value)\n", "\tof node types and features that have been configured as structural elements\n", "These 3 structural elements have been configured\n", "\tnode type book with heading feature book\n", "\tnode type chapter with heading feature chapter\n", "\tnode type verse with heading feature verse\n", "You can get them as a tuple with T.headings.\n", "\n", "Structure API:\n", "\tT.structure(node=None) gives the structure below node, or everything if node is None\n", "\tT.structurePretty(node=None) prints the structure below node, or everything if node is None\n", "\tT.top() gives all top-level nodes\n", "\tT.up(node) gives the (immediate) parent node\n", "\tT.down(node) gives the (immediate) children nodes\n", "\tT.headingFromNode(node) gives the heading of a node\n", "\tT.nodeFromHeading(heading) gives the node of a heading\n", "\tT.ndFromHd complete mapping from headings to nodes\n", "\tT.hdFromNd complete mapping from nodes to headings\n", "\tT.hdMult are all headings with their nodes that occur multiple times\n", "\n", "There are 8230 structural elements in the dataset.\n", "\n" ] } ], "source": [ "T.structureInfo()" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'Availability': 'Creative Commons Attribution 4.0 International (CC BY 4.0)',\n", " 'Converter_author': 'Tony Jurg, ReMa Student Vrije Universiteit Amsterdam, Netherlands',\n", " 'Converter_execution': 'Tony Jurg, ReMa Student Vrije Universiteit Amsterdam, Netherlands',\n", " 'Converter_version': '0.2',\n", " 'Convertor_source': 'https://github.com/tonyjurg/Nestle1904LFT/tree/main/tools',\n", " 'Data source': 'MACULA Greek Linguistic Datasets, available at https://github.com/Clear-Bible/macula-greek/tree/main/Nestle1904/lowfat',\n", " 'Editors': 'Eberhard Nestle',\n", " 'Name': 'Greek New Testament (Nestle 1904 based on Low Fat Tree)',\n", " 'TextFabric version': '11.4.10',\n", " 'fmt:text-orig-full': '{word}{after}',\n", " 'sectionFeatures': 'book,chapter,verse',\n", " 'sectionTypes': 'book,chapter,verse',\n", " 'structureFeatures': 'book,chapter,verse',\n", " 'structureTypes': 'book,chapter,verse',\n", " 'writtenBy': 'Text-Fabric',\n", " 'dateWritten': '2023-05-17T19:47:20Z'}" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "TF.features['otext'].metaData" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Running text fabric browser \n", "\n", "Note that the normal invocation would be:\n", "\n", "`!tf tonyjurg\\Nestle1904LFT`" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "^C\n" ] } ], "source": [ "!tf app:\\text-fabric-data\\github\\tonyjurg\\Nestle1904LFT\\app data:\\text-fabric-data\\github\\tonyjurg\\Nestle1904LFT\\tf\\0.2" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.9.12" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": true, "toc_position": { "height": "calc(100% - 180px)", "left": "10px", "top": "150px", "width": "321.391px" }, "toc_section_display": true, "toc_window_display": true } }, "nbformat": 4, "nbformat_minor": 4 }