The Samaritan Pentateuch (SP) is a version of the Torah preserved by the Samaritan community, differing from the Masoretic Text (MT) in several aspects, including language, orthography, and occasionally theological emphasis. This notebook compares the text of the Masoretic Text, based on the BHSA dataset in Text-Fabric, with the Samaritan Pentateuch, also available as a Text-Fabric dataset.1
In this analysis, we focus on comparing the text of the verses in a specific parasha, highlighting differences in wording and orthography. Additionally, special attention is given to spelling variations of proper nouns between the two traditions. This notebook draws inspiration from the notebook provided by Martijn Naaijer2 and aims to explore the textual nuances between these two important versions of the Torah.
The following code will load the Text-Fabric version of the Samaritan Pentatuch, the Biblia Hebraica Stuttgartensia (Amstelodamensis) together with the additonal parasha related features from tonyjurg/BHSaddons.
from tf.app import use
# Load the SP data, and rename the node features class F,
# the locality class L and the text class T,
# then they cannot be overwritten while loading the MT.
SP = use('DT-UCPH/sp', version='3.4')
Fsp, Lsp, Tsp = SP.api.F, SP.api.L, SP.api.T
# Do the same for the MT dataset (BHSA) together with BHSaddons
MT = use('etcbc/bhsa', version='2021',mod="tonyjurg/BHSaddons/tf/")
Fmt, Lmt, Tmt = MT.api.F, MT.api.L, MT.api.T
Locating corpus resources ...
Name | # of nodes | # slots / node | % coverage |
---|---|---|---|
book | 5 | 79878.40 | 100 |
chapter | 187 | 2135.79 | 100 |
verse | 5841 | 68.38 | 100 |
word | 114890 | 3.48 | 100 |
sign | 399392 | 1.00 | 100 |
3
DT-UCPH/sp
C:/Users/tonyj/text-fabric-data/github/DT-UCPH/sp/app
g0c9b2fff6448228af93ed6c466ba95e6c0bb3547
''
layoutRich
orig
{docRoot}/bhsa
''
''
https://etcbc.github.io
0_home
{}
True
local
C:/Users/tonyj/text-fabric-data/github/DT-UCPH/sp/_temp
The Samaritan Pentateuch
DT-UCPH
/tf
sp
3.4
v3.4
{verse}
{verse}
True
lex
}hbo
Locating corpus resources ...
Name | # of nodes | # slots / node | % coverage |
---|---|---|---|
book | 39 | 10938.21 | 100 |
chapter | 929 | 459.19 | 100 |
lex | 9230 | 46.22 | 100 |
verse | 23213 | 18.38 | 100 |
half_verse | 45179 | 9.44 | 100 |
sentence | 63717 | 6.70 | 100 |
sentence_atom | 64514 | 6.61 | 100 |
clause | 88131 | 4.84 | 100 |
clause_atom | 90704 | 4.70 | 100 |
phrase | 253203 | 1.68 | 100 |
phrase_atom | 267532 | 1.59 | 100 |
subphrase | 113850 | 1.42 | 38 |
word | 426590 | 1.00 | 100 |
3
etcbc/bhsa
C:/Users/tonyj/text-fabric-data/github/etcbc/bhsa/app
gd905e3fb6e80d0fa537600337614adc2af157309
''
<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>)
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
none
unknown
NA
{docRoot}/{repo}
''
''
https://{org}.github.io
0_home
{}
True
local
C:/Users/tonyj/text-fabric-data/github/etcbc/bhsa/_temp
BHSA = Biblia Hebraica Stuttgartensia Amstelodamensis
10.5281/zenodo.1007624
Phonetic Transcriptions
https://nbviewer.jupyter.org/github/etcbc/phono/blob/master/programs/phono.ipynb
10.5281/zenodo.1007636
etcbc
/tf
phono
Parallel Passages
https://nbviewer.jupyter.org/github/etcbc/parallels/blob/master/programs/parallels.ipynb
10.5281/zenodo.1007642
etcbc
/tf
parallels
etcbc
/tf
bhsa
2021
https://shebanq.ancient-data.org/hebrew
Show this on SHEBANQ
la
True
{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
{webBase}/word?version={version}&id=<lid>
v1.8
{typ} {rela}
''
True
{code}
1
''
True
{label}
''
True
gloss
{voc_lex_utf8}
word
orig
{voc_lex_utf8}
{typ} {function}
''
True
{typ} {rela}
1
''
{number}
''
True
{number}
1
''
True
{number}
''
pdp vs vt
lex:gloss
hbo
In this section, we compare the surface texts of the Samaritan Pentateuch (SP) and the Masoretic Text (MT) at the verse level. By analyzing the wording and structure of these texts, we aim to identify variations.
# find all word nodes for this parasha (we can either use the transliterated name or the sequence number)
parashaQuery = '''
verse parashanum=8
'''
parashaResults = MT.search(parashaQuery)
0.01s 153 results
# Extract book, chapter, and verse information
bookChapterVerseList = [
Tmt.sectionFromNode(verse[0]) for verse in parashaResults
]
# Store parashname, start and end verse for future use
startNode=parashaResults[0][0]
endNode=parashaResults[-1][0]
parashaNameHebrew=Fmt.parashahebr.v(startNode)
parashaNameEnglish=Fmt.parashatrans.v(startNode)
bookStart,chapterStart,startVerse=Tmt.sectionFromNode(startNode)
parashaStart=f'{bookStart} {chapterStart}:{startVerse}'
bookEnd,chapterEnd,startEnd=Tmt.sectionFromNode(endNode)
parashaEnd=f'{chapterEnd}:{startEnd}'
htmlStart='<html><body>'
htmlFooter=f'<p>Data generated by `delta_mt_and_sp.ipynb` at `<a href=\"https://github.com/tonyjurg/Parashot\" target=\"_blank\">github.com/tonyjurg/Parashot</a>`</p></body></html>`'
# Function to reconstruct verses
def reconstructVerses(F, L, T, textFeature, inputList):
"""Reconstruct text for each verse."""
verseTexts = {}
for verseName in inputList:
verseText = ''
verseNode = T.nodeFromSection(verseName)
wordNodes = L.d(verseNode, 'word')
for wordNode in wordNodes:
wordText = eval(f'F.{textFeature}.v(wordNode)')
trailer = F.trailer.v(wordNode)
if wordText:
verseText += wordText + (trailer if trailer else ' ')
verseTexts[verseName] = verseText.strip()
return verseTexts
SPverses = reconstructVerses(Fsp, Lsp, Tsp, 'g_cons', bookChapterVerseList)
MTverses = reconstructVerses(Fmt, Lmt, Tmt, 'g_cons', bookChapterVerseList)
from difflib import SequenceMatcher
from IPython.display import HTML, display
def highlightMatches(baseText, comparisonText):
matcher = SequenceMatcher(None, baseText, comparisonText)
highlightedComparisonText = ""
for tag, i1, i2, j1, j2 in matcher.get_opcodes():
if tag == "equal": # Identical parts
highlightedComparisonText += comparisonText[j1:j2]
else: # Non-matching parts
highlightedComparisonText += f'<mark>{comparisonText[j1:j2]}</mark>'
return highlightedComparisonText
def cleanText(text):
replacements = [
# for the transcoded strings
('00_P', ''), # Remove '00_P'
('00_S', ''), # Remove '00_S'
('00', ''), # Remove '00'
('&', ' '), # Replace '&' with a space
# for the Hebrew strings
('ืก ', ''), # Final Samekh
('ืค ', ''), # Final Pe
('ื', ''), # End of verse
('ึพ',' ') # maqaf
]
# Apply each replacement
for old, new in replacements:
text = text.replace(old, new)
return text
# Function to format and highlight verse differences between MT and SP
def formatAndHighlight(label, MTverseText, SPverseText):
book, chapter, verse = label
MTverseNode = Tmt.nodeFromSection(label)
MTtext = cleanText(Tmt.text(MTverseNode, "text-orig-plain"))
SPverseNode = Tsp.nodeFromSection(label)
SPtext = Tsp.text(SPverseNode)
SPmarkedText = highlightMatches(MTtext, SPtext)
MTmarkedText = highlightMatches(SPtext, MTtext)
formattedDiff = (
f'<h4><a href=\"https://www.stepbible.org/?q=version=NASB2020&reference='
f'{book}.{chapter}:{verse}&options=HNVUG\" target=\"_blank\">{book} {chapter}:{verse}</a></h4>'
f'<p><b>SP:</b> {SPmarkedText}<br><b>MT:</b> {MTmarkedText}</p>'
)
return formattedDiff
# Gather differences into an HTML string
htmlContent = f'<h2>Differences between MT and SP for parasha {parashaNameEnglish} ({parashaStart}-{parashaEnd})</h2>'
for label, MTverseText in MTverses.items():
SPverseText = SPverses.get(label, '')
MTverseText = cleanText(MTverseText)
if MTverseText != SPverseText: # Check for differences
difference = formatAndHighlight(label, MTverseText, SPverseText)
htmlContent += difference
# Save the content to an HTML file
fileName = f"differences_MT_SP({parashaNameEnglish.replace(' ','%20')}).html"
with open(fileName, "w", encoding="utf-8") as file:
file.write(htmlContent)
# Display the content in the notebook
display(HTML(htmlContent))
# wrap html header and footer and display a download button
htmlContentFull = f'{htmlStart}{htmlContent}{htmlFooter}'
downloadButton = f"""
<a download="{fileName}" href="data:text/html;charset=utf-8,{htmlContentFull.replace('&', '&').replace('<', '<').replace('>', '>').replace('"', '"').replace("'", ''')}" target="_blank">
<button>Download Differences as HTML</button>
</a>
"""
display(HTML(downloadButton))
SP: ืืืฉืื ืืขืงื ืืืืืื ืืคื ืื ืื ืขืฉื ืืืื ืืจืฅ ืฉืขืืจ ืฉืื ืืืื
MT: ืืืฉืืื ืืขืงื ืืืืืื ืืคื ืื ืื ืขืฉืื ืืืื ืืจืฆื ืฉืืขืืจ ืฉืืื ืืืื
SP: ืืืื ืื ืฉืืจ ืืืืืจ ืืฆืื ืืขืื ืืฉืคืื ืืืฉืืื ืืืืื ืืืื ื ืืืฆื ืื ืืขืื ืื
MT: ืืืื ืื ืฉืืืจ ืืืืืจ ืฆืื ืืขืื ืืฉืืคืื ืืืฉืืืื ืืืืื ืืืื ื ืืืฆื ืื ืืขืื ืื
SP: ืืืืืจ ืื ืืืื ืขืฉื ืื ืืืื ื ืืืื ืืืืื ืืืื ืืืื ื ืื ืฉืืจ ืืคืืื
MT: ืืืืืจ ืื ืืืื ืขืฉืื ืื ืืืื ื ืืืืช ืืืืื ืืืื ืืืื ื ืื ืฉืืืจ ืืคืืืื
SP: ืืืืืจ ืืขืงื ืืืื ืืื ืืืจืื ืืืืื ืืื ืืฆืืง ืืืื ืืืจ ืืื ืฉืื ืื ืืจืฆื ืืื ืืืืืชื ืืืืื ืขืื
MT: ืืืืืจ ืืขืงื ืืืื ืืื ืืืจืื ืืืืื ืืื ืืฆืืง ืืืื ืืืืจ ืืื ืฉืืื ืืืจืฆื ืืืืืืืชื ืืืืืืื ืขืื
SP: ืืฆืื ื ื ื ืืื ืืื ืืื ืขืฉื ืื ืืจื ืื ืื ืืชื ืคื ืืืื ืืืื ื ืืื ืขื ืืื ืื
MT: ืืฆืืื ื ื ื ืืื ืืื ืืื ืขืฉืื ืื ืืจื ืื ืื ืืชื ืคื ืืืื ืืืื ื ืื ืขื ืื ืื
SP: ืืืชื ืืืจืช ืืืื ืืืื ืขืื ืืฉืืชื ืืช ืืจืขื ืืืื ืืื ืืฉืจ ืื ืืกืคืจ ืืจื
MT: ืืืชื ืืืจืช ืืืื ืืืืื ืขืื ืืฉืืืชื ืืช ืืจืขื ืืืื ืืื ืืฉืืจ ืื ืืกืคืจ ืืจื
SP: ืืืืื ืืื ืงืืช ืืื ืืื ืฉืืฉืื ืคืจืืช ืืจืืขืื ืืคืจืื ืขืฉืจื ืืชื ืืช ืขืฉืจืื ืืขืืจืื ืขืฉืจื
MT: ืืืืื ืืื ืืงืืช ืืื ืืื ืฉืืืฉืืื ืคืจืืช ืืจืืขืื ืืคืจืื ืขืฉืืจื ืืชื ืช ืขืฉืืจืื ืืขืืจื ืขืฉืืจื
SP: ืืืฆื ืืช ืืจืืืฉืื ืืืืจ ืื ืืคืืฉื ืขืฉื ืืื ืืฉืืื ืืืืจ ืืื ืืชื ืืื ื ืชืื ืืืื ืืื ืืคื ืื
MT: ืืืฆื ืืช ืืจืืฉืืื ืืืืจ ืื ืืคืืฉืื ืขืฉืื ืืื ืืฉืืืื ืืืืจ ืืื ืืชื ืืื ื ืชืื ืืืื ืืื ืืคื ืื
SP: ืืืืจืช ืืขืืื ืืืขืงื ืื ืื ืืื ืฉืืืื ืืืื ื ืืขืฉื ืืื ื ืื ืืื ืืืจืื ื
MT: ืืืืจืช ืืขืืื ืืืขืงื ืื ืื ืืื ืฉืืืืื ืืืื ื ืืขืฉืื ืืื ื ืื ืืื ืืืจืื ื
SP: ืืืฆื ืื ืืช ืืฉื ื ืืื ืืช ืืฉืืืฉื ืืื ืืช ืื ืืืืืื ืืืจื ืืขืืจืื ืืืืจ ืืืืจ ืืื ืชืืืจืื ืื ืขืฉื ืืืฆืืื ืืชื
MT: ืืืฆื ืื ืืช ืืฉืื ื ืื ืืช ืืฉืืืืฉืื ืื ืืช ืื ืืืืืื ืืืจื ืืขืืจืื ืืืืจ ืืืืจ ืืื ืชืืืจืื ืื ืขืฉืื ืืืฆืืื ืืชื
SP: ืืืืจืชื ืื ืื ื ืขืืื ืืขืงื ืื ืืืจืื ื ืื ืืืจ ืืืคืจื ืคื ืื ืืื ืื ืืืืืช ืืคื ื ืืืืจื ืื ืืจืื ืคื ืื ืืืื ืืฉื ืคื ื
MT: ืืืืจืชื ืื ืื ื ืขืืื ืืขืงื ืืืจืื ื ืื ืืืจ ืืืคืจื ืคื ืื ืืื ืื ืืืืืช ืืคื ื ืืืืจื ืื ืืจืื ืคื ืื ืืืื ืืฉืื ืคื ื
SP: ืืืงื ืืืืื ืืืื ืืืงื ืืช ืฉืชื ื ืฉืื ืืืช ืฉืชื ืฉืคืืชืื ืืืช ืืื ืขืฉืจ ืืืืืื ืืืขืืจ ืืช ืืขืืจ ืืืืง
MT: ืืืงืื ืืืืื ืืื ืืืงื ืืช ืฉืืชื ื ืฉืืื ืืืช ืฉืืชื ืฉืืคืืชืื ืืืช ืืื ืขืฉืืจ ืืืืื ืืืขืืจ ืืช ืืขืืจ ืืืง
SP: ืืืงืื ืืืขืืจื ืืช ืื ืื ืืืขืืจ ืืช ืื ืืฉืจ ืื
MT: ืืืงืื ืืืขืืจื ืืช ืื ืื ืืืขืืจ ืืช ืืฉืืจ ืื
SP: ืืืงืจื ืืขืงื ืฉื ืืืงืื ืคื ืืื ืื ืจืืืชื ืืืืื ืคื ืื ืื ืคื ืื ืืชื ืฆื ื ืคืฉื
MT: ืืืงืจื ืืขืงื ืฉืื ืืืงืื ืคื ืืื ืื ืจืืืชื ืืืืื ืคื ืื ืื ืคื ืื ืืชื ืฆื ื ืคืฉืื
SP: ืืืืจื ืื ืืฉืืฉ ืืืฉืจ ืขืืจ ืืช ืคื ืืื ืืืื ืฆืืืข ืขื ืืจืื
MT: ืืืืจื ืื ืืฉืืืฉื ืืืฉืืจ ืขืืจ ืืช ืคื ืืื ืืืื ืฆืืข ืขื ืืจืื
SP: ืขื ืื ืื ืืืืื ืื ื ืืฉืจืื ืืช ืืื ืื ืฉื ืืฉืจ ืขื ืืฃ ืืืจื ืขื ืืืื ืืื ืื ื ืืข ืืืฃ ืืจื ืืขืงื ืืืื ืื ืฉื
MT: ืขื ืื ืื ืืืืื ืื ื ืืฉืืจืื ืืช ืืื ืื ืฉืื ืืฉืืจ ืขื ืืฃ ืืืจื ืขื ืืืื ืืื ืื ื ืืข ืืืฃ ืืจื ืืขืงื ืืืื ืื ืฉืื
SP: ืืืฉื ืืช ืืฉืคืืืช ืืืช ืืืืืื ืจืืืฉืื ื ืืืช ืืื ืืืืืื ืืืจื ืื ืืืช ืจืื ืืืช ืืืกืฃ ืืืจื ืื
MT: ืืืฉืื ืืช ืืฉืืคืืืช ืืืช ืืืืืื ืจืืฉืื ื ืืืช ืืื ืืืืืื ืืืจื ืื ืืืช ืจืื ืืืช ืืืกืฃ ืืืจื ืื
SP: ืืืื ืขืืจ ืืคื ืืื ืืืฉืชืืื ืืจืฆื ืฉืืข ืคืขืืื ืขื ืืฉืชื ืขื ืืืื
MT: ืืืื ืขืืจ ืืคื ืืื ืืืฉืืชืื ืืจืฆื ืฉืืืข ืคืขืืื ืขื ืืฉืืชื ืขื ืืืื
SP: ืืืฉื ืขืื ืื ืืืจื ืืช ืื ืฉืื ืืืช ืืืืืื ืืืืืจ ืื ืืื ืื ืืืืืจ ืืืืืื ืืฉืจ ืื ื ืืืืื ืืช ืขืืื
MT: ืืืฉืื ืืช ืขืื ืื ืืืจื ืืช ืื ืฉืืื ืืืช ืืืืืื ืืืืืจ ืื ืืื ืื ืืืืืจ ืืืืืื ืืฉืืจ ืื ื ืืืืื ืืช ืขืืื
SP: ืืชืืฉื ื ืืฉืคืืืช ืื ื ืืืืืืื ืืชืฉืชืืืื ื
MT: ืืชืืฉืื ืืฉืืคืืืช ืื ื ืืืืืืื ืืชืฉืืชืืืื
SP: ืืืืืจ ืขืฉื ืืฉ ืื ืจื ืืื ืืืื ืื ืืฉืจ ืื
MT: ืืืืืจ ืขืฉืื ืืฉื ืื ืจื ืืื ืืื ืื ืืฉืืจ ืื
SP: ืืืืืจ ืืขืงื ืื ื ื ืื ื ื ืืฆืืชื ืื ืืขืื ืื ืืืงืืช ืื ืืชื ืืืื ืื ืขื ืื ืจืืืชื ืคื ืื ืืจืืืช ืคื ื ืืืืื ืืชืจืฆื ื
MT: ืืืืืจ ืืขืงื ืื ื ื ืื ื ื ืืฆืืชื ืื ืืขืื ืื ืืืงืืช ืื ืืชื ืืืื ืื ืขื ืื ืจืืืชื ืคื ืื ืืจืืช ืคื ื ืืืืื ืืชืจืฆื ื
SP: ืงื ื ื ืืช ืืจืืชื ืืฉืจ ืืืืชื ืื ืื ืื ื ื ืืืืื ืืื ืืฉ ืื ืื ืืืคืฆืจ ืื ืืืงื
MT: ืงื ื ื ืืช ืืจืืชื ืืฉืืจ ืืืืช ืื ืื ืื ื ื ืืืืื ืืื ืืฉื ืื ืื ืืืคืฆืจ ืื ืืืงื
SP: ืืืืืจ ืืืื ืืื ื ืืืข ืื ืืืืืื ืจืืื ืืืฆืื ืืืืงืจ ืืขืืช ืขืื ืืืคืงืชืื ืืื ืืื ืืืชื ืื ืืฆืื
MT: ืืืืืจ ืืืื ืืื ื ืืืข ืื ืืืืืื ืจืืื ืืืฆืื ืืืืงืจ ืขืืืช ืขืื ืืืคืงืื ืืื ืืื ืืืชื ืื ืืฆืื
SP: ืืขืืจ ื ื ืืื ื ืืคื ื ืขืืื ืืื ื ืืชื ืืื ืืืื ืืจืื ืืืืืื ืืฉืจ ืืคื ื ืืืจืื ืืืืืื ืขื ืืฉืจ ืืืื ืื ืืื ื ืฉืขืืจื
MT: ืืขืืจ ื ื ืืื ื ืืคื ื ืขืืื ืืื ื ืืชื ืืื ืืืื ืืจืื ืืืืืื ืืฉืืจ ืืคื ื ืืืจืื ืืืืืื ืขื ืืฉืืจ ืืื ืื ืืื ื ืฉืืขืืจื
SP: ืืืขืงื ื ืกืข ืกืืืชื ืืืื ืื ืืืช ืืืืงื ืื ืขืฉื ืกืืืช ืขื ืื ืงืจื ืฉื ืืืงืื ืกืืืช
MT: ืืืขืงื ื ืกืข ืกืืชื ืืืื ืื ืืืช ืืืืงื ืื ืขืฉืื ืกืืช ืขื ืื ืงืจื ืฉืื ืืืงืื ืกืืืช
SP: ืืืื ืืขืงื ืฉืืื ืขืืจ ืฉืื ืืฉืจ ืืืจืฅ ืื ืขื ืืืื ืืคืื ืืจื ืืืื ืืช ืคื ื ืืขืืจ
MT: ืืืื ืืขืงื ืฉืืื ืขืืจ ืฉืืื ืืฉืืจ ืืืจืฅ ืื ืขื ืืืื ืืคืื ืืจื ืืืื ืืช ืคื ื ืืขืืจ
SP: ืืชืฆื ืืื ื ืืช ืืื ืืฉืจ ืืืื ืืืขืงื ืืืจืืืช ืืื ืืช ืืืจืฅ
MT: ืืชืฆื ืืื ื ืืช ืืื ืืฉืืจ ืืืื ืืืขืงื ืืจืืืช ืืื ืืช ืืืจืฅ
SP: ืืชืืืง ื ืคืฉื ืืืื ื ืืช ืืขืงื ืืืืื ืืช ืื ืขืจื ืืืืืจ ืื ืื ืื ืขืจื
MT: ืืชืืืง ื ืคืฉืื ืืืื ื ืืช ืืขืงื ืืืืื ืืช ืื ืขืจ ืืืืืจ ืขื ืื ืื ืขืจ
SP: ืืืืืจ ืฉืื ืื ืืืื ืืืืจ ืงื ืื ืืช ืืืืื ืืืืช ืืืฉื
MT: ืืืืืจ ืฉืืื ืื ืืืืจ ืืืื ืืืืจ ืงื ืื ืืช ืืืืื ืืืืช ืืืฉืื
SP: ืืืขืงื ืฉืืข ืื ืืื ืืช ืืื ื ืืชื ืืื ืื ืืื ืืช ืืงื ืื ืืฉืื ืืืจืืฉ ืืขืงื ืขื ืืื
MT: ืืืขืงื ืฉืืืข ืื ืืื ืืช ืืื ื ืืชื ืืื ืื ืืื ืืช ืืงื ืื ืืฉืืื ืืืืจืฉื ืืขืงื ืขื ืืื
SP: ืืืชื ื ืชืฉืื ืืืืจืฅ ืชืืื ืืคื ืืื ืฉืื ืกืืจื ืืืืื ืื
MT: ืืืชื ื ืชืฉืืื ืืืืจืฅ ืชืืื ืืคื ืืื ืฉืืื ืืกืืจืื ืืืืืื ืื
SP: ืืจืื ืขืื ืืืจ ืืื ืืืชื ื ืืืชื ืืืฉืจ ืชืืืจื ืืื ืืชื ื ืื ืืช ืื ืขืจื ืืืฉื
MT: ืืจืื ืขืื ืืื ืืืจ ืืืชื ืืืชื ื ืืืฉืืจ ืชืืืจื ืืื ืืชื ื ืื ืืช ืื ืขืจ ืืืฉืื
SP: ืืืขื ื ืื ื ืืขืงื ืืช ืฉืื ืืืช ืืืืจ ืืืื ืืืจืื ืืืืืจื ืืฉืจ ืืืื ืืช ืืื ื ืืืืชื
MT: ืืืขื ื ืื ื ืืขืงื ืืช ืฉืืื ืืืช ืืืืจ ืืืื ืืืจืื ืืืืืจื ืืฉืืจ ืืื ืืช ืืื ื ืืืชื
SP: ืืืืืจื ืืืืื ืื ื ืืื ืืขืฉืืช ืืช ืืืืจ ืืื ืืชืช ืืช ืืืืชื ื ืืืืฉ ืืฉืจ ืื ืขืจืื ืื ืืจืคื ืืื ืื ื
MT: ืืืืืจื ืืืืื ืื ื ืืื ืืขืฉืืืช ืืืืจ ืืื ืืชืช ืืช ืืืชื ื ืืืืฉื ืืฉืืจ ืื ืขืจืื ืื ืืจืคื ืืื ืื ื
SP: ืื ืืืืช ื ืืืช ืืื ืื ืชืืื ืืืื ื ืืืืื ืืื ืื ืืืจ
MT: ืื ืืืืช ื ืืืช ืืื ืื ืชืืื ืืื ื ืืืื ืืื ืื ืืืจ
SP: ืื ืชื ื ืืช ืื ืชืื ื ืืื ืืืช ืื ืชืืื ื ืงื ืื ื ืืืฉืื ื ืืชืื ืืืืื ื ืืขื ืืื
MT: ืื ืชื ื ืืช ืื ืชืื ื ืืื ืืืช ืื ืชืืื ื ืงื ืื ื ืืืฉืืื ื ืืชืื ืืืืื ื ืืขื ืืื
SP: ืืืืืื ืืืจืืื ืืขืื ื ืืืืจ ืืืขืื ื ืฉืื ืื ื
MT: ืืืืืื ืืืจืืื ืืขืื ื ืืืืจ ืืืขืื ื ืฉืืื ืื ืืืืจ
SP: ืืื ืฉืื ืืืื ืฉืืืื ืื ืืชื ื ืืฉืื ืืืจืฅ ืืืกืืจื ืืชื ืืืืจืฅ ืื ื ืจืืืืช ืืืื ืืคื ืืื ืืช ืื ืืชื ื ืงื ืื ื ืื ืฉืื ืืืช ืื ืชืื ื ื ืชื ืืื
MT: ืืื ืฉืืื ืืืื ืฉืืืืื ืื ืืชื ื ืืืฉืืื ืืืจืฅ ืืืกืืจื ืืชื ืืืืจืฅ ืื ื ืจืืืช ืืืื ืืคื ืืื ืืช ืื ืชื ื ืงื ืื ื ืื ืฉืืื ืืืช ืื ืชืื ื ื ืชื ืืื
SP: ืื ืืืืช ืืืืชื ืื ื ืืื ืฉืื ืืฉืืช ืืชื ื ืืืืืช ืืขื ืืื ืืืืื ืื ื ืื ืืืจ ืืืฉืจ ืื ื ืืืื
MT: ืื ืืืืช ืืืชื ืื ื ืืื ืฉืืื ืืฉืืืช ืืชื ื ืืืืืช ืืขื ืืื ืืืืื ืื ื ืื ืืืจ ืืืฉืืจ ืื ื ืืืื
SP: ืืงื ืืื ืืงื ืื ื ืืื ืืืืชื ืืืื ืื ื ืื ืื ื ืืืช ืืื ืืืฉืื ืืชื ื
MT: ืืงื ืื ืืงื ืื ื ืืื ืืืืชื ืืืื ืื ื ืื ืื ื ืืืชื ืืื ืืืฉืืื ืืชื ื
SP: ืืื ื ืืขืงื ืืื ืขื ืืืืืื ืืืืื ืืขืืจ ืืฉืจ ืืืื ืืืืชื
MT: ืื ื ืืขืงื ืืื ืขื ืืืืืื ืืืืื ืืขืืจ ืืฉืืจ ืืืื ืืืืชื
SP: ืืืช ืื ืืืื ืืืช ืืคื ืืืช ื ืฉืืื ืฉืื ืืืืื ืืช ืื ืืฉืจ ืืืืช
MT: ืืืช ืื ืืืื ืืืช ืื ืืคื ืืืช ื ืฉืืืื ืฉืืื ืืืืื ืืืช ืื ืืฉืืจ ืืืืช
SP: ืืืืืจ ืืขืงื ืื ืฉืืขืื ืืื ืืื ืขืืจืชื ืืชื ืืืืืฉื ื ืืืืฉื ืืืจืฅ ืืื ืขื ื ืืืคืจืื ืืื ื ืืชื ืืกืคืจ ืื ืืกืคื ืขืื ืืืืื ื ืื ืฉืืืชื ืื ื ืืืืชื
MT: ืืืืืจ ืืขืงื ืื ืฉืืืขืื ืืื ืืื ืขืืจืชื ืืชื ืืืืืืฉืื ื ืืืฉืื ืืืจืฅ ืืื ืขื ื ืืืคืจืื ืืื ื ืืชื ืืกืคืจ ืื ืืกืคื ืขืื ืืืืื ื ืื ืฉืืืืชื ืื ื ืืืืชื
SP: ืืืืืจื ืื ืืื ื ืืขืฉื ืืช ืืืืชื ื
MT: ืืืืืจื ืืืืื ื ืืขืฉืื ืืช ืืืืชื ื
SP: ืืืืืจ ืืขืงื ืื ืืืชื ืืื ืื ืืฉืจ ืขืื ืืกืืจื ืืช ืืืื ืื ืืจ ืืฉืจ ืืชืืืื ืืืืืจื ืืืืืืคื ืฉืืืชืืื
MT: ืืืืืจ ืืขืงื ืื ืืืชื ืืื ืื ืืฉืืจ ืขืื ืืกืจื ืืช ืืืื ืื ืืจ ืืฉืืจ ืืชืืื ืืืืืจื ืืืืืืคื ืฉืืืืชืืื
SP: ืืืชื ื ืื ืืขืงื ืืช ืื ืืืื ืื ืืจ ืืฉืจ ืืืื ืืืช ืื ืืืื ืืฉืจ ืืืื ืืื ืืืืื ืืชื ืืขืงื ืชืืช ืืืืื ืืฉืจ ืขื ืฉืื
MT: ืืืชื ื ืื ืืขืงื ืืช ืื ืืืื ืื ืืจ ืืฉืืจ ืืืื ืืืช ืื ืืืื ืืฉืืจ ืืืื ืืื ืืืืื ืืชื ืืขืงื ืชืืช ืืืื ืืฉืืจ ืขื ืฉืืื
SP: ืืืกืขื ืืืื ืืชืช ืืืืื ืขื ืืขืจืื ืืฉืจ ืกืืืืชืืื ืืื ืจืืคื ืืืจื ืื ื ืืขืงื
MT: ืืืกืขื ืืืืื ืืชืช ืืืืื ืขื ืืขืจืื ืืฉืืจ ืกืืืืชืืื ืืื ืจืืคื ืืืจื ืื ื ืืขืงื
SP: ืืืื ืืขืงื ืืืื ืืฉืจ ืืืจืฅ ืื ืขื ืืื ืืืช ืื ืืื ืืื ืืขื ืืฉืจ ืขืื
MT: ืืืื ืืขืงื ืืืื ืืฉืืจ ืืืจืฅ ืื ืขื ืืื ืืืช ืื ืืื ืืื ืืขื ืืฉืืจ ืขืื
SP: ืืืื ืฉื ืืืื ืืืงืจื ืืืงืื ืื ืืืช ืื ืื ืฉื ื ืืื ืืืื ืืืืืื ืืืจืื ืืคื ื ืืืื
MT: ืืืื ืฉืื ืืืื ืืืงืจื ืืืงืื ืื ืืืช ืื ืื ืฉืื ื ืืื ืืืื ืืืืืื ืืืจืื ืืคื ื ืืืื
SP: ืืชืืช ืืืืจื ืืื ืงืช ืจืืงื ืืชืงืืจ ืืชืืช ืืืืช ืื ืชืืช ืืืืื ืืืงืจื ืฉืื ืืืื ืืืืช
MT: ืืชืืช ืืืจื ืืื ืงืช ืจืืงื ืืชืงืืจ ืืชืืช ืืืืช ืื ืชืืช ืืืืื ืืืงืจื ืฉืืื ืืืื ืืืืช
SP: ืืืจื ืืืืื ืื ืืขืงื ืขืื ืืืื ืืคืื ืืจื ืืืืจื ืืชื ืืืืื
MT: ืืืจื ืืืืื ืื ืืขืงื ืขืื ืืืื ืืคืื ืืจื ืืืืจื ืืชื
SP: ืืืืืจ ืื ืืืืื ืฉืื ืืขืงื ืื ืืงืจื ืขืื ืฉืื ืืขืงื ืื ืื ืืฉืจืื ืืืื ืฉืื ืืืงืจื ืืช ืฉืื ืืฉืจืื
MT: ืืืืืจ ืื ืืืืื ืฉืืื ืืขืงื ืื ืืงืจื ืฉืืื ืขืื ืืขืงื ืื ืื ืืฉืืจืื ืืืื ืฉืืื ืืืงืจื ืืช ืฉืืื ืืฉืืจืื
SP: ืืืงืจื ืืขืงื ืืช ืฉื ืืืงืื ืืฉืจ ืืืจ ืืชื ืฉื ืืืืื ืืืช ืื
MT: ืืืงืจื ืืขืงื ืืช ืฉืื ืืืงืื ืืฉืืจ ืืืจ ืืชื ืฉืื ืืืืื ืืืช ืื
SP: ืืืกืขื ืืืืช ืื ืืืื ืขืื ืืืจืช ืืืจืฅ ืืืื ืืคืจืชื ืืชืื ืจืื ืืชืงืฉ ืืืืชื
MT: ืืืกืขื ืืืืช ืื ืืืื ืขืื ืืืจืช ืืืจืฅ ืืืื ืืคืจืชื ืืชืื ืจืื ืืชืงืฉื ืืืืชื
SP: ืืืื ืืืงืฉืืชื ืืืืชื ืืชืืืจ ืื ืืืืืืช ืื ืชืืจืื ืื ืื ืื ืืื ืื
MT: ืืืื ืืืงืฉืืชื ืืืืชื ืืชืืืจ ืื ืืืืืืช ืื ืชืืจืื ืื ืื ืื ืื ืื
SP: ืืืื ืืฆืืช ื ืคืฉื ืื ืืชื ืืชืงืจื ืืช ืฉืื ืื ืืื ื ืืืืื ืงืจื ืื ืื ืืืื
MT: ืืืื ืืฆืืช ื ืคืฉืื ืื ืืชื ืืชืงืจื ืฉืืื ืื ืืื ื ืืืืื ืงืจื ืื ืื ืืืื
SP: ืืชืืช ืจืื ืืชืงืืจ ืืืจื ืืคืจืชื ืืื ืืืช ืืื
MT: ืืชืืช ืจืื ืืชืงืืจ ืืืจื ืืคืจืชื ืืื ืืืช ืืื
SP: ืืืฆื ืืขืงื ืืฆืื ืขื ืงืืจืชื ืืื ืืฆืืช ืงืืจืช ืจืื ืขื ืืืื
MT: ืืืฆื ืืขืงื ืืฆืื ืขื ืงืืจืชื ืืื ืืฆืืช ืงืืจืช ืจืื ืขื ืืืื
SP: ืืืกืข ืืฉืจืื ืืื ืืืื ืืืืื ืืืืื ืขืืจ
MT: ืืืกืข ืืฉืืจืื ืืื ืืืื ืืืืื ืืืืื ืขืืจ
SP: ืืืื ืืฉืื ืืฉืจืื ืืืจืฅ ืืืื ืืืื ืจืืืื ืืืฉืื ืืช ืืืื ืคืืืืฉ ืืืื ืืืฉืืข ืืฉืจืื ืืืืื ืื ื ืืขืงื ืฉื ืื ืขืฉืจ
MT: ืืืื ืืฉืืื ืืฉืืจืื ืืืจืฅ ืืืื ืืืื ืจืืืื ืืืฉืืื ืืช ืืืื ืคืืืืฉื ืืืื ืืืฉืืืข ืืฉืืจืื ืืืืื ืื ื ืืขืงื ืฉืื ืื ืขืฉืืจ
SP: ืืื ื ืจืื ืืืกืฃ ืืื ืืืื
MT: ืื ื ืจืื ืืืกืฃ ืืื ืืื
SP: ืืื ื ืืืคื ืฉืคืืช ืืื ืื ืืืฉืจ ืืื ืื ื ืืขืงื ืืฉืจ ืืืื ืื ืืคืื ืืจื
MT: ืืื ื ืืืคื ืฉืืคืืช ืืื ืื ืืืฉืืจ ืืื ืื ื ืืขืงื ืืฉืืจ ืืื ืื ืืคืื ืืจื
SP: ืืืื ืืขืงื ืื ืืฆืืง ืืืื ืืืจื ืงืจืืช ืืืจืืข ืืื ืืืจืื ืืฉืจ ืืจ ืฉื ืืืจืื ืืืฆืืง
MT: ืืืื ืืขืงื ืื ืืฆืืง ืืืื ืืืจื ืงืจืืช ืืืจืืข ืืื ืืืจืื ืืฉืืจ ืืจ ืฉืื ืืืจืื ืืืฆืืง
SP: ืืืืื ืืื ืืฆืืง ืืืช ืฉื ื ืืฉืื ืื ืฉื ื
MT: ืืืืื ืืื ืืฆืืง ืืืช ืฉืื ื ืืฉืืื ืื ืฉืื ื
SP: ืืืืืข ืืฆืืง ืืืืช ืืืืกืฃ ืื ืขืื ืืงื ืืฉืืข ืืืื ืืืงืืจื ืืชื ืขืฉื ืืืขืงื ืื ืื
MT: ืืืืืข ืืฆืืง ืืืืช ืืืืกืฃ ืื ืขืืื ืืงื ืืฉืืืข ืืืื ืืืงืืจื ืืชื ืขืฉืื ืืืขืงื ืื ืื
SP: ืืืื ืชืืืืช ืขืฉื ืืื ืืืื
MT: ืืืื ืชืืืืช ืขืฉืื ืืื ืืืื
SP: ืขืฉื ืืงื ืืช ื ืฉืื ืืื ืืช ืื ืขื ืืช ืขืื ืืช ืืืืื ืืืชื ืืืช ืืืืืืื ืืช ืขื ื ืื ืฆืืขืื ืืืื
MT: ืขืฉืื ืืงื ืืช ื ืฉืืื ืืื ืืช ืื ืขื ืืช ืขืื ืืช ืืืืื ืืืชื ืืืช ืืืืืืื ืืช ืขื ื ืืช ืฆืืขืื ืืืื
SP: ืืืช ืืืืช ืืช ืืฉืืขืื ืืืืช ื ืืืืช
MT: ืืืช ืืฉืืืช ืืช ืืฉืืืขืื ืืืืช ื ืืืืช
SP: ืืชืื ืขืื ืืขืฉื ืืช ืืืืคื ืืืืืช ืืืื ืืช ืจืขืืื
MT: ืืชืื ืขืื ืืขืฉืื ืืช ืืืืคื ืืืฉืืืช ืืืื ืืช ืจืขืืื
SP: ืืืืืืืื ืืืื ืืช ืืขืืฉ ืืืช ืืขืื ืืืช ืงืจื ืืื ืื ื ืขืฉื ืืฉืจ ืืืื ืื ืืืจืฅ ืื ืขื
MT: ืืืืืืืื ืืืื ืืช ืืขืืฉื ืืืช ืืขืื ืืืช ืงืจื ืืื ืื ื ืขืฉืื ืืฉืืจ ืืืื ืื ืืืจืฅ ืื ืขื
SP: ืืืงื ืขืฉื ืืช ื ืฉืื ืืืช ืื ืื ืืืช ืื ืชืื ืืืช ืื ื ืคืฉืืช ืืืชื ืืืช ืืงื ืื ืืืช ืื ืืืืชื ืืืช ืื ืงื ืื ื ืืฉืจ ืจืืฉ ืืืจืฅ ืื ืขื ืืืื ืืืจืฅ ืื ืขื ืืคื ื ืืขืงื ืืืื
MT: ืืืงื ืขืฉืื ืืช ื ืฉืืื ืืืช ืื ืื ืืืช ืื ืชืื ืืืช ืื ื ืคืฉืืืช ืืืชื ืืืช ืืงื ืื ืืืช ืื ืืืืชื ืืืช ืื ืงื ืื ื ืืฉืืจ ืจืืฉื ืืืจืฅ ืื ืขื ืืืื ืื ืืจืฅ ืืคื ื ืืขืงื ืืืื
SP: ืื ืืื ืจืืืฉื ืจื ืืฉืืช ืืืื ืืื ืืืื ืืจืฅ ืืืจืืื ืืฉืืช ืืชื ืืคื ื ืืงื ืืื
MT: ืื ืืื ืจืืืฉืื ืจื ืืฉืืืช ืืืื ืืื ืืืื ืืจืฅ ืืืืจืืื ืืฉืืืช ืืชื ืืคื ื ืืงื ืืื
SP: ืืืื ืชืืืืช ืขืฉื ืืื ืืืื ืืืจ ืฉืขืืจ
MT: ืืืื ืชืืืืช ืขืฉืื ืืื ืืืื ืืืจ ืฉืืขืืจ
SP: ืืืื ืฉืืืช ืื ื ืขืฉื ืืืืคื ืื ืขืื ืืฉืช ืขืฉื ืจืขืืื ืื ืืืืช ืืฉืช ืขืฉื
MT: ืืื ืฉืืืืช ืื ื ืขืฉืื ืืืืคื ืื ืขืื ืืฉืืช ืขืฉืื ืจืขืืื ืื ืืฉืืืช ืืฉืืช ืขืฉืื
SP: ืืืืื ืื ื ืืืืคื ืชืืื ืืืืจ ืืฆืคื ืืืขืชื ืืงื ื
MT: ืืืืื ืื ื ืืืืคื ืชืืื ืืืืจ ืฆืคื ืืืขืชื ืืงื ื
SP: ืืชืื ืข ืืืชื ืคืืืืฉ ืืืืืคื ืื ืขืฉื ืืชืื ืืืืืคื ืืช ืขืืืง ืืื ืื ื ืขืื ืืฉืช ืขืฉื
MT: ืืชืื ืขื ืืืชื ืคืืืืฉื ืืืืืคื ืื ืขืฉืื ืืชืื ืืืืืคื ืืช ืขืืืง ืืื ืื ื ืขืื ืืฉืืช ืขืฉืื
SP: ืืืื ืื ื ืจืขืืื ื ืืช ืืืจื ืฉืื ืืืื ืืื ืืื ืื ื ืืืืช ืืฉืช ืขืฉื
MT: ืืืื ืื ื ืจืขืืื ื ืืช ืืืจื ืฉืืื ืืืื ืืื ืืื ืื ื ืืฉืืืช ืืฉืืช ืขืฉืื
SP: ืืืื ืืื ืื ื ืืืืืืื ืืช ืขื ื ืื ืฆืืขืื ืืฉืช ืขืฉื ืืชืื ืืขืฉื ืืช ืืขืืฉ ืืืช ืืขืื ืืืช ืงืจื
MT: ืืืื ืืื ืื ื ืืืืืืื ืืช ืขื ื ืืช ืฆืืขืื ืืฉืืช ืขืฉืื ืืชืื ืืขืฉืื ืืช ืืขืืฉื ืืืช ืืขืื ืืืช ืงืจื
SP: ืืื ืืืืคื ืื ื ืขืฉื ืื ื ืืืืคื ืืืืจ ืขืฉื ืืืืฃ ืชืืื ืืืืฃ ืืืจ ืืืืฃ ืฆืคื ืืืืฃ ืงื ื
MT: ืืื ืืืืคื ืื ื ืขืฉืื ืื ื ืืืืคื ืืืืจ ืขืฉืื ืืืืฃ ืชืืื ืืืืฃ ืืืืจ ืืืืฃ ืฆืคื ืืืืฃ ืงื ื
SP: ืืืืฃ ืืขืชื ืืืืฃ ืขืืืง ืืื ืืืืคื ืืืืคื ืืืจืฅ ืืืื ืืื ืื ื ืขืื
MT: ืืืืฃ ืงืจื ืืืืฃ ืืขืชื ืืืืฃ ืขืืืง ืืื ืืืืคื ืืืืคื ืืืจืฅ ืืืื ืืื ืื ื ืขืื
SP: ืืืื ืื ื ืจืขืืื ืื ืขืฉื ืืืืฃ ื ืืช ืืืืฃ ืืจื ืืืืฃ ืฉืื ืืืืฃ ืืื ืืื ืืืืคื ืจืขืืื ืืืจืฅ ืืืื ืืื ืื ื ืืืืช ืืฉืช ืขืฉื
MT: ืืืื ืื ื ืจืขืืื ืื ืขืฉืื ืืืืฃ ื ืืช ืืืืฃ ืืจื ืืืืฃ ืฉืืื ืืืืฃ ืืื ืืื ืืืืคื ืจืขืืื ืืืจืฅ ืืืื ืืื ืื ื ืืฉืืืช ืืฉืืช ืขืฉืื
SP: ืืื ืื ื ืขืฉื ืืืื ืืืืคืืื ืขืฉื ืืื ืืืื
MT: ืืื ืื ื ืขืฉืื ืืืื ืืืืคืืื ืืื ืืืื
SP: ืืืื ืื ื ืฉืขืืจ ืืืจื ืืฉืื ืืืจืฅ ืืืื ืืฉืืื ืืฆืืขืื ืืขื ื
MT: ืืื ืื ื ืฉืืขืืจ ืืืจื ืืฉืืื ืืืจืฅ ืืืื ืืฉืืืื ืืฆืืขืื ืืขื ื
SP: ืืืืฉืื ืืืฆืจ ืืืืฉื ืืื ืืืืคื ืืืจื ืื ื ืฉืขืืจ ืืืจืฅ ืืืื
MT: ืืืฉืืื ืืืฆืจ ืืืืฉืื ืืื ืืืืคื ืืืจื ืื ื ืฉืืขืืจ ืืืจืฅ ืืืื
SP: ืืืืื ืื ื ืืืื ืืจื ืืืืื ืืืืืช ืืืื ืชืื ืข
MT: ืืืืื ืื ื ืืืื ืืจื ืืืืื ืืืืืช ืืืื ืชืื ืข
SP: ืืืื ืื ื ืฆืืขืื ืืื ืืขื ื ืืื ืขื ื ืืฉืจ ืืฆื ืืช ืืืืืื ืืืืืจ ืืจืขืชื ืืช ืืืืจืื ืืฆืืขืื ืืืื
MT: ืืืื ืื ื ืฆืืขืื ืืืื ืืขื ื ืืื ืขื ื ืืฉืืจ ืืฆื ืืช ืืืื ืืืืืจ ืืจืขืชื ืืช ืืืืจืื ืืฆืืขืื ืืืื
SP: ืืืื ืื ื ืขื ื ืืืฉืื ืืืืืืืื ืืช ืขื ื
MT: ืืืื ืื ื ืขื ื ืืฉืื ืืืืืืืื ืืช ืขื ื
SP: ืืืื ืื ื ืืืฉืื ืืืื ืืืฉืื ืืชืจื ืืืจื
MT: ืืืื ืื ื ืืืฉืื ืืืื ืืืฉืืื ืืืชืจื ืืืจื
SP: ืืืื ืื ื ืืฆืจ ืืืื ืืืืขื ืืขืงื
MT: ืืื ืื ื ืืฆืจ ืืืื ืืืขืื ืืขืงื
SP: ืืืื ืื ื ืืืฉื ืขืืฅ ืืืื
MT: ืืื ืื ื ืืืฉืื ืขืืฅ ืืืจื
SP: ืืืืฃ ืืืฉืื ืืืืฃ ืืฆืจ ืืืืฃ ืืืฉื ืืื ืืืืคื ืืืจื ืืืืืคืืื ืืืจืฅ ืฉืขืืจ
MT: ืืืืฃ ืืฉืื ืืืืฃ ืืฆืจ ืืืืฃ ืืืฉืื ืืื ืืืืคื ืืืจื ืืืืคืืื ืืืจืฅ ืฉืืขืืจ
SP: ืืืืช ืืฉื ืืืืื ืชืืชืื ืืื ืื ืืื ืืืื ืืช ืืืืื ื ืืฉืื ืืืื ืืฉื ืขืืจื ืขืืืช
MT: ืืืืช ืืฉืื ืืืืื ืชืืชืื ืืื ืื ืืื ืืืื ืืช ืืืื ืืฉืืื ืืืื ืืฉืื ืขืืจื ืขืืืช
SP: ืืืืช ืืขื ืื ื ืืืืื ืชืืชืื ืืื ืืฉื ืขืืจื ืคืขื ืืฉื ืืฉืชื ืืืืืื ืืช ืืืจื ืืช ืื ืืื
MT: ืืืืช ืืขื ืื ื ืื ืขืืืืจ ืืืืื ืชืืชืื ืืืจ ืืฉืื ืขืืจื ืคืขื ืืฉืื ืืฉืืชื ืืืืืืื ืืช ืืืจื ืืช ืื ืืื
SP: ืืืื ืฉืืืช ืืืืคื ืขืฉื ืืืฉืคืืืชื ืืืงืืืืชื ืืฉืืืชื ืืืืฃ ืชืื ืข ืืืืฃ ืขืืื ืืืืฃ ืืชืช
MT: ืืืื ืฉืืืืช ืืืืคื ืขืฉืื ืืืฉืืคืืชื ืืืงืืชื ืืฉืืืชื ืืืืฃ ืชืื ืข ืืืืฃ ืขืืื ืืืืฃ ืืชืช
SP: ืืืืฃ ืืืืื ืืืืฃ ืขืืจื ืืื ืืืืคื ืืืื ืืืฉืคืืืชื ืืืจืฅ ืืืืชื ืืื ืขืฉื ืืื ืืืื
MT: ืืืืฃ ืืืืืื ืืืืฃ ืขืืจื ืืืื ืืืืคื ืืืื ืืืฉืืืชื ืืืจืฅ ืืืืชื ืืื ืขืฉืื ืืื ืืืื
The Levenshtein distance measures the minimum number of single-character edits (insertions, deletions, or substitutions) needed to transform one text into another, providing a quantitative way to compare textual differences. For comparing the Masoretic Text and Samaritan Pentateuch, it highlights variations in spelling, word order, or minor textual changes.
In the context of the Levenshtein distance (in the script below threshold
), a higher number indicates greater dissimilarity between two texts, meaning more edits (insertions, deletions, or substitutions) are needed to transform one text into the other.
from Levenshtein import distance
from IPython.display import HTML, display
threshold = 20
# Create an HTML string to store the output
htmlContent = f'<h2>Levenshtein distance >{threshold} between MT and SP for parasha {parashaNameEnglish} ({parashaStart}-{parashaEnd})</h2>'
# Create header
MT.dm(f'### Levenshtein distance >{threshold} between MT and SP for parasha {parashaNameEnglish} ({parashaStart}-{parashaEnd})')
# Generate the HTML content
for label, MTverseText in MTverses.items():
SPverseText = SPverses.get(label, '')
levDistance = distance(MTverseText, SPverseText) # Calculate the distance
if levDistance > threshold:
formattedDiff = formatAndHighlight(label, MTverseText, SPverseText)
formattedDiff += f'<p>Levenshtein Distance: {levDistance}</p>' # Add the distance
MT.dm(formattedDiff)
htmlContent += formattedDiff # Append to the HTML content
# Save the content to an HTML file
fileName = f"levenshtein_differences_MT_SP({parashaNameEnglish.replace(' ','%20')}).html"
with open(fileName, "w", encoding="utf-8") as file:
file.write(htmlContent)
# wrap html header and footer and display a download button
htmlContentFull = f'{htmlStart}{htmlContent}{htmlFooter}'
downloadButton = f"""
<a download="{fileName}" href="data:text/html;charset=utf-8,{htmlContentFull.replace('&', '&').replace('<', '<').replace('>', '>').replace('"', '"').replace("'", ''')}" target="_blank">
<button>Download Differences as HTML</button>
</a>
"""
display(HTML(downloadButton))
This section focuses on comparing the spelling of proper nouns between the Samaritan Pentateuch (SP) and the Masoretic Text (MT). Proper nouns, including names of people, places, and unique terms, often exhibit variations in spelling
import collections
def collectProperNounSpellings(F, L, T, inputList):
"""
Collect proper noun spellings and their associated word node numbers.
Ensures only one tuple is stored for each lexeme-to-spelling mapping.
"""
properNounsSpellings = {}
for bookChapterVerse in inputList:
verseNode = T.nodeFromSection(bookChapterVerse)
wordNodes = L.d(verseNode, 'word')
for wordNode in wordNodes:
if F.sp.v(wordNode) == 'nmpr': # Check if the word is a proper noun
lex = F.lex.v(wordNode) # Lexical form
spelling = F.g_cons.v(wordNode) # Spelling
# Store only the first occurrence for each lex-to-cons mapping
if lex not in properNounsSpellings or spelling not in {item[0] for item in properNounsSpellings[lex]}:
properNounsSpellings.setdefault(lex, []).append((spelling, wordNode))
return properNounsSpellings
SPspellingDict = collectProperNounSpellings(Fsp, Lsp, Tsp, bookChapterVerseList)
MTspellingDict = collectProperNounSpellings(Fmt, Lmt, Tmt, bookChapterVerseList)
from IPython.display import HTML, display
# Initialize HTML content
htmlContent = f'<h2>Spelling differences in proper nouns between SP and MT for parasha {parashaNameEnglish} ({parashaStart}-{parashaEnd})</h2>'
# Generate the HTML output
for lex, MTspellings in MTspellingDict.items():
# Retrieve SP spellings, defaulting to an empty set if lex is not found
SPspellings = SPspellingDict.get(lex, set())
# Extract only the spellings (ignoring node numbers) for comparison
MTspellingSet = {spelling for spelling, _ in MTspellings}
SPspellingSet = {spelling for spelling, _ in SPspellings}
# Compare the sets of spellings
if MTspellingSet != SPspellingSet:
# Print MT spelling with reference
MTnode = list(MTspellings)[0][1] # Get first tuple's node number
book, chapter, verse = Tmt.sectionFromNode(MTnode)
MTgloss = Fmt.gloss.v(MTnode)
MTspelling = Fmt.g_cons_utf8.v(MTnode)
# Build HTML output
output = (
f'<h4>Word: <b>{MTgloss}</b> '
f'<a href="https://www.stepbible.org/?q=version=NASB2020&reference={book}.{chapter}:{verse}&options=HNVUG" target="_blank">'
f'{book} {chapter}:{verse}</a></h4>'
f'<ul><li><b>MT Spelling:</b> {MTspelling}</li>'
)
# Print SP spellings with reference
if SPspellings:
SPnode = list(SPspellings)[0][1] # Get first tuple's node number
SPspelling = Fsp.g_cons_utf8.v(SPnode)
output += f'<li><b>SP Spelling:</b> {SPspelling}</li></ul>'
else:
output += '<li><b>SP Spelling:</b> None</li></ul>'
# Append the output to the HTML content
htmlContent += output
# Save the HTML content to a file
fileName = f"spelling_differences_SP_MT({parashaNameEnglish.replace(' ','%20')}).html"
with open(fileName, "w", encoding="utf-8") as file:
file.write(htmlContent)
# Display the HTML content in the notebook
display(HTML(htmlContent))
# wrap html header and footer and display a download button
htmlContentFull = f'{htmlStart}{htmlContent}{htmlFooter}'
downloadButton = f"""
<a download="{fileName}" href="data:text/html;charset=utf-8,{htmlContentFull.replace('&', '&').replace('<', '<').replace('>', '>').replace('"', '"').replace("'", ''')}" target="_blank">
<button>Download Differences as HTML</button>
</a>
"""
display(HTML(downloadButton))
1 Christian Canu Hรธjgaard, Martijn Naaijer, & Stefan Schorch. (2023). Text-Fabric Dataset of the Samaritan Pentateuch. Zenodo. https://doi.org/10.5281/zenodo.7734632
The scripts in this notebook require (beside text-fabric
) the following Python libraries to be installed in the environment:
collections
difflib
Levenshtein
You can install any missing library from within Jupyter Notebook using eitherpip
or pip3
.