Spaces:
Sleeping
Sleeping
File size: 5,734 Bytes
9be760a 5bb3a98 9be760a 5bb3a98 9be760a |
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 |
import gradio as gr
import json
import re
import sqlite3
import logging
from util import process_json_files
from gematria import calculate_gematria
logging.basicConfig(level=logging.INFO, format='%(message)s')
def flatten_text(text):
"""Hilfsfunktion, um verschachtelte Listen zu flachen Listen zu machen."""
if isinstance(text, list):
return " ".join(flatten_text(item) if isinstance(item, list) else item for item in text)
return text
def initialize_database():
conn = sqlite3.connect('gematria.db')
c = conn.cursor()
c.execute('''
CREATE TABLE IF NOT EXISTS results (
gematria_sum INTEGER,
words TEXT,
book INTEGER,
title TEXT,
chapter INTEGER,
verse INTEGER
)
''')
conn.commit()
conn.close()
def insert_phrase_to_db(c, gematria_sum, phrase_candidate, book_id, title, chapter_id, verse_id):
logging.info(f"Inserting: {gematria_sum}, {phrase_candidate}, {book_id}, {title}, {chapter_id + 1}, {verse_id + 1}")
c.execute('''
INSERT INTO results (gematria_sum, words, book, title, chapter, verse)
VALUES (?, ?, ?, ?, ?, ?)
''', (gematria_sum, phrase_candidate, book_id, title, chapter_id + 1, verse_id + 1))
def populate_database(tanach_texts, max_phrase_length=1):
conn = sqlite3.connect('gematria.db')
c = conn.cursor()
for book_id, text in enumerate(tanach_texts):
if not isinstance(text.get('text'), list):
continue
title = text.get('title', 'Unknown')
chapters = text['text']
for chapter_id, chapter in enumerate(chapters):
if not isinstance(chapter, list):
continue
chapter_text = ' '.join([flatten_text(verse) for verse in chapter])
chapter_text = re.sub(r"[^\u05D0-\u05EA ]+", "", chapter_text)
chapter_text = re.sub(r" +", " ", chapter_text)
words = chapter_text.split()
max_length = min(max_phrase_length, len(words))
for length in range(1, max_length + 1):
for start in range(len(words) - length + 1):
phrase_candidate = " ".join(words[start:start + length])
gematria_sum = calculate_gematria(phrase_candidate.replace(" ", ""))
insert_phrase_to_db(c, gematria_sum, phrase_candidate, book_id, title, chapter_id, start + 1)
conn.commit()
conn.close()
def search_gematria_in_db(gematria_sum):
conn = sqlite3.connect('gematria.db')
c = conn.cursor()
c.execute('''
SELECT words, book, title, chapter, verse FROM results WHERE gematria_sum = ?
''', (gematria_sum,))
results = c.fetchall()
conn.close()
return results
def db(tanach_texts, max_phrase_length=1):
initialize_database()
populate_database(tanach_texts, max_phrase_length)
logging.info("Datenbank erfolgreich erstellt und gefüllt.")
def gematria_search_interface(phrase):
debug_output = []
def debug_callback(message):
debug_output.append(message)
logging.info(message)
if not phrase.strip():
return "Bitte geben Sie eine Phrase ein.", "\n".join(debug_output)
phrase_gematria = calculate_gematria(phrase.replace(" ", ""))
debug_callback(f"Debug: Gematria der Suchphrase '{phrase}' ist {phrase_gematria}")
matching_phrases = search_gematria_in_db(phrase_gematria)
if not matching_phrases:
return "Keine passenden Phrasen gefunden.", "\n".join(debug_output)
result = "Passende Phrasen:\n"
for match in matching_phrases:
result += f"Buch: {match[1]} ({match[2]})\nKapitel: {match[3]}, Vers: {match[4]}\nPhrase: {match[0]}\n\n"
return result, "\n".join(debug_output)
def run_test():
debug_output = []
test_phrase = "אבגדהוזחטיכלמנסעפצקרשת"
expected_gematria = 1495
def debug_callback(message):
debug_output.append(message)
logging.info(message)
# Lade die Test-JSON-Inhalte für 00.json
test_texts_00 = process_json_files(0, 0)
db(test_texts_00, max_phrase_length=22) # Populate the database with 1-word phrases
matching_phrases_00 = search_gematria_in_db(expected_gematria)
assert matching_phrases_00, "Keine passenden Phrasen gefunden in 00.json."
assert matching_phrases_00[0][0].replace(" ", "") == test_phrase, f"Gefundene Phrase stimmt nicht überein: {matching_phrases_00[0][0]}"
print("Test erfolgreich: Die Phrase wurde korrekt gefunden und die Gematria stimmt überein in 00.json.")
# Lade die Test-JSON-Inhalte für 01.json
test_texts_01 = process_json_files(1, 1)
db(test_texts_01, max_phrase_length=2) # Populate the database with 1-word phrases
search_phrase_01 = "אתקלך שמעתי"
expected_gematria_01 = calculate_gematria(search_phrase_01.replace(" ", ""))
matching_phrases_01 = search_gematria_in_db(expected_gematria_01)
assert matching_phrases_01, "Keine passenden Phrasen gefunden in 01.json."
assert matching_phrases_01[0][0].replace(" ", "") == search_phrase_01.replace(" ", ""), f"Gefundene Phrase stimmt nicht überein: {matching_phrases_01[0][0]}"
print("Test erfolgreich: Die Phrase wurde korrekt gefunden und die Gematria stimmt überein in 01.json.")
print("\n".join(debug_output))
iface = gr.Interface(
fn=gematria_search_interface,
inputs="text",
outputs=["text", "text"],
title="Gematria-Suche im Tanach",
description="Suche nach Phrasen im Tanach, die denselben Gematria-Wert haben wie die eingegebene Phrase.",
live=True # Aktiviert das Live-Update
)
if __name__ == "__main__":
run_test() # Test ausführen
iface.launch()
|