Spaces:
Sleeping
Sleeping
Update analyze_verses_universal.py
Browse files- analyze_verses_universal.py +45 -41
analyze_verses_universal.py
CHANGED
@@ -18,7 +18,7 @@ CACHE_FILE = "tanakh_phrasedict.cache"
|
|
18 |
def get_power_result(total_sum, query_value):
|
19 |
"""Berechnet das Potenz-Ergebnis basierend auf dem höchsten möglichen Exponenten."""
|
20 |
if total_sum <= 0 or query_value <= 1 or query_value > total_sum:
|
21 |
-
return 1
|
22 |
try:
|
23 |
exponent = int(math.floor(math.log(total_sum, query_value)))
|
24 |
return query_value ** exponent
|
@@ -48,7 +48,6 @@ def main(args):
|
|
48 |
translator = None
|
49 |
if args.translate:
|
50 |
try:
|
51 |
-
# FIX: Der korrekte Code für Hebräisch ist 'iw'
|
52 |
translator = GoogleTranslator(source='iw', target='en')
|
53 |
except Exception as e:
|
54 |
logging.error(f"Konnte Übersetzer nicht initialisieren: {e}")
|
@@ -61,14 +60,14 @@ def main(args):
|
|
61 |
|
62 |
for book_num in BOOK_RANGE:
|
63 |
if args.process_verses and verses_processed >= args.process_verses: break
|
64 |
-
|
65 |
filepath = f"texts/torah/{book_num:02}.json"
|
66 |
try:
|
67 |
with open(filepath, 'r', encoding='utf-8') as file:
|
68 |
data = json.load(file)
|
69 |
for chap_idx, chapter in enumerate(data.get("text", []), start=1):
|
70 |
if args.process_verses and verses_processed >= args.process_verses: break
|
71 |
-
|
72 |
for verse_idx, verse_text in enumerate(chapter, start=1):
|
73 |
if args.process_verses and verses_processed >= args.process_verses: break
|
74 |
verses_processed += 1
|
@@ -76,49 +75,54 @@ def main(args):
|
|
76 |
verse_sum = calculate_gematria(verse_text)
|
77 |
if verse_sum <= 1: continue
|
78 |
|
79 |
-
# *** FINALE LOGIK: Bitplane-Tiefe der Potenz ***
|
80 |
power_result = get_power_result(verse_sum, query_value)
|
81 |
-
|
82 |
header_printed = False
|
83 |
|
84 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
85 |
for depth in range(args.xor_depth):
|
86 |
bit_mask = 1 << depth
|
87 |
-
|
88 |
-
# Wir prüfen nur Ebenen, bei denen das Bit im Potenzergebnis auch gesetzt ist
|
89 |
bitplane_value = power_result & bit_mask
|
90 |
-
if bitplane_value == 0:
|
91 |
-
continue
|
92 |
|
93 |
target_sum = verse_sum ^ bitplane_value
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
if all_matches:
|
98 |
-
if not header_printed:
|
99 |
-
resonance_count += 1
|
100 |
-
verse_ref = f"B{book_num:02d}, K{chap_idx}, V{verse_idx}"
|
101 |
-
print(f"\n--- Resonanz #{resonance_count} in [{verse_ref}] (G_sum:{verse_sum}) ---")
|
102 |
-
print(f"Originalvers: {verse_text.strip()}")
|
103 |
-
print(f" [INFO] Potenzergebnis des Queries: {power_result}")
|
104 |
-
header_printed = True
|
105 |
-
|
106 |
-
all_matches.sort(key=lambda p: (p.get('freq', 0) / p.get('words', 99)), reverse=True)
|
107 |
-
matches_to_show = all_matches[:args.results_per_verse]
|
108 |
-
|
109 |
-
print(f" ↳ Bitplane-Tiefe {depth}: [G_sum:{verse_sum}] ^ (Bit {depth} von {power_result}) → [G_ziel:{target_sum}]")
|
110 |
-
|
111 |
-
for match in matches_to_show:
|
112 |
-
translation = ""
|
113 |
-
if translator:
|
114 |
-
try: translation = translator.translate(match['text'])
|
115 |
-
except Exception: translation = "[Übersetzung fehlgeschlagen]"
|
116 |
-
|
117 |
-
score = (match.get('freq', 0) / match.get('words', 99))
|
118 |
-
info = f"(Wörter: {match.get('words', 'N/A')}, Freq: {match.get('freq', 'N/A')}, Score: {score:.2f})"
|
119 |
-
print(f" - {match['text']} {info}")
|
120 |
-
if translation:
|
121 |
-
print(f" ↳ Interpretation: \"{translation}\"")
|
122 |
except FileNotFoundError: continue
|
123 |
|
124 |
logging.info(f"Analyse abgeschlossen. {resonance_count} Resonanz-Verse in {verses_processed} analysierten Versen gefunden.")
|
@@ -129,6 +133,6 @@ if __name__ == "__main__":
|
|
129 |
parser.add_argument("--translate", action="store_true", help="Aktiviert die automatische Übersetzung.")
|
130 |
parser.add_argument("--process-verses", type=int, help="Maximale Anzahl der zu analysierenden Start-Verse.")
|
131 |
parser.add_argument("--results-per-verse", type=int, default=3, help="Maximale Orakel-Antworten pro gefundener Resonanz (Standard: 3).")
|
132 |
-
parser.add_argument("--xor-depth", type=int, default=16, help="
|
133 |
args = parser.parse_args()
|
134 |
-
main(args)
|
|
|
18 |
def get_power_result(total_sum, query_value):
|
19 |
"""Berechnet das Potenz-Ergebnis basierend auf dem höchsten möglichen Exponenten."""
|
20 |
if total_sum <= 0 or query_value <= 1 or query_value > total_sum:
|
21 |
+
return 1 # Fallback auf Potenz 1 (query_value^0)
|
22 |
try:
|
23 |
exponent = int(math.floor(math.log(total_sum, query_value)))
|
24 |
return query_value ** exponent
|
|
|
48 |
translator = None
|
49 |
if args.translate:
|
50 |
try:
|
|
|
51 |
translator = GoogleTranslator(source='iw', target='en')
|
52 |
except Exception as e:
|
53 |
logging.error(f"Konnte Übersetzer nicht initialisieren: {e}")
|
|
|
60 |
|
61 |
for book_num in BOOK_RANGE:
|
62 |
if args.process_verses and verses_processed >= args.process_verses: break
|
63 |
+
|
64 |
filepath = f"texts/torah/{book_num:02}.json"
|
65 |
try:
|
66 |
with open(filepath, 'r', encoding='utf-8') as file:
|
67 |
data = json.load(file)
|
68 |
for chap_idx, chapter in enumerate(data.get("text", []), start=1):
|
69 |
if args.process_verses and verses_processed >= args.process_verses: break
|
70 |
+
|
71 |
for verse_idx, verse_text in enumerate(chapter, start=1):
|
72 |
if args.process_verses and verses_processed >= args.process_verses: break
|
73 |
verses_processed += 1
|
|
|
75 |
verse_sum = calculate_gematria(verse_text)
|
76 |
if verse_sum <= 1: continue
|
77 |
|
|
|
78 |
power_result = get_power_result(verse_sum, query_value)
|
79 |
+
|
80 |
header_printed = False
|
81 |
|
82 |
+
def print_matches(matches, title, calculation_str):
|
83 |
+
nonlocal header_printed, resonance_count
|
84 |
+
if not matches: return
|
85 |
+
|
86 |
+
if not header_printed:
|
87 |
+
resonance_count += 1
|
88 |
+
verse_ref = f"B{book_num:02d}, K{chap_idx}, V{verse_idx}"
|
89 |
+
print(f"\n--- Resonanz #{resonance_count} in [{verse_ref}] (G_sum:{verse_sum}) ---")
|
90 |
+
print(f"Originalvers: {verse_text.strip()}")
|
91 |
+
print(f" [INFO] Potenzergebnis des Queries: {power_result}")
|
92 |
+
header_printed = True
|
93 |
+
|
94 |
+
matches.sort(key=lambda p: (p.get('freq', 0) / p.get('words', 99)), reverse=True)
|
95 |
+
matches_to_show = matches[:args.results_per_verse]
|
96 |
+
|
97 |
+
print(f" ↳ {title}: {calculation_str}")
|
98 |
+
|
99 |
+
for match in matches_to_show:
|
100 |
+
translation_str = ""
|
101 |
+
if translator:
|
102 |
+
try: translation_str = translator.translate(match['text'])
|
103 |
+
except Exception: translation_str = "[Übersetzung fehlgeschlagen]"
|
104 |
+
|
105 |
+
score = (match.get('freq', 0) / match.get('words', 99))
|
106 |
+
info = f"(Wörter: {match.get('words', 'N/A')}, Freq: {match.get('freq', 'N/A')}, Score: {score:.2f})"
|
107 |
+
print(f" - {match['text']} {info}")
|
108 |
+
if translation_str:
|
109 |
+
print(f" ↳ Interpretation: \"{translation_str}\"")
|
110 |
+
|
111 |
+
# 1. Die normale, vollständige XOR-Operation
|
112 |
+
normal_target_sum = verse_sum ^ power_result
|
113 |
+
normal_matches = find_all_matching_phrases(normal_target_sum, phrase_dictionary)
|
114 |
+
print_matches(normal_matches, "Gesamt-Resonanz (Tiefe 0)", f"[G_sum:{verse_sum}] ^ {power_result} → [G_ziel:{normal_target_sum}]")
|
115 |
+
|
116 |
+
# 2. Die Bitplane-Analyse
|
117 |
for depth in range(args.xor_depth):
|
118 |
bit_mask = 1 << depth
|
|
|
|
|
119 |
bitplane_value = power_result & bit_mask
|
120 |
+
if bitplane_value == 0: continue
|
|
|
121 |
|
122 |
target_sum = verse_sum ^ bitplane_value
|
123 |
+
bitplane_matches = find_all_matching_phrases(target_sum, phrase_dictionary)
|
124 |
+
print_matches(bitplane_matches, f"Bitplane-Tiefe {depth + 1} (Bit {depth})", f"[G_sum:{verse_sum}] ^ {bitplane_value} → [G_ziel:{target_sum}]")
|
125 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
126 |
except FileNotFoundError: continue
|
127 |
|
128 |
logging.info(f"Analyse abgeschlossen. {resonance_count} Resonanz-Verse in {verses_processed} analysierten Versen gefunden.")
|
|
|
133 |
parser.add_argument("--translate", action="store_true", help="Aktiviert die automatische Übersetzung.")
|
134 |
parser.add_argument("--process-verses", type=int, help="Maximale Anzahl der zu analysierenden Start-Verse.")
|
135 |
parser.add_argument("--results-per-verse", type=int, default=3, help="Maximale Orakel-Antworten pro gefundener Resonanz (Standard: 3).")
|
136 |
+
parser.add_argument("--xor-depth", type=int, default=16, help="Anzahl der *einzelnen* Bit-Ebenen (0-15), die *nach* der Haupt-Resonanz geprüft werden (Standard: 16).")
|
137 |
args = parser.parse_args()
|
138 |
+
main(args)
|