Spaces:
Sleeping
Sleeping
File size: 7,704 Bytes
1032a12 8a7498e 1032a12 8a7498e 1032a12 |
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 |
import unicodedata
import logging
logger = logging.getLogger(__name__)
def strip_diacritics(text):
"""
Entfernt Diakritika von Unicode-Zeichen, um den Basisbuchstaben zu erhalten, und gibt Warnungen
für tatsächlich unbekannte Zeichen aus.
"""
stripped_text = ''
for char in unicodedata.normalize('NFD', text):
if unicodedata.category(char) not in ['Mn', 'Cf']:
stripped_text += char
return stripped_text
def letter_to_value(letter):
"""
Konvertiert einen einzelnen Buchstaben in seinen Gematria-Wert, ignoriert Leerzeichen
und Nicht-Buchstaben-Zeichen.
"""
# Dein vorhandenes Wörterbuch bleibt unverändert
values = {
# Lateinische Buchstaben
'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,
# Basisbuchstaben und einige bereits genannte Varianten
'ا': 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
# Zusätzliche Varianten und Sonderzeichen
'ة': 400, # Taa Marbuta
'ؤ': 6, # Waw mit Hamza darüber
'ئ': 10, # Ya mit Hamza darüber
'ء': 1, # Hamza
'ى': 10, # Alif Maqsurah
'ٹ': 400, # Taa' marbuta goal
'پ': 2, # Pe (Persisch/Urdu)
'چ': 3, # Che (Persisch/Urdu)
'ژ': 7, # Zhe (Persisch/Urdu)
'گ': 20, # Gaf (Persisch/Urdu)
'ڭ': 20, # Ngaf (Kazakh, Uyghur, Uzbek, and in some Arabic dialects)
'ں': 50, # Noon Ghunna (Persisch/Urdu)
'ۀ': 5, # Heh with Yeh above (Persisch/Urdu)
'ے': 10, # Barree Yeh (Persisch/Urdu)
'؋': 0, # Afghani Sign (wird als Währungssymbol verwendet, nicht für Gematria relevant, aber hier zur Vollständigkeit aufgeführt)
# Anmerkung: Das Währungssymbol und ähnliche Zeichen sind in einem Gematria-Kontext normalerweise nicht relevant,
# werden aber der Vollständigkeit halber aufgeführt. Es gibt noch viele weitere spezifische Zeichen in erweiterten
# arabischen Schriftsystemen (z.B. für andere Sprachen wie Persisch, Urdu, Pashto usw.), die hier nicht vollständig
# abgedeckt sind.
# Grund- und Schlussformen hebräischer Buchstaben
'א': 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,
# Griechische Buchstaben
'α': 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,
# Griechische Großbuchstaben
'Α': 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 (Comprehensive with variants)
'क': 1, 'ख': 2, 'ग': 3, 'घ': 4, 'ङ': 5,
'च': 6, 'छ': 7, 'ज': 8, 'झ': 9, 'ञ': 0, # Or placeholder for zero if appropriate
'ट': 1, 'ठ': 2, 'ड': 3, 'ढ': 4, 'ण': 5,
'त': 6, 'थ': 7, 'द': 8, 'ध': 9, 'न': 0, # Or placeholder for zero if appropriate
'प': 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,
# Nukta forms (assuming same values - verify)
'क़': 1, 'ख़': 2, 'ग़': 3, 'ज़': 8, 'ड़': 3, 'ढ़': 4, 'फ़': 2,
# Kannada, Telugu, Malayalam equivalents
'ಕ': 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,
# Malayalam
'ക': 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,
# Vokale (Svara)
'अ': 0, 'आ': 0, 'इ': 0, 'ई': 0, 'उ': 0,
'ऊ': 0, 'ऋ': 0, 'ॠ': 0, 'ऌ': 0, 'ॡ': 0,
'ए': 0, 'ऐ': 0, 'ओ': 0, 'औ': 0,
# Zusätzliche Zeichen
'क्ष': 1, 'त्र': 6, 'ज्ञ': 8,
# Anusvaras und Visargas
'ं': 0, 'ः': 0,
# Halante (Virama)
'्': 0,
# Ziffern
'०': 0, '१': 1, '२': 2, '३': 3, '४': 4,
'५': 5, '६': 6, '७': 7, '८': 8, '९': 9,
# Sonderzeichen
'ॐ': 0, # Om-Symbol
# Vokalzeichen (Matra)
'ा': 0, 'ि': 0, 'ी': 0, 'ु': 0, 'ू': 0,
'ृ': 0, 'ॄ': 0, 'ॢ': 0, 'ॣ': 0, 'े': 0,
'ै': 0, 'ो': 0, 'ौ': 0,
# Zusätzliche Zeichen für vollständige Abdeckung
'ॅ': 0, 'ॆ': 0, 'ॉ': 0, 'ॊ': 0, 'ऍ': 0,
'ऎ': 0, 'ऑ': 0, 'ऒ': 0, 'ॎ': 0, 'ॏ': 0,
# Vedische Erweiterungen
'ᳵ': 0, 'ᳶ': 0, 'ॽ': 0,
}
# Stelle sicher, dass Diakritika entfernt werden, bevor auf das Wörterbuch zugegriffen wird
letter_no_diacritics = strip_diacritics(letter)
if letter_no_diacritics in values:
return values[letter_no_diacritics.lower()]
elif letter.strip() == "": # Ignoriere Leerzeichen und leere Zeilen
return 0
else:
# Gib eine spezifische Warnung aus, wenn das Zeichen unbekannt ist
#logger.info(f"Warnung: Unbekanntes Zeichen '{letter}' ignoriert.")
return 0
def calculate_gematria(text):
"""Calculate the Gematria value of a given Hebrew text, ignoring spaces and non-Hebrew characters."""
return sum(letter_to_value(letter) for letter in text if letter.strip() != "")
|