neuralworm commited on
Commit
a8e06c6
·
verified ·
1 Parent(s): 70ac3ef

Update analyze_verses_universal.py

Browse files
Files changed (1) hide show
  1. 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 # 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,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
- # Iteriere durch die Bit-Ebenen von 0 bis zur angegebenen Tiefe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
- all_matches = find_all_matching_phrases(target_sum, phrase_dictionary)
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="Maximale zu prüfende Bitplane-Tiefe (z.B. 16 für 16-Bit Zahlen, Standard: 16).")
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)