Spaces:
Sleeping
Sleeping
import json | |
import logging | |
import argparse | |
import sys | |
import os | |
import re | |
import math | |
import csv # NEU: Für den Export der Ergebnisse | |
from gematria import calculate_gematria | |
# --- Konfiguration --- | |
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') | |
BOOK_RANGE = range(1, 40) | |
# --- Kernfunktion (direkt aus Ihrem Beispiel) --- | |
def xor_with_highest_power(total_sum, query_value): | |
""" | |
Berechnet XOR mit der höchsten Potenz des Anfrage-Wertes. | |
Gibt (Exponent, Potenz, XOR-Ergebnis) zurück. | |
""" | |
if total_sum <= 0 or query_value <= 1: | |
return None, None, None # Fehlerfall elegant behandeln | |
if query_value > total_sum: | |
exponent = 0 | |
power = 1 | |
else: | |
try: | |
# floor(log_base(value)) | |
exponent = int(math.floor(math.log(total_sum) / math.log(query_value))) | |
power = query_value ** exponent | |
except ValueError: # math domain error, z.B. bei log(1) | |
return None, None, None | |
xor_result = total_sum ^ power | |
return exponent, power, xor_result | |
# --- Hauptprogramm --- | |
def main(args): | |
# 1. Berechne Gematria-Wert der Anfrage | |
query_value = calculate_gematria(args.query) | |
if query_value <= 1: | |
sys.exit(f"Anfrage '{args.query}' hat einen ungültigen Gematria-Wert ({query_value}). Wert muss > 1 sein.") | |
logging.info(f"Starte Vers-Matrix-Analyse für '{args.query}' (Gematria: {query_value})...") | |
all_results = [] | |
# 2. Iteriere durch jeden Vers des Tanach | |
for book_num in BOOK_RANGE: | |
filepath = f"texts/torah/{book_num:02}.json" | |
try: | |
with open(filepath, 'r', encoding='utf-8') as file: | |
data = json.load(file) | |
book_title = data.get("title", f"Buch {book_num:02}") | |
logging.info(f"Verarbeite {book_title}...") | |
# Iteriere durch Kapitel und Verse | |
for chap_idx, chapter in enumerate(data.get("text", []), start=1): | |
for verse_idx, verse_text in enumerate(chapter, start=1): | |
# Berechne Gematria-Summe des Verses | |
verse_sum = calculate_gematria(verse_text) | |
if verse_sum <= 1: continue | |
# Führe die XOR-Operation durch | |
k, power, xor_val = xor_with_highest_power(verse_sum, query_value) | |
if xor_val is None: continue | |
# Sammle die Ergebnisse | |
all_results.append({ | |
"Book": book_num, | |
"Chapter": chap_idx, | |
"Verse": verse_idx, | |
"Query": args.query, | |
"Query Value": query_value, | |
"Verse Gematria": verse_sum, | |
"Exponent k": k, | |
"Power (Query^k)": power, | |
"XOR Result": xor_val, | |
"Verse Text": verse_text.strip() | |
}) | |
except FileNotFoundError: | |
logging.warning(f"Datei {filepath} nicht gefunden, wird übersprungen.") | |
continue | |
# 3. Gib die Ergebnisse aus und speichere sie | |
if not all_results: | |
print("Keine Ergebnisse zum Anzeigen oder Speichern.") | |
return | |
# Ausgabe auf der Konsole (begrenzt, um sie nicht zu überfluten) | |
print("\n" + "="*15 + f" RESONANZ-MATRIX FÜR '{args.query}' (erste {args.limit} Ergebnisse) " + "="*15) | |
for r in all_results[:args.limit]: | |
print(f"B{r['Book']:02d} C{r['Chapter']} V{r['Verse']} | G_sum={r['Verse Gematria']:<5} | k={r['Exponent k']:<2} | P={r['Power (Query^k)']:<8} | XOR={r['XOR Result']}") | |
# Speichere die vollständigen Ergebnisse in einer CSV-Datei | |
output_filename = f"analysis_{args.query.replace(' ', '_')}.csv" | |
logging.info(f"Speichere alle {len(all_results)} Ergebnisse in '{output_filename}'...") | |
with open(output_filename, 'w', newline='', encoding='utf-8') as csvfile: | |
fieldnames = all_results[0].keys() | |
writer = csv.DictWriter(csvfile, fieldnames=fieldnames) | |
writer.writeheader() | |
writer.writerows(all_results) | |
logging.info("Analyse abgeschlossen. Vollständige Daten wurden in der CSV-Datei gespeichert.") | |
if __name__ == "__main__": | |
parser = argparse.ArgumentParser(description="Tanakh Verse-by-Verse Resonance Matrix Analyzer.") | |
parser.add_argument("query", type=str, help="Die Abfragephrase (z.B. 'יהוה').") | |
parser.add_argument("--limit", type=int, default=50, help="Anzahl der auf der Konsole anzuzeigenden Ergebnisse.") | |
args = parser.parse_args() | |
main(args) | |