{ "cells": [ { "cell_type": "markdown", "id": "b412ef40-3d6a-422d-a658-0f7f9474e423", "metadata": {}, "source": [ "# Vocalisation of the Tetragrammaton (BHSA)" ] }, { "cell_type": "markdown", "id": "c0c0ef41-78a1-4045-ae4d-aa1675804caa", "metadata": {}, "source": [ "## Table of content (TOC)\n", "\n", "* 1 - Introduction\n", "* 2 - Load Text-Fabric app and data\n", "* 3 - Performing the queries\n", " * 3.1 - Get overview of all pointed versions\n", " * 3.2 - Plotting the punctuations of the Tetragrammaton\n", " * 3.3 - Some other playing around\n", "* 4 - Required libraries\n", "* 5 - Notebook details\n" ] }, { "cell_type": "markdown", "id": "1c4a3903-612b-4f76-82ba-f0658f23fb5e", "metadata": {}, "source": [ "# 1 - Introduction \n", "##### [Back to TOC](#TOC)\n", "\n", "The Old Testament contains the how the Tetragrammaton יהוה written with different vowels, for example with the vowals of of אֲדֹנַי (Adonai, ETCBC transliteration: >:ADON@J)." ] }, { "cell_type": "markdown", "id": "b2f15e29-edf4-4127-bf3a-d7b1e379042f", "metadata": {}, "source": [ "# 2 - Load Text-Fabric app and data \n", "##### [Back to TOC](#TOC)" ] }, { "cell_type": "code", "execution_count": 1, "id": "ef428d41-2caa-4522-95cf-ef39e4f0e8da", "metadata": { "tags": [] }, "outputs": [], "source": [ "%load_ext autoreload\n", "%autoreload 2" ] }, { "cell_type": "code", "execution_count": 2, "id": "77b1cb10-629c-4653-b4d0-afc1d13e9d7e", "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": 3, "id": "4a4748f2-030d-436c-b1ad-0140405dcd4b", "metadata": { "scrolled": true, "tags": [] }, "outputs": [ { "data": { "text/markdown": [ "**Locating corpus resources ...**" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "app: ~/text-fabric-data/github/etcbc/BHSA/app" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "data: ~/text-fabric-data/github/etcbc/BHSA/tf/2021" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "data: ~/text-fabric-data/github/etcbc/phono/tf/2021" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "data: ~/text-fabric-data/github/etcbc/parallels/tf/2021" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", " TF: TF API 12.6.1, etcbc/BHSA/app v3, Search Reference
\n", " Data: etcbc - BHSA 2021, 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", "\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
book3910938.21100
chapter929459.19100
lex923046.22100
verse2321318.38100
half_verse451799.44100
sentence637176.70100
sentence_atom645146.61100
clause881314.84100
clause_atom907044.70100
phrase2532031.68100
phrase_atom2675321.59100
subphrase1138501.4238
word4265901.00100
\n", " Sets: no custom sets
\n", " Features:
\n", "
Parallel Passages\n", "
\n", "\n", "
\n", "
\n", "crossref\n", "
\n", "
int
\n", "\n", " 🆗 links between similar passages\n", "\n", "
\n", "\n", "
\n", "
\n", "\n", "
BHSA = Biblia Hebraica Stuttgartensia Amstelodamensis\n", "
\n", "\n", "
\n", "
\n", "book\n", "
\n", "
str
\n", "\n", " ✅ book name in Latin (Genesis; Numeri; Reges1; ...)\n", "\n", "
\n", "\n", "
\n", "
\n", "book@ll\n", "
\n", "
str
\n", "\n", " ✅ book name in amharic (ኣማርኛ)\n", "\n", "
\n", "\n", "
\n", "
\n", "chapter\n", "
\n", "
int
\n", "\n", " ✅ chapter number (1; 2; 3; ...)\n", "\n", "
\n", "\n", "
\n", "
\n", "code\n", "
\n", "
int
\n", "\n", " ✅ identifier of a clause atom relationship (0; 74; 367; ...)\n", "\n", "
\n", "\n", "
\n", "
\n", "det\n", "
\n", "
str
\n", "\n", " ✅ determinedness of phrase(atom) (det; und; NA.)\n", "\n", "
\n", "\n", "
\n", "
\n", "domain\n", "
\n", "
str
\n", "\n", " ✅ text type of clause (? (Unknown); N (narrative); D (discursive); Q (Quotation).)\n", "\n", "
\n", "\n", "
\n", "
\n", "freq_lex\n", "
\n", "
int
\n", "\n", " ✅ frequency of lexemes\n", "\n", "
\n", "\n", "
\n", "
\n", "function\n", "
\n", "
str
\n", "\n", " ✅ syntactic function of phrase (Cmpl; Objc; Pred; ...)\n", "\n", "
\n", "\n", "
\n", "
\n", "g_cons\n", "
\n", "
str
\n", "\n", " ✅ word consonantal-transliterated (B R>CJT BR> >LHJM ...)\n", "\n", "
\n", "\n", "
\n", "
\n", "g_cons_utf8\n", "
\n", "
str
\n", "\n", " ✅ word consonantal-Hebrew (ב ראשׁית ברא אלהים)\n", "\n", "
\n", "\n", "
\n", "
\n", "g_lex\n", "
\n", "
str
\n", "\n", " ✅ lexeme pointed-transliterated (B.:- R;>CIJT B.@R@> >:ELOH ...)\n", "\n", "
\n", "\n", "
\n", "
\n", "g_lex_utf8\n", "
\n", "
str
\n", "\n", " ✅ lexeme pointed-Hebrew (בְּ רֵאשִׁית בָּרָא אֱלֹה)\n", "\n", "
\n", "\n", "
\n", "
\n", "g_word\n", "
\n", "
str
\n", "\n", " ✅ word pointed-transliterated (B.:- R;>CI73JT B.@R@74> >:ELOHI92JM)\n", "\n", "
\n", "\n", "
\n", "
\n", "g_word_utf8\n", "
\n", "
str
\n", "\n", " ✅ word pointed-Hebrew (בְּ רֵאשִׁ֖ית בָּרָ֣א אֱלֹהִ֑ים)\n", "\n", "
\n", "\n", "
\n", "
\n", "gloss\n", "
\n", "
str
\n", "\n", " 🆗 english translation of lexeme (beginning create god(s))\n", "\n", "
\n", "\n", "
\n", "
\n", "gn\n", "
\n", "
str
\n", "\n", " ✅ grammatical gender (m; f; NA; unknown.)\n", "\n", "
\n", "\n", "
\n", "
\n", "label\n", "
\n", "
str
\n", "\n", " ✅ (half-)verse label (half verses: A; B; C; verses: GEN 01,02)\n", "\n", "
\n", "\n", "
\n", "
\n", "language\n", "
\n", "
str
\n", "\n", " ✅ of word or lexeme (Hebrew; Aramaic.)\n", "\n", "
\n", "\n", "
\n", "
\n", "lex\n", "
\n", "
str
\n", "\n", " ✅ lexeme consonantal-transliterated (B R>CJT/ BR>[ >LHJM/)\n", "\n", "
\n", "\n", "
\n", "
\n", "lex_utf8\n", "
\n", "
str
\n", "\n", " ✅ lexeme consonantal-Hebrew (ב ראשׁית֜ ברא אלהים֜)\n", "\n", "
\n", "\n", "
\n", "
\n", "ls\n", "
\n", "
str
\n", "\n", " ✅ lexical set, subclassification of part-of-speech (card; ques; mult)\n", "\n", "
\n", "\n", "
\n", "
\n", "nametype\n", "
\n", "
str
\n", "\n", " ⚠️ named entity type (pers; mens; gens; topo; ppde.)\n", "\n", "
\n", "\n", "
\n", "
\n", "nme\n", "
\n", "
str
\n", "\n", " ✅ nominal ending consonantal-transliterated (absent; n/a; JM, ...)\n", "\n", "
\n", "\n", "
\n", "
\n", "nu\n", "
\n", "
str
\n", "\n", " ✅ grammatical number (sg; du; pl; NA; unknown.)\n", "\n", "
\n", "\n", "
\n", "
\n", "number\n", "
\n", "
int
\n", "\n", " ✅ sequence number of an object within its context\n", "\n", "
\n", "\n", "
\n", "
\n", "otype\n", "
\n", "
str
\n", "\n", " \n", "\n", "
\n", "\n", "
\n", "
\n", "pargr\n", "
\n", "
str
\n", "\n", " 🆗 hierarchical paragraph number (1; 1.2; 1.2.3.4; ...)\n", "\n", "
\n", "\n", "
\n", "
\n", "pdp\n", "
\n", "
str
\n", "\n", " ✅ phrase dependent part-of-speech (art; verb; subs; nmpr, ...)\n", "\n", "
\n", "\n", "
\n", "
\n", "pfm\n", "
\n", "
str
\n", "\n", " ✅ preformative consonantal-transliterated (absent; n/a; J, ...)\n", "\n", "
\n", "\n", "
\n", "
\n", "prs\n", "
\n", "
str
\n", "\n", " ✅ pronominal suffix consonantal-transliterated (absent; n/a; W; ...)\n", "\n", "
\n", "\n", "
\n", "
\n", "prs_gn\n", "
\n", "
str
\n", "\n", " ✅ pronominal suffix gender (m; f; NA; unknown.)\n", "\n", "
\n", "\n", "
\n", "
\n", "prs_nu\n", "
\n", "
str
\n", "\n", " ✅ pronominal suffix number (sg; du; pl; NA; unknown.)\n", "\n", "
\n", "\n", "
\n", "
\n", "prs_ps\n", "
\n", "
str
\n", "\n", " ✅ pronominal suffix person (p1; p2; p3; NA; unknown.)\n", "\n", "
\n", "\n", "
\n", "
\n", "ps\n", "
\n", "
str
\n", "\n", " ✅ grammatical person (p1; p2; p3; NA; unknown.)\n", "\n", "
\n", "\n", "
\n", "
\n", "qere\n", "
\n", "
str
\n", "\n", " ✅ word pointed-transliterated masoretic reading correction\n", "\n", "
\n", "\n", "
\n", "
\n", "qere_trailer\n", "
\n", "
str
\n", "\n", " ✅ interword material -pointed-transliterated (Masoretic correction)\n", "\n", "
\n", "\n", "
\n", "
\n", "qere_trailer_utf8\n", "
\n", "
str
\n", "\n", " ✅ interword material -pointed-transliterated (Masoretic correction)\n", "\n", "
\n", "\n", "
\n", "
\n", "qere_utf8\n", "
\n", "
str
\n", "\n", " ✅ word pointed-Hebrew masoretic reading correction\n", "\n", "
\n", "\n", "
\n", "
\n", "rank_lex\n", "
\n", "
int
\n", "\n", " ✅ ranking of lexemes based on freqnuecy\n", "\n", "
\n", "\n", "
\n", "
\n", "rela\n", "
\n", "
str
\n", "\n", " ✅ linguistic relation between clause/(sub)phrase(atom) (ADJ; MOD; ATR; ...)\n", "\n", "
\n", "\n", "
\n", "
\n", "sp\n", "
\n", "
str
\n", "\n", " ✅ part-of-speech (art; verb; subs; nmpr, ...)\n", "\n", "
\n", "\n", "
\n", "
\n", "st\n", "
\n", "
str
\n", "\n", " ✅ state of a noun (a (absolute); c (construct); e (emphatic).)\n", "\n", "
\n", "\n", "
\n", "
\n", "tab\n", "
\n", "
int
\n", "\n", " ✅ clause atom: its level in the linguistic embedding\n", "\n", "
\n", "\n", "
\n", "
\n", "trailer\n", "
\n", "
str
\n", "\n", " ✅ interword material pointed-transliterated (& 00 05 00_P ...)\n", "\n", "
\n", "\n", "
\n", "
\n", "trailer_utf8\n", "
\n", "
str
\n", "\n", " ✅ interword material pointed-Hebrew (־ ׃)\n", "\n", "
\n", "\n", "
\n", "
\n", "txt\n", "
\n", "
str
\n", "\n", " ✅ text type of clause and surrounding (repetion of ? N D Q as in feature domain)\n", "\n", "
\n", "\n", "
\n", "
\n", "typ\n", "
\n", "
str
\n", "\n", " ✅ clause/phrase(atom) type (VP; NP; Ellp; Ptcp; WayX)\n", "\n", "
\n", "\n", "
\n", "
\n", "uvf\n", "
\n", "
str
\n", "\n", " ✅ univalent final consonant consonantal-transliterated (absent; N; J; ...)\n", "\n", "
\n", "\n", "
\n", "
\n", "vbe\n", "
\n", "
str
\n", "\n", " ✅ verbal ending consonantal-transliterated (n/a; W; ...)\n", "\n", "
\n", "\n", "
\n", "
\n", "vbs\n", "
\n", "
str
\n", "\n", " ✅ root formation consonantal-transliterated (absent; n/a; H; ...)\n", "\n", "
\n", "\n", "
\n", "
\n", "verse\n", "
\n", "
int
\n", "\n", " ✅ verse number\n", "\n", "
\n", "\n", "
\n", "
\n", "voc_lex\n", "
\n", "
str
\n", "\n", " ✅ vocalized lexeme pointed-transliterated (B.: R;>CIJT BR> >:ELOHIJM)\n", "\n", "
\n", "\n", "
\n", "
\n", "voc_lex_utf8\n", "
\n", "
str
\n", "\n", " ✅ vocalized lexeme pointed-Hebrew (בְּ רֵאשִׁית ברא אֱלֹהִים)\n", "\n", "
\n", "\n", "
\n", "
\n", "vs\n", "
\n", "
str
\n", "\n", " ✅ verbal stem (qal; piel; hif; apel; pael)\n", "\n", "
\n", "\n", "
\n", "
\n", "vt\n", "
\n", "
str
\n", "\n", " ✅ verbal tense (perf; impv; wayq; infc)\n", "\n", "
\n", "\n", "
\n", "
\n", "mother\n", "
\n", "
none
\n", "\n", " ✅ linguistic dependency between textual objects\n", "\n", "
\n", "\n", "
\n", "
\n", "oslots\n", "
\n", "
none
\n", "\n", " \n", "\n", "
\n", "\n", "
\n", "
\n", "\n", "
Phonetic Transcriptions\n", "
\n", "\n", "
\n", "
\n", "phono\n", "
\n", "
str
\n", "\n", " 🆗 phonological transcription (bᵊ rēšˌîṯ bārˈā ʔᵉlōhˈîm)\n", "\n", "
\n", "\n", "
\n", "
\n", "phono_trailer\n", "
\n", "
str
\n", "\n", " 🆗 interword material in phonological transcription\n", "\n", "
\n", "\n", "
\n", "
\n", "\n", " Settings:
specified
  1. apiVersion: 3
  2. appName: etcbc/BHSA
  3. appPath: C:/Users/tonyj/text-fabric-data/github/etcbc/BHSA/app
  4. commit: gd905e3fb6e80d0fa537600337614adc2af157309
  5. css: ''
  6. dataDisplay:
    • exampleSectionHtml:<code>Genesis 1:1</code> (use <a href=\"https://github.com/{org}/{repo}/blob/master/tf/{version}/book%40en.tf\" target=\"_blank\">English book names</a>)
    • excludedFeatures:
      • g_uvf_utf8
      • g_vbs
      • kq_hybrid
      • languageISO
      • g_nme
      • lex0
      • is_root
      • g_vbs_utf8
      • g_uvf
      • dist
      • root
      • suffix_person
      • g_vbe
      • dist_unit
      • suffix_number
      • distributional_parent
      • kq_hybrid_utf8
      • crossrefSET
      • instruction
      • g_prs
      • lexeme_count
      • rank_occ
      • g_pfm_utf8
      • freq_occ
      • crossrefLCS
      • functional_parent
      • g_pfm
      • g_nme_utf8
      • g_vbe_utf8
      • kind
      • g_prs_utf8
      • suffix_gender
      • mother_object_type
    • noneValues:
      • none
      • unknown
      • no value
      • NA
  7. docs:
    • docBase: {docRoot}/{repo}
    • docExt: ''
    • docPage: ''
    • docRoot: https://{org}.github.io
    • featurePage: 0_home
  8. interfaceDefaults: {}
  9. isCompatible: True
  10. local: local
  11. localDir: C:/Users/tonyj/text-fabric-data/github/etcbc/BHSA/_temp
  12. provenanceSpec:
    • corpus: BHSA = Biblia Hebraica Stuttgartensia Amstelodamensis
    • doi: 10.5281/zenodo.1007624
    • moduleSpecs:
      • :
        • backend: no value
        • corpus: Phonetic Transcriptions
        • docUrl:https://nbviewer.jupyter.org/github/etcbc/phono/blob/master/programs/phono.ipynb
        • doi: 10.5281/zenodo.1007636
        • org: etcbc
        • relative: /tf
        • repo: phono
      • :
        • backend: no value
        • corpus: Parallel Passages
        • docUrl:https://nbviewer.jupyter.org/github/etcbc/parallels/blob/master/programs/parallels.ipynb
        • doi: 10.5281/zenodo.1007642
        • org: etcbc
        • relative: /tf
        • repo: parallels
    • org: etcbc
    • relative: /tf
    • repo: BHSA
    • version: 2021
    • webBase: https://shebanq.ancient-data.org/hebrew
    • webHint: Show this on SHEBANQ
    • webLang: la
    • webLexId: True
    • webUrl:{webBase}/text?book=<1>&chapter=<2>&verse=<3>&version={version}&mr=m&qw=q&tp=txt_p&tr=hb&wget=v&qget=v&nget=vt
    • webUrlLex: {webBase}/word?version={version}&id=<lid>
  13. release: v1.8
  14. typeDisplay:
    • clause:
      • label: {typ} {rela}
      • style: ''
    • clause_atom:
      • hidden: True
      • label: {code}
      • level: 1
      • style: ''
    • half_verse:
      • hidden: True
      • label: {label}
      • style: ''
      • verselike: True
    • lex:
      • featuresBare: gloss
      • label: {voc_lex_utf8}
      • lexOcc: word
      • style: orig
      • template: {voc_lex_utf8}
    • phrase:
      • label: {typ} {function}
      • style: ''
    • phrase_atom:
      • hidden: True
      • label: {typ} {rela}
      • level: 1
      • style: ''
    • sentence:
      • label: {number}
      • style: ''
    • sentence_atom:
      • hidden: True
      • label: {number}
      • level: 1
      • style: ''
    • subphrase:
      • hidden: True
      • label: {number}
      • style: ''
    • word:
      • features: pdp vs vt
      • featuresBare: lex:gloss
  15. writing: hbo
\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" } ], "source": [ "# load the BHS app and data\n", "BHS = use (\"etcbc/BHSA\",hoist=globals())" ] }, { "cell_type": "markdown", "id": "15e42877-92f0-4afd-98ec-5fe6027f7c5f", "metadata": {}, "source": [ "Note: Thefeature documentation can be found at [ETCBC GitHub](https://github.com/ETCBC/bhsa/blob/master/docs/features/0_home.md) " ] }, { "cell_type": "code", "execution_count": 4, "id": "efaffbd5-fb79-4e44-950b-5a458d68c10f", "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# The following will push the Text-Fabric stylesheet to this notebook (to facilitate proper display with notebook viewer)\n", "BHS.dh(BHS.getCss())" ] }, { "cell_type": "markdown", "id": "0aef8f4f-73bb-425a-9e59-056b429a3a4c", "metadata": {}, "source": [ "# 3 - Performing the queries \n", "##### [Back to TOC](#TOC)" ] }, { "cell_type": "markdown", "id": "a3b9c42c-e8e2-4a05-a37c-c3d61b14871b", "metadata": {}, "source": [ "## 3.1 - Get overview of all pointed versions " ] }, { "cell_type": "markdown", "id": "e3ad10a2-7472-43d4-8f06-aa05c64f5052", "metadata": {}, "source": [ "First get all occurances of the Tetragrammaton יהוה (so without vowel pointing and other diacritical marks). See also notes on [feature g_word](https://github.com/ETCBC/bhsa/blob/master/docs/features/g_word.md). " ] }, { "cell_type": "code", "execution_count": 5, "id": "45f0cfbf-86e9-47c4-89be-3b31a1b6b85f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 0.51s 6828 results\n" ] } ], "source": [ "JHWHQuery = '''\n", "book\n", " chapter\n", " verse\n", " word g_cons=JHWH \n", "'''\n", "\n", "JHWHResults = BHS.search(JHWHQuery)" ] }, { "cell_type": "markdown", "id": "7b9d8cc2-aaf0-40de-a376-78571999020f", "metadata": {}, "source": [ "Now post process the results to create a nice table." ] }, { "cell_type": "code", "execution_count": 6, "id": "58402046-51a6-44b7-9d4a-bac0aca5ece7", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\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", " \n", " \n", " \n", " \n", " \n", " \n", "
Pointed WordFrequencyFirst OccurrenceHebrew Word
0J:HW@H5682(Genesis, 2, 4)יְהוָ֥ה
2JHW@H788(Genesis, 4, 3)יהוָֽה
5J:HWIH270(Deuteronomy, 3, 24)יְהוִ֗ה
1J:HOW@H45(Genesis, 3, 14)יְהֹוָ֨ה
7J:HOWIH32(1_Kings, 2, 26)יְהֹוִה֙
4JHOW@H6(Genesis, 18, 17)יהֹוָ֖ה
3J:EHWIH2(Genesis, 15, 2)יֱהוִה֙
6J:EHOWIH1(Judges, 16, 28)יֱהֹוִ֡ה
8JHWIH1(Psalms, 68, 21)יהוִ֥ה
9J:AHW@H1(Psalms, 144, 15)יֲהוָ֥ה
\n", "
" ], "text/plain": [ " Pointed Word Frequency First Occurrence Hebrew Word\n", "0 J:HW@H 5682 (Genesis, 2, 4) יְהוָ֥ה\n", "2 JHW@H 788 (Genesis, 4, 3) יהוָֽה\n", "5 J:HWIH 270 (Deuteronomy, 3, 24) יְהוִ֗ה\n", "1 J:HOW@H 45 (Genesis, 3, 14) יְהֹוָ֨ה\n", "7 J:HOWIH 32 (1_Kings, 2, 26) יְהֹוִה֙\n", "4 JHOW@H 6 (Genesis, 18, 17) יהֹוָ֖ה\n", "3 J:EHWIH 2 (Genesis, 15, 2) יֱהוִה֙\n", "6 J:EHOWIH 1 (Judges, 16, 28) יֱהֹוִ֡ה\n", "8 JHWIH 1 (Psalms, 68, 21) יהוִ֥ה\n", "9 J:AHW@H 1 (Psalms, 144, 15) יֲהוָ֥ה" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Libraries for table formatting and regular expressions\n", "import re\n", "import pandas as pd\n", "from IPython.display import display\n", "\n", "# Initialize dictionary for storing results\n", "resultDict = {}\n", "\n", "# Process each item in the JHWHResults\n", "for item in JHWHResults:\n", " node = item[3]\n", " # Get the pointed and unpointed representation of a word occurrence\n", " pointedWord = F.g_word.v(node)\n", " hebrewWord = F.g_word_utf8.v(node)\n", " \n", " # Remove cantillations in the BSHA (presented by digits)\n", " vocalizedWord = re.sub(r'\\d', '', pointedWord)\n", " \n", " if vocalizedWord in resultDict:\n", " # If exists, increment the frequency count\n", " resultDict[vocalizedWord][0] += 1\n", " else:\n", " # Initialize count and store the first occurrence\n", " firstOccurrence = T.sectionFromNode(node)\n", " resultDict[vocalizedWord] = [1, firstOccurrence, hebrewWord] \n", "\n", "# Convert the dictionary into a DataFrame and sort by frequency\n", "tableData = pd.DataFrame(\n", " [[key, value[0], value[1], value[2]] for key, value in resultDict.items()],\n", " columns=[\"Pointed Word\", \"Frequency\", \"First Occurrence\", \"Hebrew Word\"]\n", ")\n", "tableData = tableData.sort_values(by=\"Frequency\", ascending=False)\n", "\n", "# Display the table\n", "display(tableData)\n" ] }, { "cell_type": "markdown", "id": "3ae4e454-e8d0-4dd1-a28d-08cd9cdf10b6", "metadata": {}, "source": [ "## 3.2 Plotting the punctuations of the Tetragrammaton " ] }, { "cell_type": "code", "execution_count": 7, "id": "756f1ec8-7809-4169-8414-062c5b20175b", "metadata": {}, "outputs": [ { "data": { "text/html": [ " \n", "
\n", " \n", " Loading BokehJS ...\n", "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "'use strict';\n", "(function(root) {\n", " function now() {\n", " return new Date();\n", " }\n", "\n", " const force = true;\n", "\n", " if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n", " root._bokeh_onload_callbacks = [];\n", " root._bokeh_is_loading = undefined;\n", " }\n", "\n", "const JS_MIME_TYPE = 'application/javascript';\n", " const HTML_MIME_TYPE = 'text/html';\n", " const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n", " const CLASS_NAME = 'output_bokeh rendered_html';\n", "\n", " /**\n", " * Render data to the DOM node\n", " */\n", " function render(props, node) {\n", " const script = document.createElement(\"script\");\n", " node.appendChild(script);\n", " }\n", "\n", " /**\n", " * Handle when an output is cleared or removed\n", " */\n", " function handleClearOutput(event, handle) {\n", " function drop(id) {\n", " const view = Bokeh.index.get_by_id(id)\n", " if (view != null) {\n", " view.model.document.clear()\n", " Bokeh.index.delete(view)\n", " }\n", " }\n", "\n", " const cell = handle.cell;\n", "\n", " const id = cell.output_area._bokeh_element_id;\n", " const server_id = cell.output_area._bokeh_server_id;\n", "\n", " // Clean up Bokeh references\n", " if (id != null) {\n", " drop(id)\n", " }\n", "\n", " if (server_id !== undefined) {\n", " // Clean up Bokeh references\n", " const cmd_clean = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n", " cell.notebook.kernel.execute(cmd_clean, {\n", " iopub: {\n", " output: function(msg) {\n", " const id = msg.content.text.trim()\n", " drop(id)\n", " }\n", " }\n", " });\n", " // Destroy server and session\n", " const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n", " cell.notebook.kernel.execute(cmd_destroy);\n", " }\n", " }\n", "\n", " /**\n", " * Handle when a new output is added\n", " */\n", " function handleAddOutput(event, handle) {\n", " const output_area = handle.output_area;\n", " const output = handle.output;\n", "\n", " // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n", " if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n", " return\n", " }\n", "\n", " const toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n", "\n", " if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n", " toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n", " // store reference to embed id on output_area\n", " output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n", " }\n", " if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n", " const bk_div = document.createElement(\"div\");\n", " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n", " const script_attrs = bk_div.children[0].attributes;\n", " for (let i = 0; i < script_attrs.length; i++) {\n", " toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n", " toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\n", " }\n", " // store reference to server id on output_area\n", " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n", " }\n", " }\n", "\n", " function register_renderer(events, OutputArea) {\n", "\n", " function append_mime(data, metadata, element) {\n", " // create a DOM node to render to\n", " const toinsert = this.create_output_subarea(\n", " metadata,\n", " CLASS_NAME,\n", " EXEC_MIME_TYPE\n", " );\n", " this.keyboard_manager.register_events(toinsert);\n", " // Render to node\n", " const props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n", " render(props, toinsert[toinsert.length - 1]);\n", " element.append(toinsert);\n", " return toinsert\n", " }\n", "\n", " /* Handle when an output is cleared or removed */\n", " events.on('clear_output.CodeCell', handleClearOutput);\n", " events.on('delete.Cell', handleClearOutput);\n", "\n", " /* Handle when a new output is added */\n", " events.on('output_added.OutputArea', handleAddOutput);\n", "\n", " /**\n", " * Register the mime type and append_mime function with output_area\n", " */\n", " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n", " /* Is output safe? */\n", " safe: true,\n", " /* Index of renderer in `output_area.display_order` */\n", " index: 0\n", " });\n", " }\n", "\n", " // register the mime type if in Jupyter Notebook environment and previously unregistered\n", " if (root.Jupyter !== undefined) {\n", " const events = require('base/js/events');\n", " const OutputArea = require('notebook/js/outputarea').OutputArea;\n", "\n", " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n", " register_renderer(events, OutputArea);\n", " }\n", " }\n", " if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n", " root._bokeh_timeout = Date.now() + 5000;\n", " root._bokeh_failed_load = false;\n", " }\n", "\n", " const NB_LOAD_WARNING = {'data': {'text/html':\n", " \"
\\n\"+\n", " \"

\\n\"+\n", " \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n", " \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n", " \"

\\n\"+\n", " \"
    \\n\"+\n", " \"
  • re-rerun `output_notebook()` to attempt to load from CDN again, or
  • \\n\"+\n", " \"
  • use INLINE resources instead, as so:
  • \\n\"+\n", " \"
\\n\"+\n", " \"\\n\"+\n", " \"from bokeh.resources import INLINE\\n\"+\n", " \"output_notebook(resources=INLINE)\\n\"+\n", " \"\\n\"+\n", " \"
\"}};\n", "\n", " function display_loaded(error = null) {\n", " const el = document.getElementById(\"aaef5f90-aab0-4cfa-ae0f-a4be10debfc1\");\n", " if (el != null) {\n", " const html = (() => {\n", " if (typeof root.Bokeh === \"undefined\") {\n", " if (error == null) {\n", " return \"BokehJS is loading ...\";\n", " } else {\n", " return \"BokehJS failed to load.\";\n", " }\n", " } else {\n", " const prefix = `BokehJS ${root.Bokeh.version}`;\n", " if (error == null) {\n", " return `${prefix} successfully loaded.`;\n", " } else {\n", " return `${prefix} encountered errors while loading and may not function as expected.`;\n", " }\n", " }\n", " })();\n", " el.innerHTML = html;\n", "\n", " if (error != null) {\n", " const wrapper = document.createElement(\"div\");\n", " wrapper.style.overflow = \"auto\";\n", " wrapper.style.height = \"5em\";\n", " wrapper.style.resize = \"vertical\";\n", " const content = document.createElement(\"div\");\n", " content.style.fontFamily = \"monospace\";\n", " content.style.whiteSpace = \"pre-wrap\";\n", " content.style.backgroundColor = \"rgb(255, 221, 221)\";\n", " content.textContent = error.stack ?? error.toString();\n", " wrapper.append(content);\n", " el.append(wrapper);\n", " }\n", " } else if (Date.now() < root._bokeh_timeout) {\n", " setTimeout(() => display_loaded(error), 100);\n", " }\n", " }\n", "\n", " function run_callbacks() {\n", " try {\n", " root._bokeh_onload_callbacks.forEach(function(callback) {\n", " if (callback != null)\n", " callback();\n", " });\n", " } finally {\n", " delete root._bokeh_onload_callbacks\n", " }\n", " console.debug(\"Bokeh: all callbacks have finished\");\n", " }\n", "\n", " function load_libs(css_urls, js_urls, callback) {\n", " if (css_urls == null) css_urls = [];\n", " if (js_urls == null) js_urls = [];\n", "\n", " root._bokeh_onload_callbacks.push(callback);\n", " if (root._bokeh_is_loading > 0) {\n", " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n", " return null;\n", " }\n", " if (js_urls == null || js_urls.length === 0) {\n", " run_callbacks();\n", " return null;\n", " }\n", " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n", " root._bokeh_is_loading = css_urls.length + js_urls.length;\n", "\n", " function on_load() {\n", " root._bokeh_is_loading--;\n", " if (root._bokeh_is_loading === 0) {\n", " console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n", " run_callbacks()\n", " }\n", " }\n", "\n", " function on_error(url) {\n", " console.error(\"failed to load \" + url);\n", " }\n", "\n", " for (let i = 0; i < css_urls.length; i++) {\n", " const url = css_urls[i];\n", " const element = document.createElement(\"link\");\n", " element.onload = on_load;\n", " element.onerror = on_error.bind(null, url);\n", " element.rel = \"stylesheet\";\n", " element.type = \"text/css\";\n", " element.href = url;\n", " console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n", " document.body.appendChild(element);\n", " }\n", "\n", " for (let i = 0; i < js_urls.length; i++) {\n", " const url = js_urls[i];\n", " const element = document.createElement('script');\n", " element.onload = on_load;\n", " element.onerror = on_error.bind(null, url);\n", " element.async = false;\n", " element.src = url;\n", " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", " document.head.appendChild(element);\n", " }\n", " };\n", "\n", " function inject_raw_css(css) {\n", " const element = document.createElement(\"style\");\n", " element.appendChild(document.createTextNode(css));\n", " document.body.appendChild(element);\n", " }\n", "\n", " const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.6.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.6.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.6.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.6.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-3.6.0.min.js\"];\n", " const css_urls = [];\n", "\n", " const inline_js = [ function(Bokeh) {\n", " Bokeh.set_log_level(\"info\");\n", " },\n", "function(Bokeh) {\n", " }\n", " ];\n", "\n", " function run_inline_js() {\n", " if (root.Bokeh !== undefined || force === true) {\n", " try {\n", " for (let i = 0; i < inline_js.length; i++) {\n", " inline_js[i].call(root, root.Bokeh);\n", " }\n", "\n", " } catch (error) {display_loaded(error);throw error;\n", " }if (force === true) {\n", " display_loaded();\n", " }} else if (Date.now() < root._bokeh_timeout) {\n", " setTimeout(run_inline_js, 100);\n", " } else if (!root._bokeh_failed_load) {\n", " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n", " root._bokeh_failed_load = true;\n", " } else if (force !== true) {\n", " const cell = $(document.getElementById(\"aaef5f90-aab0-4cfa-ae0f-a4be10debfc1\")).parents('.cell').data().cell;\n", " cell.output_area.append_execute_result(NB_LOAD_WARNING)\n", " }\n", " }\n", "\n", " if (root._bokeh_is_loading === 0) {\n", " console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n", " run_inline_js();\n", " } else {\n", " load_libs(css_urls, js_urls, function() {\n", " console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n", " run_inline_js();\n", " });\n", " }\n", "}(window));" ], "application/vnd.bokehjs_load.v0+json": "'use strict';\n(function(root) {\n function now() {\n return new Date();\n }\n\n const force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n\n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n const NB_LOAD_WARNING = {'data': {'text/html':\n \"
\\n\"+\n \"

\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

\\n\"+\n \"
    \\n\"+\n \"
  • re-rerun `output_notebook()` to attempt to load from CDN again, or
  • \\n\"+\n \"
  • use INLINE resources instead, as so:
  • \\n\"+\n \"
\\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"
\"}};\n\n function display_loaded(error = null) {\n const el = document.getElementById(\"aaef5f90-aab0-4cfa-ae0f-a4be10debfc1\");\n if (el != null) {\n const html = (() => {\n if (typeof root.Bokeh === \"undefined\") {\n if (error == null) {\n return \"BokehJS is loading ...\";\n } else {\n return \"BokehJS failed to load.\";\n }\n } else {\n const prefix = `BokehJS ${root.Bokeh.version}`;\n if (error == null) {\n return `${prefix} successfully loaded.`;\n } else {\n return `${prefix} encountered errors while loading and may not function as expected.`;\n }\n }\n })();\n el.innerHTML = html;\n\n if (error != null) {\n const wrapper = document.createElement(\"div\");\n wrapper.style.overflow = \"auto\";\n wrapper.style.height = \"5em\";\n wrapper.style.resize = \"vertical\";\n const content = document.createElement(\"div\");\n content.style.fontFamily = \"monospace\";\n content.style.whiteSpace = \"pre-wrap\";\n content.style.backgroundColor = \"rgb(255, 221, 221)\";\n content.textContent = error.stack ?? error.toString();\n wrapper.append(content);\n el.append(wrapper);\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(() => display_loaded(error), 100);\n }\n }\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.6.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.6.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.6.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.6.0.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-3.6.0.min.js\"];\n const css_urls = [];\n\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {\n }\n ];\n\n function run_inline_js() {\n if (root.Bokeh !== undefined || force === true) {\n try {\n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\n\n } catch (error) {display_loaded(error);throw error;\n }if (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n const cell = $(document.getElementById(\"aaef5f90-aab0-4cfa-ae0f-a4be10debfc1\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));" }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " const docs_json = {\"00aabd70-17ab-4312-9800-e471d93703f9\":{\"version\":\"3.6.0\",\"title\":\"Bokeh Application\",\"roots\":[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p1004\",\"attributes\":{\"width\":1000,\"height\":800,\"x_range\":{\"type\":\"object\",\"name\":\"FactorRange\",\"id\":\"p1014\",\"attributes\":{\"factors\":[\"\\u05d9\\u05b0\\u05d4\\u05d5\\u05b8\\u05a5\\u05d4\",\"\\u05d9\\u05d4\\u05d5\\u05b8\\u05bd\\u05d4\",\"\\u05d9\\u05b0\\u05d4\\u05d5\\u05b4\\u0597\\u05d4\",\"\\u05d9\\u05b0\\u05d4\\u05b9\\u05d5\\u05b8\\u05a8\\u05d4\",\"\\u05d9\\u05b0\\u05d4\\u05b9\\u05d5\\u05b4\\u05d4\\u0599\",\"\\u05d9\\u05d4\\u05b9\\u05d5\\u05b8\\u0596\\u05d4\",\"\\u05d9\\u05b1\\u05d4\\u05d5\\u05b4\\u05d4\\u0599\",\"\\u05d9\\u05b1\\u05d4\\u05b9\\u05d5\\u05b4\\u05a1\\u05d4\",\"\\u05d9\\u05d4\\u05d5\\u05b4\\u05a5\\u05d4\",\"\\u05d9\\u05b2\\u05d4\\u05d5\\u05b8\\u05a5\\u05d4\"]}},\"y_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1006\"},\"x_scale\":{\"type\":\"object\",\"name\":\"CategoricalScale\",\"id\":\"p1015\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1016\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p1007\",\"attributes\":{\"text\":\"Frequency of Tetragrammaton vocalisation in biblical text\"}},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1046\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1001\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1002\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1003\"},\"data\":{\"type\":\"map\",\"entries\":[[\"index\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAAAIAAAAFAAAAAQAAAAcAAAAEAAAAAwAAAAYAAAAIAAAACQAAAA==\"},\"shape\":[10],\"dtype\":\"int32\",\"order\":\"little\"}],[\"Pointed Word\",{\"type\":\"ndarray\",\"array\":[\"J:HW@H\",\"JHW@H\",\"J:HWIH\",\"J:HOW@H\",\"J:HOWIH\",\"JHOW@H\",\"J:EHWIH\",\"J:EHOWIH\",\"JHWIH\",\"J:AHW@H\"],\"shape\":[10],\"dtype\":\"object\",\"order\":\"little\"}],[\"Frequency\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"MhYAABQDAAAOAQAALQAAACAAAAAGAAAAAgAAAAEAAAABAAAAAQAAAA==\"},\"shape\":[10],\"dtype\":\"int32\",\"order\":\"little\"}],[\"First Occurrence\",{\"type\":\"ndarray\",\"array\":[[\"Genesis\",2,4],[\"Genesis\",4,3],[\"Deuteronomy\",3,24],[\"Genesis\",3,14],[\"1_Kings\",2,26],[\"Genesis\",18,17],[\"Genesis\",15,2],[\"Judges\",16,28],[\"Psalms\",68,21],[\"Psalms\",144,15]],\"shape\":[10],\"dtype\":\"object\",\"order\":\"little\"}],[\"Hebrew Word\",{\"type\":\"ndarray\",\"array\":[\"\\u05d9\\u05b0\\u05d4\\u05d5\\u05b8\\u05a5\\u05d4\",\"\\u05d9\\u05d4\\u05d5\\u05b8\\u05bd\\u05d4\",\"\\u05d9\\u05b0\\u05d4\\u05d5\\u05b4\\u0597\\u05d4\",\"\\u05d9\\u05b0\\u05d4\\u05b9\\u05d5\\u05b8\\u05a8\\u05d4\",\"\\u05d9\\u05b0\\u05d4\\u05b9\\u05d5\\u05b4\\u05d4\\u0599\",\"\\u05d9\\u05d4\\u05b9\\u05d5\\u05b8\\u0596\\u05d4\",\"\\u05d9\\u05b1\\u05d4\\u05d5\\u05b4\\u05d4\\u0599\",\"\\u05d9\\u05b1\\u05d4\\u05b9\\u05d5\\u05b4\\u05a1\\u05d4\",\"\\u05d9\\u05d4\\u05d5\\u05b4\\u05a5\\u05d4\",\"\\u05d9\\u05b2\\u05d4\\u05d5\\u05b8\\u05a5\\u05d4\"],\"shape\":[10],\"dtype\":\"object\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1047\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1048\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"VBar\",\"id\":\"p1043\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Hebrew Word\"},\"width\":{\"type\":\"value\",\"value\":0.5},\"top\":{\"type\":\"field\",\"field\":\"Frequency\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"VBar\",\"id\":\"p1044\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Hebrew Word\"},\"width\":{\"type\":\"value\",\"value\":0.5},\"top\":{\"type\":\"field\",\"field\":\"Frequency\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"VBar\",\"id\":\"p1045\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Hebrew Word\"},\"width\":{\"type\":\"value\",\"value\":0.5},\"top\":{\"type\":\"field\",\"field\":\"Frequency\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p1013\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p1027\"},{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p1028\",\"attributes\":{\"renderers\":\"auto\"}},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p1029\",\"attributes\":{\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p1030\",\"attributes\":{\"syncable\":false,\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5,\"level\":\"overlay\",\"visible\":false,\"left\":{\"type\":\"number\",\"value\":\"nan\"},\"right\":{\"type\":\"number\",\"value\":\"nan\"},\"top\":{\"type\":\"number\",\"value\":\"nan\"},\"bottom\":{\"type\":\"number\",\"value\":\"nan\"},\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"top_units\":\"canvas\",\"bottom_units\":\"canvas\",\"handles\":{\"type\":\"object\",\"name\":\"BoxInteractionHandles\",\"id\":\"p1036\",\"attributes\":{\"all\":{\"type\":\"object\",\"name\":\"AreaVisuals\",\"id\":\"p1035\",\"attributes\":{\"fill_color\":\"white\",\"hover_fill_color\":\"lightgray\"}}}}}}}},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p1037\"},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p1038\"},{\"type\":\"object\",\"name\":\"HelpTool\",\"id\":\"p1039\"},{\"type\":\"object\",\"name\":\"HoverTool\",\"id\":\"p1049\",\"attributes\":{\"renderers\":\"auto\",\"tooltips\":[[\"Pointed Word\",\"@{Pointed Word}\"],[\"Frequency\",\"@Frequency\"],[\"First Occurrence\",\"@{First Occurrence}\"],[\"Hebrew Word\",\"@{Hebrew Word}\"]]}}]}},\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1022\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1023\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1024\"},\"axis_label\":\"Frequency\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1025\"}}}],\"below\":[{\"type\":\"object\",\"name\":\"CategoricalAxis\",\"id\":\"p1017\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"CategoricalTicker\",\"id\":\"p1018\"},\"formatter\":{\"type\":\"object\",\"name\":\"CategoricalTickFormatter\",\"id\":\"p1019\"},\"axis_label\":\"Hebrew Word\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1020\"},\"major_label_text_font_size\":\"26pt\"}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1021\",\"attributes\":{\"axis\":{\"id\":\"p1017\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1026\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p1022\"}}}]}}]}};\n", " const render_items = [{\"docid\":\"00aabd70-17ab-4312-9800-e471d93703f9\",\"roots\":{\"p1004\":\"a9101669-e706-4a1c-9d4e-f9f4572dd449\"},\"root_ids\":[\"p1004\"]}];\n", " void root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", " }\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " } else {\n", " let attempts = 0;\n", " const timer = setInterval(function(root) {\n", " if (root.Bokeh !== undefined) {\n", " clearInterval(timer);\n", " embed_document(root);\n", " } else {\n", " attempts++;\n", " if (attempts > 100) {\n", " clearInterval(timer);\n", " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n", " }\n", " }\n", " }, 10, root)\n", " }\n", "})(window);" ], "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "p1004" } }, "output_type": "display_data" } ], "source": [ "import pandas as pd\n", "from bokeh.plotting import figure, show, output_notebook\n", "from bokeh.models import ColumnDataSource, HoverTool\n", "from bokeh.layouts import column\n", "\n", "# Enable Bokeh output in the notebook\n", "output_notebook()\n", "\n", "# Ensure tableData has the exact column names you need\n", "tableData.columns = [\"Pointed Word\", \"Frequency\", \"First Occurrence\", \"Hebrew Word\"]\n", "\n", "# Create a ColumnDataSource for the Bokeh plot\n", "source = ColumnDataSource(tableData)\n", "\n", "# Create a Bokeh figure for the bar chart\n", "p = figure(\n", " x_range=tableData['Hebrew Word'].tolist(), # convert x_range to list explicitly\n", " height=800, \n", " width=1000,\n", " title=\"Frequency of Tetragrammaton vocalisation in biblical text\",\n", " toolbar_location=\"right\"\n", ")\n", "\n", "# Create bar chart\n", "p.vbar(x='Hebrew Word', top='Frequency', width=0.5, source=source)\n", "\n", "# Add labels and customizations\n", "p.xaxis.axis_label = \"Hebrew Word\"\n", "p.yaxis.axis_label = \"Frequency\"\n", "p.xaxis.major_label_orientation = \"horizontal\"\n", "p.xaxis.major_label_text_font_size = \"26pt\" # Increase font size of x-axis labels\n", "\n", "# Add hover tool\n", "hover = HoverTool()\n", "hover.tooltips = [\n", " (\"Pointed Word\", \"@{Pointed Word}\"),\n", " (\"Frequency\", \"@Frequency\"),\n", " (\"First Occurrence\", \"@{First Occurrence}\"),\n", " (\"Hebrew Word\", \"@{Hebrew Word}\")\n", "]\n", "p.add_tools(hover)\n", "\n", "# Show the interactive plot\n", "show(p)" ] }, { "cell_type": "markdown", "id": "0742d082-a01d-479f-953c-b2a70c6ac164", "metadata": {}, "source": [ "## 3.3 Some other playing around " ] }, { "cell_type": "markdown", "id": "dc6f1209-8406-4e6f-b348-c0ff0d5e9462", "metadata": {}, "source": [ "Add another condition to the query. This is to select for the wowels for adOnAi, translatiteratd as O and @, which should be around the Wav. The regexp inludes '.*' to allow for in-between cantilation marks." ] }, { "cell_type": "code", "execution_count": 8, "id": "fed9135b-174d-487d-b2ec-24937bf066ca", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 0.29s 51 results\n" ] } ], "source": [ "adonaiQuery = '''\n", "word g_cons=JHWH g_word~O.*W.*@\n", "'''\n", "\n", "adonaiResults = BHS.search(adonaiQuery)" ] }, { "cell_type": "code", "execution_count": 9, "id": "c03bf855-596a-4f78-ad18-f9cc8fe41339", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\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", "
npword
1Genesis 3:14יְהֹוָ֨ה
2Genesis 9:26יְהֹוָ֖ה
3Genesis 18:17יהֹוָ֖ה
4Exodus 3:2יְהֹוָ֥ה
5Exodus 13:3יְהֹוָ֛ה
6Exodus 13:9יְהֹוָ֖ה
7Exodus 13:12יהֹוָ֑ה
8Exodus 13:15יְהֹוָ֤ה
9Exodus 14:1יְהֹוָ֖ה
10Exodus 14:8יְהֹוָ֗ה
11Leviticus 23:34יהֹוָֽה׃
12Leviticus 25:17יְהֹוָ֖ה
13Deuteronomy 31:27יְהֹוָ֔ה
14Deuteronomy 32:9יְהֹוָ֖ה
15Deuteronomy 33:12יְהֹוָ֔ה
16Deuteronomy 33:13יְהֹוָ֖ה
171_Kings 3:5יְהֹוָ֛ה
181_Kings 16:33יְהֹוָה֙
19Jeremiah 2:37יְהֹוָה֙
20Jeremiah 3:1יְהֹוָֽה׃
21Jeremiah 3:13יְהֹוָֽה׃
22Jeremiah 3:21יְהֹוָ֥ה
23Jeremiah 3:22יְהֹוָ֥ה
24Jeremiah 3:23יהֹוָ֣ה
25Jeremiah 3:25יְהֹוָ֥ה
26Jeremiah 4:3יְהֹוָ֗ה
27Jeremiah 4:4יהֹוָ֗ה
28Jeremiah 4:8יְהֹוָ֖ה
29Jeremiah 5:2יְהֹוָ֖ה
30Jeremiah 5:3יְהֹוָ֗ה
31Jeremiah 5:9יְהֹוָ֑ה
32Jeremiah 5:15יְהֹוָ֑ה
33Jeremiah 5:18יְהֹוָ֑ה
34Jeremiah 5:19יְהֹוָ֧ה
35Jeremiah 5:22יְהֹוָ֗ה
36Jeremiah 5:29יְהֹוָ֑ה
37Jeremiah 6:9יְהֹוָ֣ה
38Jeremiah 8:13יְהֹוָ֑ה
39Jeremiah 30:10יְהֹוָה֙
40Jeremiah 36:8יְהֹוָֽה׃ ס
41Ezekiel 33:23יְהֹוָ֖ה
42Ezekiel 44:5יְהֹוָ֗ה
43Ezekiel 46:13יהֹוָ֑ה
44Nahum 1:3יְהֹוָ֗ה
45Psalms 15:1יְ֭הֹוָה
46Psalms 40:5יְ֭הֹוָה
47Psalms 47:6יְ֝הֹוָ֗ה
48Psalms 100:5יְ֭הֹוָה
49Psalms 116:5יְהֹוָ֣ה
50Psalms 116:6יְהֹוָ֑ה
51Proverbs 1:29יְ֝הֹוָ֗ה
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "BHS.table(adonaiResults, condensed=False, extraFeatures={'voc_lex'})" ] }, { "cell_type": "code", "execution_count": 10, "id": "a7bff48c-926a-4dd0-b2d6-6e635bd97aea", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 0.32s 51 results\n" ] } ], "source": [ "adonaiQuery2 = '''\n", "word lex=JHWH/ g_word~O.*W.*@\n", "'''\n", "\n", "adonaiResults2 = BHS.search(adonaiQuery2)" ] }, { "cell_type": "markdown", "id": "fb6f5b57-d4d8-494a-8cd2-160d90807e07", "metadata": {}, "source": [ "Print the features associated with word nodes that containing data" ] }, { "cell_type": "code", "execution_count": 11, "id": "d21b93df-1dc3-454c-aba6-79c1875663a4", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "freq_lex = 6828\n", "g_cons = JHWH\n", "g_cons_utf8 = יהוה\n", "g_lex = J:HOW@H\n", "g_lex_utf8 = יְהֹוָה\n", "g_word = J:HOW@63H\n", "g_word_utf8 = יְהֹוָ֨ה\n", "gloss = YHWH\n", "gn = m\n", "language = Hebrew\n", "lex = JHWH/\n", "lex_utf8 = יהוה\n", "ls = none\n", "nametype = pers\n", "nme = \n", "nu = sg\n", "number = 1427\n", "otype = word\n", "pdp = nmpr\n", "pfm = n/a\n", "phono = [yᵊhôˌāh]\n", "phono_trailer = \n", "prs = n/a\n", "prs_gn = NA\n", "prs_nu = NA\n", "prs_ps = NA\n", "ps = NA\n", "rank_lex = 6\n", "sp = nmpr\n", "st = a\n", "trailer = \n", "trailer_utf8 = \n", "uvf = absent\n", "vbe = n/a\n", "vbs = n/a\n", "voc_lex = J:HW@H\n", "voc_lex_utf8 = יְהוָה\n", "vs = NA\n", "vt = NA\n" ] } ], "source": [ "featureList=Fall()\n", "for item in adonaiResults2:\n", " Node=item[0]\n", " for feature in featureList:\n", " featureValue=Fs(feature).v(Node)\n", " if type(featureValue)!=type(None): print (feature,'=',featureValue)\n", " break" ] }, { "cell_type": "code", "execution_count": 12, "id": "f0b22416-84d4-4e94-9a31-54a5e875ad17", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\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", " \n", " \n", " \n", " \n", " \n", " \n", "
PointingFrequencyFirst OccurrenceHebrew Word
0J:HW@H5682(Genesis, 2, 4)יְהוָ֥ה
2JHW@H788(Genesis, 4, 3)יהוָֽה
5J:HWIH270(Deuteronomy, 3, 24)יְהוִ֗ה
1J:HOW@H45(Genesis, 3, 14)יְהֹוָ֨ה
7J:HOWIH32(1_Kings, 2, 26)יְהֹוִה֙
4JHOW@H6(Genesis, 18, 17)יהֹוָ֖ה
3J:EHWIH2(Genesis, 15, 2)יֱהוִה֙
6J:EHOWIH1(Judges, 16, 28)יֱהֹוִ֡ה
8JHWIH1(Psalms, 68, 21)יהוִ֥ה
9J:AHW@H1(Psalms, 144, 15)יֲהוָ֥ה
\n", "
" ], "text/plain": [ " Pointing Frequency First Occurrence Hebrew Word\n", "0 J:HW@H 5682 (Genesis, 2, 4) יְהוָ֥ה\n", "2 JHW@H 788 (Genesis, 4, 3) יהוָֽה\n", "5 J:HWIH 270 (Deuteronomy, 3, 24) יְהוִ֗ה\n", "1 J:HOW@H 45 (Genesis, 3, 14) יְהֹוָ֨ה\n", "7 J:HOWIH 32 (1_Kings, 2, 26) יְהֹוִה֙\n", "4 JHOW@H 6 (Genesis, 18, 17) יהֹוָ֖ה\n", "3 J:EHWIH 2 (Genesis, 15, 2) יֱהוִה֙\n", "6 J:EHOWIH 1 (Judges, 16, 28) יֱהֹוִ֡ה\n", "8 JHWIH 1 (Psalms, 68, 21) יהוִ֥ה\n", "9 J:AHW@H 1 (Psalms, 144, 15) יֲהוָ֥ה" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import re\n", "import pandas as pd\n", "from IPython.display import display\n", "\n", "# Initialize dictionary for storing results\n", "resultDict = {}\n", "\n", "# Process each item in the JHWHResults\n", "for item in JHWHResults:\n", " node = item[3]\n", " # Get the pointed and unpointed representation of a word occurrence\n", " pointedWord = F.g_word.v(node)\n", " hebrewWord = F.g_word_utf8.v(node)\n", " \n", " # Remove cantillations in the BHSA (presented by digits)\n", " vocalizedWord = re.sub(r'\\d', '', pointedWord)\n", " \n", " if vocalizedWord in resultDict:\n", " # If it exists, add the count to the existing value\n", " resultDict[vocalizedWord][0] += 1 # Increase frequency count\n", " else:\n", " # If it doesn't exist, initialize the count and store firstOccurrence\n", " firstOccurrence = T.sectionFromNode(node)\n", " resultDict[vocalizedWord] = [1, firstOccurrence, hebrewWord] \n", "\n", "# Convert the dictionary into a DataFrame and sort by frequency\n", "tableData = pd.DataFrame(\n", " [[key, value[0], value[1], value[2]] for key, value in resultDict.items()],\n", " columns=[\"Pointing\", \"Frequency\", \"First Occurrence\", \"Hebrew Word\"]\n", ")\n", "tableData = tableData.sort_values(by=\"Frequency\", ascending=False)\n", "\n", "# Display the table\n", "display(tableData)" ] }, { "cell_type": "code", "execution_count": 13, "id": "49b27d62-3f1f-4474-8bff-3713da302451", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 0.28s 0 results\n" ] } ], "source": [ "qereQuery = '''\n", "word qere_utf8 g_cons=JHWH\n", "'''\n", "\n", "qereResults = BHS.search(qereQuery)" ] }, { "cell_type": "code", "execution_count": 14, "id": "a3fa80a2-2e95-488d-86bf-c2f2b4a04f2c", "metadata": {}, "outputs": [], "source": [ "for item in qereResults:\n", " node = item[0]\n", " pointedWord = F.g_word.v(node)\n", " qereWord =F.qere.v(node)\n", " uncantQereWord=re.sub(r'\\d', '', qereWord)\n", " print (pointedWord,qereWord,uncantQereWord)\n", " break" ] }, { "cell_type": "markdown", "id": "4b0ba6e4-d36c-4483-a1d9-45bb425ad15a", "metadata": { "tags": [] }, "source": [ "# 4 - Required libraries\n", "##### [Back to TOC](#TOC)\n", "\n", "The scripts in this notebook require (beside `text-fabric`) the following Python libraries to be installed in the environment:\n", "\n", " bokeh\n", " IPython\n", " pandas\n", " re \n", "\n", "You can install any missing library from within Jupyter Notebook using either`pip` or `pip3`." ] }, { "cell_type": "markdown", "id": "410d005c-eac6-4fa7-aafb-37225feab035", "metadata": {}, "source": [ "# 5 - Notebook 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
Date4 Novermber 2024
\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 }