Spaces:
Sleeping
Sleeping
File size: 6,581 Bytes
f054e62 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 |
import unicodedata
import logging
logger = logging.getLogger(__name__)
USE_SIMPLE_GEMATRIA = True
HEBREW_GEMATRIA_VALUES = {
'א': 1, 'ב': 2, 'ג': 3, 'ד': 4, 'ה': 5, 'ו': 6, 'ז': 7, 'ח': 8, 'ט': 9, 'י': 10,
'כ': 20, 'ך': 500, 'ל': 30, 'מ': 40, 'ם': 600, 'נ': 50, 'ן': 700, 'ס': 60, 'ע': 70, 'פ': 80, 'ף': 800,
'צ': 90, 'ץ': 900, 'ק': 100, 'ר': 200, 'ש': 300, 'ת': 400,
}
GEMATRIA_VALUES = {
# Latin letters
'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6, 'g': 7, 'h': 8, 'i': 9, 'j': 600,
'k': 10, 'l': 20, 'm': 30, 'n': 40, 'o': 50, 'p': 60, 'q': 70, 'r': 80, 's': 90,
't': 100, 'u': 200, 'v': 700, 'w': 900, 'x': 300, 'y': 400, 'z': 500,
'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5, 'F': 6, 'G': 7, 'H': 8, 'I': 9, 'J': 600,
'K': 10, 'L': 20, 'M': 30, 'N': 40, 'O': 50, 'P': 60, 'Q': 70, 'R': 80, 'S': 90,
'T': 100, 'U': 200, 'V': 700, 'W': 900, 'X': 300, 'Y': 400, 'Z': 500,
# Base letters and some already mentioned variants
'ا': 1, 'أ': 1, 'إ': 1, 'آ': 1, 'ب': 2, 'ج': 3, 'د': 4, 'ه': 5, 'و': 6, 'ز': 7, 'ح': 8, 'ط': 9,
'ي': 10, 'ى': 10, 'ك': 20, 'ک': 20, 'ل': 30, 'م': 40, 'ن': 50, 'س': 60, 'ع': 70, 'ف': 80,
'ص': 90, 'ق': 100, 'ر': 200, 'ش': 300, 'ت': 400, 'ث': 500, 'خ': 600, 'ذ': 700, 'ض': 800, 'ظ': 900, 'غ': 1000,
'ٱ': 1, # Alif Wasla
'ـ': 0, # Tatweel
# Additional variants and special characters
'ة': 400, # Taa Marbuta
'ؤ': 6, # Waw with Hamza above
'ئ': 10, # Ya with Hamza above
'ء': 1, # Hamza
'ى': 10, # Alif Maqsurah
'ٹ': 400, # Taa' marbuta goal
'پ': 2, # Pe (Persian/Urdu)
'چ': 3, # Che (Persian/Urdu)
'ژ': 7, # Zhe (Persian/Urdu)
'گ': 20, # Gaf (Persian/Urdu)
'ڭ': 20, # Ngaf (Kazakh, Uyghur, Uzbek, and in some Arabic dialects)
'ں': 50, # Noon Ghunna (Persian/Urdu)
'ۀ': 5, # Heh with Yeh above (Persian/Urdu)
'ے': 10, # Barree Yeh (Persian/Urdu)
'؋': 0, # Afghani Sign
# Hebrew letters (base and final forms)
'א': 1, 'ב': 2, 'ג': 3, 'ד': 4, 'ה': 5, 'ו': 6, 'ז': 7, 'ח': 8, 'ט': 9, 'י': 10,
'כ': 20, 'ך': 500, 'ל': 30, 'מ': 40, 'ם': 600, 'נ': 50, 'ן': 700, 'ס': 60, 'ע': 70, 'פ': 80, 'ף': 800,
'צ': 90, 'ץ': 900, 'ק': 100, 'ר': 200, 'ש': 300, 'ת': 400,
# Greek letters
'α': 1, 'β': 2, 'γ': 3, 'δ': 4, 'ε': 5, 'ϝ': 6, 'ζ': 7, 'η': 8, 'θ': 9, 'ι': 10,
'κ': 20, 'λ': 30, 'μ': 40, 'ν': 50, 'ξ': 60, 'ο': 70, 'π': 80, 'ϟ': 90, 'ρ': 100,
'σ': 200, 'τ': 300, 'υ': 400, 'φ': 500, 'χ': 600, 'ψ': 700, 'ω': 800, 'ϡ': 900,
# Greek uppercase letters
'Α': 1, 'Β': 2, 'Γ': 3, 'Δ': 4, 'Ε': 5, 'Ϝ': 6, 'Ζ': 7, 'Η': 8, 'Θ': 9, 'Ι': 10,
'Κ': 20, 'Λ': 30, 'Μ': 40, 'Ν': 50, 'Ξ': 60, 'Ο': 70, 'Π': 80, 'Ϟ': 90, 'Ρ': 100,
'Σ': 200, 'Τ': 300, 'Υ': 400, 'Φ': 500, 'Χ': 600, 'Ψ': 700, 'Ω': 800, 'Ϡ': 900,
'σ': 200, # Sigma
'ς': 200, # Final Sigma
'ϲ': 200, # Lunate Sigma (Greek)
'Ϲ': 200, # Uppercase Lunate Sigma (Greek)
# Katapayadi System
'क': 1, 'ख': 2, 'ग': 3, 'घ': 4, 'ङ': 5,
'च': 6, 'छ': 7, 'ज': 8, 'झ': 9, 'ञ': 0,
'ट': 1, 'ठ': 2, 'ड': 3, 'ढ': 4, 'ण': 5,
'त': 6, 'थ': 7, 'द': 8, 'ध': 9, 'न': 0,
'प': 1, 'फ': 2, 'ब': 3, 'भ': 4, 'म': 5,
'य': 1, 'र': 2, 'ल': 3, 'व': 4, 'श': 5, 'ष': 6, 'स': 7, 'ह': 8,
# Half forms (same values)
'क्': 1, 'ख्': 2, 'ग्': 3, 'घ्': 4, 'ङ्': 5,
'च्': 6, 'छ्': 7, 'ज्': 8, 'झ्': 9, 'ञ्': 0,
'ट्': 1, 'ठ्': 2, 'ड्': 3, 'ढ्': 4, 'ण्': 5,
'त्': 6, 'थ्': 7, 'द्': 8, 'ध्': 9, 'न्': 0,
'प्': 1, 'फ्': 2, 'ब्': 3, 'भ्': 4, 'म्': 5,
'य्': 1, 'र्': 2, 'ल्': 3, 'व्': 4, 'श्': 5, 'ष्': 6, 'स्': 7, 'ह्': 8,
}
HEBREW_SOFIT_MAP = {
'ך': 'כ',
'ם': 'מ',
'ן': 'נ',
'ף': 'פ',
'ץ': 'צ'
}
def strip_diacritics(text):
# Diese Funktion bleibt unverändert
stripped_text = ''
for char in unicodedata.normalize('NFD', text):
if unicodedata.category(char) not in ['Mn', 'Cf']:
stripped_text += char
return stripped_text
def linearize_umlauts(text):
"""
Ersetzt Umlaute durch ihre linearisierte Form (ae, oe, ue) für die Gematria-Berechnung.
Behandelt Groß- und Kleinschreibung.
"""
replacements = {
'ä': 'ae', 'ö': 'oe', 'ü': 'ue',
'Ä': 'Ae', 'Ö': 'Oe', 'Ü': 'Ue',
'ß': 'ss'
}
for umlaut, replacement in replacements.items():
text = text.replace(umlaut, replacement)
return text
def letter_to_value(letter):
"""
Converts a single letter to its Gematria value, ignores spaces
and non-letter characters.
"""
# Die Funktion greift jetzt auf die globale Konstante zu
return GEMATRIA_VALUES.get(letter, 0)
# --- NEUE FUNKTION ZUR NORMALISIERUNG ---
def normalize_hebrew_for_simple_gematria(text):
"""Ersetzt hebräische Endbuchstaben (Sofit) durch ihre Standardform."""
for sofit, normal in HEBREW_SOFIT_MAP.items():
text = text.replace(sofit, normal)
return text
# --- ANGEPASSTE HAUPTFUNKTION ---
def calculate_gematria(text):
"""
Berechnet den Gematria-Wert eines Textes.
Verwendet den globalen Switch USE_SIMPLE_GEMATRIA, um die Methode zu bestimmen.
"""
if not text:
return 0
text_to_process = text
# Wende die Normalisierung an, wenn der Switch aktiv ist
if USE_SIMPLE_GEMATRIA:
logging.debug("Verwende SIMPLE Gematria: Normalisiere Endbuchstaben.")
text_to_process = normalize_hebrew_for_simple_gematria(text_to_process)
total = 0
for char in text_to_process:
value = letter_to_value(char)
total += value
return total
# Erstelle eine sortierte Liste nur für lateinische Buchstaben für den Fallback
LATIN_GEMATRIA_VALUES = {k: v for k, v in GEMATRIA_VALUES.items() if 'a' <= k <= 'z'}
SORTED_LATIN_GEMATRIA = sorted(LATIN_GEMATRIA_VALUES.items(), key=lambda item: item[1], reverse=True)
def decompose_to_latin(number):
"""
NEU: Zerlegt eine Zahl algorithmisch in lateinische Buchstaben.
Dies dient als Fallback für generische Texte.
"""
if number <= 0: return ""
text, remainder = "", number
for char, value in SORTED_LATIN_GEMATRIA:
while remainder >= value:
text += char
remainder -= value
|