{ "cells": [ { "cell_type": "markdown", "id": "9423530d-1294-4994-a67e-a4b971cf6d24", "metadata": {}, "source": [ "# Prepare N1904 data" ] }, { "cell_type": "markdown", "id": "d94d4a4a-7dbe-474b-872f-3afdcae94922", "metadata": {}, "source": [ "## Data Provenance\n", "\n", "Eberhard Nestle’s 1904 Greek New Testment (British Foreign Bible Society 1904)\n", "\n", "Data source: [macula-greek](https://github.com/biblicalhumanities/Nestle1904) via Text Fabric N1904-TF dataset.\n", "\n", "License (of the source text): Public Domain" ] }, { "cell_type": "markdown", "id": "da5e1ed6-98df-40c2-bc64-3323d499334e", "metadata": {}, "source": [ "## Data preparation\n", "\n", "This script preprocesses the data to generate two output files:\n", "- A text file containing the complete text as one continuous string without line breaks.\n", "- A text file where each line represents a single verse, including its reference and content.\n", "- Mapping of verse to word-node (in the N1904-TF)." ] }, { "cell_type": "markdown", "id": "aadc5128-cb1c-41b6-91c2-7b54bb7f8728", "metadata": {}, "source": [ "## Extract from Text-Fabric" ] }, { "cell_type": "code", "execution_count": 1, "id": "e3e1db2b-4956-48f3-a955-6a49b3ea18d3", "metadata": {}, "outputs": [], "source": [ "# Loading the Text-Fabric code\n", "# Note: it is assumed Text-Fabric is installed in your environment\n", "from tf.fabric import Fabric\n", "from tf.app import use" ] }, { "cell_type": "code", "execution_count": 2, "id": "71e257cb-e321-4443-b8ed-750b1e42987b", "metadata": {}, "outputs": [ { "data": { "text/markdown": [ "**Locating corpus resources ...**" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "app: ~/text-fabric-data/github/CenterBLC/N1904/app" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "data: ~/text-fabric-data/github/CenterBLC/N1904/tf/1.0.0" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", " TF: TF API 12.6.1, CenterBLC/N1904/app v3, Search Reference
\n", " Data: CenterBLC - N1904 1.0.0, 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", "\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
verse794417.34100
sentence801117.20100
group89457.0146
clause425068.36258
wg1068686.88533
phrase690071.9095
subphrase1161781.60135
word1377791.00100
\n", " Sets: no custom sets
\n", " Features:
\n", "
Nestle 1904 Greek New Testament\n", "
\n", "\n", "
\n", "
\n", "after\n", "
\n", "
str
\n", "\n", " material after the end of the word\n", "\n", "
\n", "\n", "
\n", " \n", "
int
\n", "\n", " 1 if it is an apposition container\n", "\n", "
\n", "\n", "
\n", "
\n", "articular\n", "
\n", "
int
\n", "\n", " 1 if the sentence, group, clause, phrase or wg has an article\n", "\n", "
\n", "\n", "
\n", "
\n", "before\n", "
\n", "
str
\n", "\n", " this is XML attribute before\n", "\n", "
\n", "\n", "
\n", "
\n", "betacode\n", "
\n", "
str
\n", "\n", " Betacode representation of the unicode surface word\n", "\n", "
\n", "\n", "
\n", "
\n", "book\n", "
\n", "
str
\n", "\n", " book name (full name)\n", "\n", "
\n", "\n", "
\n", "
\n", "bookshort\n", "
\n", "
str
\n", "\n", " book name (abbreviated) from ref attribute in xml\n", "\n", "
\n", "\n", "
\n", "
\n", "case\n", "
\n", "
str
\n", "\n", " grammatical case\n", "\n", "
\n", "\n", "
\n", "
\n", "chapter\n", "
\n", "
int
\n", "\n", " chapter number, from ref attribute in xml\n", "\n", "
\n", "\n", "
\n", "
\n", "clausetype\n", "
\n", "
str
\n", "\n", " clause type\n", "\n", "
\n", "\n", "
\n", "
\n", "cls\n", "
\n", "
str
\n", "\n", " this is XML attribute cls\n", "\n", "
\n", "\n", "
\n", "
\n", "cltype\n", "
\n", "
str
\n", "\n", " clause type\n", "\n", "
\n", "\n", "
\n", "
\n", "criticalsign\n", "
\n", "
str
\n", "\n", " this is XML attribute criticalsign\n", "\n", "
\n", "\n", "
\n", "
\n", "crule\n", "
\n", "
str
\n", "\n", " clause rule (from xml attribute Rule)\n", "\n", "
\n", "\n", "
\n", "
\n", "degree\n", "
\n", "
str
\n", "\n", " grammatical degree\n", "\n", "
\n", "\n", "
\n", "
\n", "discontinuous\n", "
\n", "
int
\n", "\n", " 1 if the word is out of sequence in the xml\n", "\n", "
\n", "\n", "
\n", "
\n", "domain\n", "
\n", "
str
\n", "\n", " domain\n", "\n", "
\n", "\n", "
\n", "
\n", "framespec\n", "
\n", "
str
\n", "\n", " this is XML attribute framespec\n", "\n", "
\n", "\n", "
\n", "
\n", "function\n", "
\n", "
str
\n", "\n", " this is XML attribute function\n", "\n", "
\n", "\n", "
\n", "
\n", "gender\n", "
\n", "
str
\n", "\n", " grammatical gender\n", "\n", "
\n", "\n", "
\n", "
\n", "gloss\n", "
\n", "
str
\n", "\n", " English gloss (BGVB)\n", "\n", "
\n", "\n", "
\n", "
\n", "id\n", "
\n", "
str
\n", "\n", " xml id\n", "\n", "
\n", "\n", "
\n", "
\n", "junction\n", "
\n", "
str
\n", "\n", " type of junction\n", "\n", "
\n", "\n", "
\n", "
\n", "lang\n", "
\n", "
str
\n", "\n", " language the text is in\n", "\n", "
\n", "\n", "
\n", "
\n", "lemma\n", "
\n", "
str
\n", "\n", " lexical lemma\n", "\n", "
\n", "\n", "
\n", "
\n", "lemmatranslit\n", "
\n", "
str
\n", "\n", " transliteration of the word lemma\n", "\n", "
\n", "\n", "
\n", "
\n", "ln\n", "
\n", "
str
\n", "\n", " ln\n", "\n", "
\n", "\n", "
\n", "
\n", "mood\n", "
\n", "
str
\n", "\n", " verbal mood\n", "\n", "
\n", "\n", "
\n", "
\n", "morph\n", "
\n", "
str
\n", "\n", " morphological code\n", "\n", "
\n", "\n", "
\n", "
\n", "nodeid\n", "
\n", "
str
\n", "\n", " node id (as in the XML source data)\n", "\n", "
\n", "\n", "
\n", "
\n", "normalized\n", "
\n", "
str
\n", "\n", " lemma normalized\n", "\n", "
\n", "\n", "
\n", "
\n", "note\n", "
\n", "
str
\n", "\n", " annotation of linguistic nature\n", "\n", "
\n", "\n", "
\n", "
\n", "num\n", "
\n", "
int
\n", "\n", " generated number (not in xml): book: (Matthew=1, Mark=2, ..., Revelation=27); sentence: numbered per chapter; word: numbered per verse.\n", "\n", "
\n", "\n", "
\n", "
\n", "number\n", "
\n", "
str
\n", "\n", " grammatical number\n", "\n", "
\n", "\n", "
\n", "
\n", "otype\n", "
\n", "
str
\n", "\n", " \n", "\n", "
\n", "\n", "
\n", "
\n", "person\n", "
\n", "
str
\n", "\n", " grammatical person\n", "\n", "
\n", "\n", "
\n", "
\n", "punctuation\n", "
\n", "
str
\n", "\n", " punctuation found after a word\n", "\n", "
\n", "\n", "
\n", "
\n", "ref\n", "
\n", "
str
\n", "\n", " biblical reference with word counting\n", "\n", "
\n", "\n", "
\n", "
\n", "referent\n", "
\n", "
str
\n", "\n", " number of referent\n", "\n", "
\n", "\n", "
\n", "
\n", "rela\n", "
\n", "
str
\n", "\n", " this is XML attribute rela\n", "\n", "
\n", "\n", "
\n", "
\n", "role\n", "
\n", "
str
\n", "\n", " role\n", "\n", "
\n", "\n", "
\n", "
\n", "rule\n", "
\n", "
str
\n", "\n", " syntactical rule\n", "\n", "
\n", "\n", "
\n", "
\n", "sp\n", "
\n", "
str
\n", "\n", " part-of-speach\n", "\n", "
\n", "\n", "
\n", "
\n", "strong\n", "
\n", "
int
\n", "\n", " strong number\n", "\n", "
\n", "\n", "
\n", "
\n", "subjrefspec\n", "
\n", "
str
\n", "\n", " this is XML attribute subjrefspec\n", "\n", "
\n", "\n", "
\n", "
\n", "tense\n", "
\n", "
str
\n", "\n", " verbal tense\n", "\n", "
\n", "\n", "
\n", "
\n", "text\n", "
\n", "
str
\n", "\n", " the text of a word\n", "\n", "
\n", "\n", "
\n", "
\n", "trailer\n", "
\n", "
str
\n", "\n", " material after the end of the word (excluding critical signs)\n", "\n", "
\n", "\n", "
\n", "
\n", "trans\n", "
\n", "
str
\n", "\n", " translation of the word surface text according to the Berean Interlinear Bible\n", "\n", "
\n", "\n", "
\n", "
\n", "translit\n", "
\n", "
str
\n", "\n", " transliteration of the word surface text\n", "\n", "
\n", "\n", "
\n", "
\n", "typ\n", "
\n", "
str
\n", "\n", " syntactical type (on sentence, group, clause or phrase)\n", "\n", "
\n", "\n", "
\n", "
\n", "typems\n", "
\n", "
str
\n", "\n", " morphological type (on word), syntactical type (on sentence, group, clause, phrase or wg)\n", "\n", "
\n", "\n", "
\n", "
\n", "unaccent\n", "
\n", "
str
\n", "\n", " word in unicode characters without accents and diacritical markers\n", "\n", "
\n", "\n", "
\n", "
\n", "unicode\n", "
\n", "
str
\n", "\n", " word in unicode characters plus material after it\n", "\n", "
\n", "\n", "
\n", "
\n", "variant\n", "
\n", "
str
\n", "\n", " this is XML attribute variant\n", "\n", "
\n", "\n", "
\n", "
\n", "verse\n", "
\n", "
int
\n", "\n", " verse number, from ref attribute in xml\n", "\n", "
\n", "\n", "
\n", "
\n", "voice\n", "
\n", "
str
\n", "\n", " verbal voice\n", "\n", "
\n", "\n", "
\n", "
\n", "frame\n", "
\n", "
str
\n", "\n", " frame\n", "\n", "
\n", "\n", "
\n", "
\n", "oslots\n", "
\n", "
none
\n", "\n", " \n", "\n", "
\n", "\n", "
\n", "
\n", "parent\n", "
\n", "
none
\n", "\n", " parent relationship between words\n", "\n", "
\n", "\n", "
\n", "
\n", "sibling\n", "
\n", "
int
\n", "\n", " this is XML attribute sibling\n", "\n", "
\n", "\n", "
\n", "
\n", "subjref\n", "
\n", "
none
\n", "\n", " number of subject referent\n", "\n", "
\n", "\n", "
\n", "
\n", "\n", " Settings:
specified
  1. apiVersion: 3
  2. appName: CenterBLC/N1904
  3. appPath: C:/Users/tonyj/text-fabric-data/github/CenterBLC/N1904/app
  4. commit: gdb630837ae89b9468c9e50d13bda05cfd3de4f18
  5. css: ''
  6. dataDisplay:
    • excludedFeatures: []
    • noneValues:
      • none
      • unknown
      • no value
      • NA
    • sectionSep1:
    • sectionSep2: :
    • textFormat: text-orig-full
  7. docs:
    • docBase: https://github.com/CenterBLC/N1904/tree/main/docs
    • docPage: about
    • docRoot: https://github.com/CenterBLC/N1904
    • featureBase:https://github.com/CenterBLC/N1904/blob/main/docs/features/<feature>.md
    • featurePage: README
  8. interfaceDefaults: {fmt: text-orig-full}
  9. isCompatible: True
  10. local: local
  11. localDir:C:/Users/tonyj/text-fabric-data/github/CenterBLC/N1904/_temp
  12. provenanceSpec:
    • branch: main
    • corpus: Nestle 1904 Greek New Testament
    • doi: 10.5281/zenodo.13117910
    • moduleSpecs: []
    • org: CenterBLC
    • relative: /tf
    • repo: N1904
    • repro: N1904
    • version: 1.0.0
    • webBase: https://learner.bible/text/show_text/nestle1904/
    • webHint: Show this on the website
    • webLang: en
    • webUrl:https://learner.bible/text/show_text/nestle1904/<1>/<2>/<3>
    • webUrlLex: {webBase}/word?version={version}&id=<lid>
  13. release: 1.0.0
  14. typeDisplay:
    • clause:
      • condense: True
      • label: {typ} {function} {rela} \\\\ {cls} {role} {junction}
      • style: ''
    • group:
      • label: {typ} {function} {rela} \\\\ {typems} {role} {rule}
      • style: ''
    • phrase:
      • condense: True
      • label: {typ} {function} {rela} \\\\ {typems} {role} {rule}
      • style: ''
    • sentence:
      • label: {typ} {function} {rela} \\\\ {role} {rule}
      • style: ''
    • subphrase:
      • label: {typ} {function} {rela} \\\\ {typems} {role} {rule}
      • style: ''
    • verse:
      • condense: True
      • label: {book} {chapter}:{verse}
      • style: ''
    • wg:
      • condense: True
      • label: {typems} {role} {rule} {junction}
      • style: ''
    • word:
      • features:
        • lemma
        • sp
      • featuresBare: [gloss]
  15. writing: grc
\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": [ "
TF API: names N F E L T S C TF Fs Fall Es Eall Cs Call directly usable

" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "Display is setup for viewtype [syntax-view](https://github.com/CenterBLC/N1904/blob/main/docs/syntax-view.md#start)" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/markdown": [ "See [here](https://github.com/CenterBLC/N1904/blob/main/docs/viewtypes.md#start) for more information on viewtypes" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# load the N1904 app and data\n", "N1904 = use (\"CenterBLC/N1904\", version=\"1.0.0\", hoist=globals())" ] }, { "cell_type": "code", "execution_count": 3, "id": "00f236f8-0637-47a0-87b2-e6d86feeb6da", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 0.01s 879 results\n" ] } ], "source": [ "verseQuery = '''\n", "verse book=John\n", "'''\n", "verseResults = N1904.search(verseQuery)" ] }, { "cell_type": "code", "execution_count": 4, "id": "ded0d742-0a22-4321-a69e-972e450de0a0", "metadata": {}, "outputs": [], "source": [ "import unicodedata\n", "import json\n", "\n", "def normalize(string, chars_to_remove=None):\n", " \"\"\"\n", " Normalize the input string by converting it to lowercase, removing diacritical marks,\n", " and optionally removing specified characters from a list.\n", " \n", " Args:\n", " string (str): The input string to normalize\n", " chars_to_remove (list, optional): List of characters to remove from the string\n", " \n", " Returns:\n", " str: The normalized string\n", " \"\"\"\n", " # Convert to lowercase and normalize apostrophe (to 8125 GREEK KORONIS)\n", " string = string.lower().replace(\"’\", \"᾽\").replace(\"ʼ\",\"᾽\")\n", " \n", " # Apply Unicode normalization (NFD) to decompose characters\n", " string = unicodedata.normalize('NFD', string)\n", " \n", " # Remove non-spacing marks (diacritics)\n", " string = ''.join(ch for ch in string if unicodedata.category(ch) != 'Mn')\n", " \n", " # Remove specified characters if provided\n", " if chars_to_remove is not None:\n", " string = ''.join(ch for ch in string if ch not in chars_to_remove)\n", " return string\n", "\n", "# Lists to collect processed text fragments and tagged lines, and JSON items.\n", "all_lines_parts = []\n", "tagged_lines_parts = []\n", "json_items = [] \n", "\n", "# Process each verse node from the collection\n", "for verseNode in verseResults:\n", " # Extract book, chapter, and verse information from the current node.\n", " book, chapter, verse = T.sectionFromNode(verseNode[0])\n", " \n", " # Retrieve the text content of the verse from the node and normalize it.\n", " line_content = normalize(T.text(verseNode[0]),'(—)')\n", "\n", " # Append the verse's text to the list of all lines (with a preceding space for separation).\n", " all_lines_parts.append(' ' + line_content)\n", "\n", " # Create the tag using chapter and verse numbers.\n", " tag = f\"43{int(chapter):03}{int(verse):03}\"\n", " \n", " # Build a tagged line:\n", " tagged_lines_parts.append(f\"{tag}\\t{line_content}\")\n", "\n", " # Build the JSON entry with both the tag and the text.\n", " json_items.append({\n", " \"tag\": tag,\n", " \"text\": line_content\n", " })\n", "\n", "# Join the list of untagged lines into a single string.\n", "all_lines = ''.join(all_lines_parts)\n", "\n", "# Join the tagged lines with a newline separator and append a final newline.\n", "tagged_lines = \"\\n\".join(tagged_lines_parts) + \"\\n\"\n", "\n", "# Write the continuous text (all lines) to the output file.\n", "with open('N1904-John.txt', 'w', encoding='utf-8') as f:\n", " f.write(all_lines)\n", "\n", "# Write the tagged text to a separate output file.\n", "with open('N1904-John-tagged.txt', 'w', encoding='utf-8') as f:\n", " f.write(tagged_lines)\n", "\n", "# Write the JSON data to a file with indentation for readability.\n", "with open('N1904-John.json', 'w', encoding='utf-8') as f:\n", " json.dump(json_items, f, ensure_ascii=False, indent=4)" ] }, { "cell_type": "markdown", "id": "e10f2ecf-dd7d-4b82-be1a-c40986bdac66", "metadata": {}, "source": [ "## Checking the results" ] }, { "cell_type": "code", "execution_count": 5, "id": "94d10f4b-7d8c-4618-8200-f098edb32fcd", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "' εν αρχη ην ο λογος, και ο λογος ην προς τον θεον, και θεος ην ο λογος. ουτος ην εν αρχη προς τον θεον. παντα δι᾽ αυτου εγενετο, και χωρις αυτου εγενετο ουδε εν ο γεγονεν. εν αυτω ζωη ην, και η ζωη ην το φως των ανθρωπων. και το φως εν τη σκοτια φαινει, και η σκοτια αυτο ου κατελαβεν. εγενετο α'" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Dump the first 300 characters of the continuous text\n", "all_lines[:300]" ] }, { "cell_type": "code", "execution_count": 6, "id": "61504a9e-6849-4c0e-ab2c-3752e4d030fd", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "949 GREEK SMALL LETTER EPSILON\n", "957 GREEK SMALL LETTER NU\n", "32 SPACE\n", "960 GREEK SMALL LETTER PI\n", "945 GREEK SMALL LETTER ALPHA\n", "957 GREEK SMALL LETTER NU\n", "964 GREEK SMALL LETTER TAU\n", "945 GREEK SMALL LETTER ALPHA\n", "32 SPACE\n", "948 GREEK SMALL LETTER DELTA\n", "953 GREEK SMALL LETTER IOTA\n", "8125 GREEK KORONIS\n" ] } ], "source": [ "# Check unicode of some of the words\n", "import unicodedata\n", "chars=\"εν παντα δι᾽\"\n", "for char in chars:\n", " print(ord(char),unicodedata.name(char)) " ] }, { "cell_type": "code", "execution_count": 7, "id": "42a0c61d-04ef-4fd0-8fe3-7c3a26d1509f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "43001001\tεν αρχη ην ο λογος, και ο λογος ην προς τον θεον, και θεος ην ο λογος. \n", "43001002\tουτος ην εν αρχη προς τον θεον. \n", "43001003\tπαντα δι᾽ αυτου εγενετο, και χωρις αυτου εγενετο ουδε εν ο γεγονεν. \n", "43001004\tεν αυτω ζωη ην, και η ζωη ην το φως των ανθρωπων. \n", "43001005\tκαι το φως εν τη σκοτια φαινει\n" ] } ], "source": [ "# Print the first 300 characters of the tagged text\n", "print (tagged_lines[:300])" ] }, { "cell_type": "code", "execution_count": 8, "id": "43f49166-b719-441a-80d5-cfde99f05f8b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[\n", " {\n", " \"tag\": \"43001001\",\n", " \"text\": \"εν αρχη ην ο λογος, και ο λογος ην προς τον θεον, και θεος ην ο λογος. \"\n", " },\n", " {\n", " \"tag\": \"43001002\",\n", " \"text\": \"ουτος ην εν αρχη προς τον θεον. \"\n", " }\n", "]\n" ] } ], "source": [ "# Dump the first two JSON items\n", "print(json.dumps(json_items[:2], ensure_ascii=False, indent=4))" ] }, { "cell_type": "markdown", "id": "8e583f90-4e2a-4e0d-937a-4262a50a2050", "metadata": {}, "source": [ "## Create word-node to verse mapping" ] }, { "cell_type": "code", "execution_count": 9, "id": "b8404199-50d0-48eb-bd13-1c3ad49e1340", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 0.01s 879 results\n" ] } ], "source": [ "import json\n", "\n", "verseQuery = '''\n", "verse book=John\n", "'''\n", "verseResults = N1904.search(verseQuery)\n", "\n", "output_data = []\n", "wordIndex=1\n", "for (verse,) in verseResults:\n", " # Get the number of words in the verse.\n", " verseLength = len(L.d(verse, \"word\"))\n", " # Retrieve the book, chapter, and verse number.\n", " book, chapter, verseNum = T.sectionFromNode(verse)\n", " location = f\"{book} {chapter}:{verseNum}\"\n", " # format: 43001001 for John 1:1\n", " tag=f\"43{chapter:03}{verseNum:03}\"\n", " start = wordIndex\n", " wordIndex += verseLength\n", " end = wordIndex - 1\n", "\n", " # Create a dictionary for this verse.\n", " entry = {\"location\": location, \"tag\": tag, \"start\": start, \"end\": end}\n", " output_data.append(entry)\n", "\n", " # Optional: print the mapping for debugging.\n", " # print(f\"{location} / {tag} - {start} {end}\")\n", "\n", "# Write the list of verse mappings to a JSON file.\n", "with open(\"node2verse.json\", \"w\", encoding=\"utf-8\") as out_file:\n", " json.dump(output_data, out_file, ensure_ascii=False, indent=2)" ] }, { "cell_type": "markdown", "id": "417e3ad4-1e05-483a-9149-016291b190ee", "metadata": {}, "source": [ "# 5 - Notebook version details\n", "##### [Back to ToC](#TOC)\n", "\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
AuthorTony Jurg
Version1.0
Date25 February 2025
\n", "
" ] } ], "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.12.7" } }, "nbformat": 4, "nbformat_minor": 5 }