נספח: אלגוריתמים וקוד
סקירה כללית
כל הניתוחים המתוארים בספר זה יושמו בפייתון 3 והורצו על נתונים זמינים לציבור מה-API של Sefaria.org. לא נעשה שימוש בנתונים קנייניים, הערות ידניות או שלבים בלתי-ניתנים לשחזור. סקריפטי הניתוח המלאים זמינים ב-Zenodo (DOIs: 10.5281/zenodo.18744642, 10.5281/zenodo.18906232).
נספח זה מספק תיאורי פסאודו-קוד של האלגוריתמים המרכזיים.
---
✦
אלגוריתם 1: סיווג יסוד/בקרה
קלט: טקסט עברי עיצורי
פלט: סיווג כל אות כיסוד (F) או בקרה (C)
יסוד = {ג, ד, ז, ח, ט, ס, ע, פ, צ, ק, ר, ש} # 12 אותיות
בקרה = {א, מ, ת, נ, י, ה, ו, ב, כ, ל} # 10 אותיות
עבור כל מילה W בטקסט:
עבור כל אות L ב-W:
אם L ביסוד:
סווג(L) = "יסוד"
אחרת אם L בבקרה:
סווג(L) = "בקרה"
---
✦
אלגוריתם 2: חישוב אחוז יסוד
קלט: קטע טקסט (פסוקים או חלון) פלט: ערך אחוז יסוד ספירת_יסוד = 0 ספירה_כוללת = 0 עבור כל מילה W בקטע: עבור כל אות עיצורית L ב-W: ספירה_כוללת += 1 אם L ביסוד: ספירת_יסוד += 1 החזר ספירת_יסוד / ספירה_כוללת * 100
---
✦
אלגוריתם 3: חישוב ציון מצב
קלט: חלון טקסט (קבוצת פסוקים) פלט: ערך ציון מצב בטווח [-1, +1] Y = ספור מופעים של "יהוה" בחלון E = ספור מופעים של "אלהים" או "האלהים" בחלון אם Y + E > 0: החזר (Y - E) / (Y + E) אחרת: החזר 0 # אין שמות אלוהיים בחלון
---
✦
אלגוריתם 4: ניתוח קנה מידה של שונות
קלט: טקסט תורה מלא, רשימת גדלי חלונות פלט: שיפוע קנה מידה (α) ו-R² לכל מדד עבור כל גודל_חלון W ב-[10, 20, 50, 100, 200, 400, 800]: ערכים = [] עבור i = 0 עד (N - W) בצעדים של W: חלון = פסוקים[i : i+W] ערכים.הוסף(חשב_מדד(חלון)) # אחוז יסוד או ציון מצב סטיות_תקן.הוסף(סטיית_תקן(ערכים)) גדלי_חלונות.הוסף(W) # רגרסיה לינארית לוג-לוג לוג_חלונות = log10(גדלי_חלונות) לוג_סטיות = log10(סטיות_תקן) שיפוע, חיתוך, ערך_r = רגרסיה_לינארית(לוג_חלונות, לוג_סטיות) החזר שיפוע, ערך_r²
---
✦
אלגוריתם 5: פונקציית אוטוקורלציה
קלט: ערכי מדד לפי פסוק, רשימת פיגורים פלט: אוטוקורלציה בכל פיגור ערכים = מערך ערכי מדד (אחד לפסוק) ממוצע = ממוצע(ערכים) שונות = שונות(ערכים) N = אורך(ערכים) מרוכז = ערכים - ממוצע עבור כל פיגור L ברשימת_פיגורים: אם L >= N: דלג ac = סכום(מרוכז[0 : N-L] * מרוכז[L : N]) / ((N - L) * שונות) אוטוקורלציות.הוסף(ac) החזר אוטוקורלציות
---
✦
אלגוריתם 6: התאמת אורך קורלציה
קלט: ערכי אוטוקורלציה חיוביים ופיגורים מתאימים פלט: אורך קורלציה ξ # מודל אקספוננציאלי: ρ(k) = A * exp(-k/ξ) # מודל חוק כוח: ρ(k) = B * k^(-β) # סנן לערכי AC חיוביים בלבד פיגורים_חיוביים, acs_חיוביים = סנן(ac > 0.01) # התאם אקספוננציאלי A, ξ = התאמת_עקומה(מודל_אקספוננציאלי, פיגורים_חיוביים, acs_חיוביים) r2_exp = חשב_r_בריבוע(acs_חיוביים, מודל_אקספוננציאלי(פיגורים_חיוביים, A, ξ)) # התאם חוק כוח B, β = התאמת_עקומה(מודל_חוק_כוח, פיגורים_חיוביים, acs_חיוביים) r2_pow = חשב_r_בריבוע(acs_חיוביים, מודל_חוק_כוח(פיגורים_חיוביים, B, β)) # המר ξ מקטעים לפסוקים ξ_פסוקים = ξ * (כולל_פסוקים / מספר_קטעים) החזר ξ_פסוקים, r2_exp, β, r2_pow
---
✦
אלגוריתם 7: זיהוי גבולות בשלושה ערוצים
קלט: טקסט תורה מלא, גודל_חלון=50, צעד=10, סף=1.5 פלט: ספירת שיאים במקביל ב-3 ערוצים עבור i = 0 עד (N - גודל_חלון) בצעדים של צעד: חלון = פסוקים[i : i + גודל_חלון] # ערוץ 1: אחוז יסוד f_pct = חשב_אחוז_יסוד(חלון) # ערוץ 2: ציון מצב מצב = חשב_ציון_מצב(חלון) # ערוץ 3: וקטור מילות יחס fw_vec = חשב_וקטור_מילות_יחס(חלון) אם חלון_קודם קיים: f_שינוי = abs(f_pct - prev_f_pct) m_שינוי = abs(מצב - prev_מצב) fw_שינוי = מרחק_אוקלידי(fw_vec, prev_fw_vec) אחסן(f_שינוי, m_שינוי, fw_שינוי) prev_f_pct, prev_מצב, prev_fw_vec = f_pct, מצב, fw_vec # נרמל כל ערוץ f_z = (f_שינויים - ממוצע(f_שינויים)) / סטיית_תקן(f_שינויים) m_z = (m_שינויים - ממוצע(m_שינויים)) / סטיית_תקן(m_שינויים) fw_z = (fw_שינויים - ממוצע(fw_שינויים)) / סטיית_תקן(fw_שינויים) # ספור שיאים במקביל במקביל = ספור(f_z > סף AND m_z > סף AND fw_z > סף) החזר במקביל # צפוי: 0 לתורה
---
✦
אלגוריתם 8: הבחנה בין קורפוסים מותאמים
קלט: רשימת קורפוסים (תורה, נביאים, בקרות) פלט: מרחקים תלת-ממדיים מהתורה עבור כל קורפוס C: חתימה[C] = [ חשב_שיפוע_יסוד(C), חשב_שיפוע_ציון_מצב(C), חשב_יציבות_יסוד(C), חשב_קצב_שיאים(C), חשב_אוטוקורלציה_מצב(C) ] # נרמל Z-score על פני כל הקורפוסים וקטור_ממוצע = ממוצע(כל החתימות) וקטור_סטיית_תקן = סטיית_תקן(כל החתימות) תורה_z = (חתימה["תורה"] - וקטור_ממוצע) / וקטור_סטיית_תקן עבור כל קורפוס C != "תורה": z = (חתימה[C] - וקטור_ממוצע) / וקטור_סטיית_תקן מרחק[C] = מרחק_אוקלידי(z, תורה_z) החזר מרחקים # חצאי תורה צריכים להיות הקרובים ביותר
---
✦
אלגוריתם 9: מבחן הסרת אות
קלט: טקסט תורה מלא
פלט: מדדי שכבת בסיס עם ובלי שמות אלוהיים
# מקורי
שיפוע_מקורי = חשב_שיפוע_קנה_מידה_יסוד(טקסט_תורה)
ac_מקורי = חשב_אוטוקורלציה_יסוד(טקסט_תורה)
# מנוטרל: החלף כל שמות אלוהיים במציין מקום
טקסט_מנוטרל = טקסט_תורה.העתק()
עבור כל פסוק V בטקסט_מנוטרל:
החלף("יהוה", "שם") # מציין מקום נייטרלי
החלף("אלהים", "שם")
החלף("האלהים", "שם")
שיפוע_נייטרלי = חשב_שיפוע_קנה_מידה_יסוד(טקסט_מנוטרל)
ac_נייטרלי = חשב_אוטוקורלציה_יסוד(טקסט_מנוטרל)
# השווה
שינוי_שיפוע = abs(שיפוע_מקורי - שיפוע_נייטרלי)
קורלציה_ac = פירסון(ac_מקורי, ac_נייטרלי)
החזר שינוי_שיפוע, קורלציה_ac
# צפוי: שינוי_שיפוע ≈ 0, קורלציה_ac ≈ 1.0
---
✦
אלגוריתם 10: ניתוח מורפולוגיה של שמות
קלט: רשימת שמות פרטיים מהתורה
פלט: אחוז יסוד ותבנית סוגי אותיות לכל שם
יסוד = {ג, ד, ז, ח, ט, ס, ע, פ, צ, ק, ר, ש}
AMTN = {א, מ, ת, נ}
YHW = {י, ה, ו}
BKL = {ב, כ, ל}
עבור כל שם N:
תבנית = ""
ספירת_f = 0
כולל = 0
עבור כל אות L ב-N:
כולל += 1
אם L ביסוד:
ספירת_f += 1
תבנית += "F"
אחרת אם L ב-AMTN:
תבנית += "A"
אחרת אם L ב-YHW:
תבנית += "Y"
אחרת אם L ב-BKL:
תבנית += "B"
אחוז_יסוד = ספירת_f / כולל * 100
אחסן(שם=N, אחוז_יסוד, תבנית)
החזר כל ניתוחי השמות
---
✦
מקורות נתונים
- טקסט תורה: Sefaria.org API (https://www.sefaria.org/api/)
- תנ"ך עברי מלא: Sefaria.org API
- עיבוד מקדים: הסר סימני טעמים (טווח יוניקוד U+0591–U+05C7), השאר אותיות עיצוריות (U+05D0–U+05EA)
- לא נעשה שימוש בנתונים קנייניים
✦
יכולת שחזור
כל הסקריפטים זמינים ב:
- Zenodo DOI: 10.5281/zenodo.18744642 (סקריפטי המאמר הראשי)
- Zenodo DOI: 10.5281/zenodo.18906232 (סקריפטי שמות אלוהיים)
מנתח שורשי התורה העצמאי (torah_root_analyzer.py) יכול לשחזר את סיווג היסוד/בקרה המרכזי וכל הניתוחים הנגזרים מסקריפט יחיד.
✦ ✦ ✦