Spaces:
Sleeping
Sleeping
File size: 4,386 Bytes
3045238 99b3ef5 3045238 a676448 3045238 e4ee4df 3045238 75d4ca3 3045238 8992d21 420ea26 75d4ca3 420ea26 3045238 75d4ca3 7a778e3 75d4ca3 7a778e3 75d4ca3 8992d21 75d4ca3 8992d21 75d4ca3 8992d21 420ea26 e4ee4df 420ea26 7a778e3 8992d21 420ea26 8992d21 e4ee4df 420ea26 e4ee4df 420ea26 3045238 420ea26 3045238 420ea26 75d4ca3 e4ee4df 420ea26 e4ee4df 8992d21 3045238 e4ee4df 8992d21 e4ee4df 8992d21 3045238 8992d21 7a778e3 75d4ca3 7a778e3 1b969ef 420ea26 3045238 8992d21 420ea26 1b969ef 3045238 a676448 |
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 |
import logging
logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.INFO)
import gradio as gr
from gradio_calendar import Calendar
from gematria import calculate_gematria, strip_diacritics
from datetime import datetime, timedelta
import json
import inflect
# --- Hilfsfunktionen ---
def calculate_gematria_sum(text):
"""Berechnet die Gematria-Summe eines gegebenen Textes."""
if text:
text_gematria = calculate_gematria(strip_diacritics(text))
return text_gematria
else:
return None
# Custom function to convert number to ordinal words
def number_to_ordinal_word(number):
ordinal_dict = {
1: "first", 2: "second", 3: "third", 4: "fourth", 5: "fifth",
6: "sixth", 7: "seventh", 8: "eighth", 9: "ninth", 10: "tenth",
11: "eleventh", 12: "twelfth", 13: "thirteenth", 14: "fourteenth",
15: "fifteenth", 16: "sixteenth", 17: "seventeenth", 18: "eighteenth",
19: "nineteenth", 20: "twentieth", 21: "twentyfirst", 22: "twentysecond",
23: "twentythird", 24: "twentyfourth", 25: "twentyfifth",
26: "twentysixth", 27: "twentyseventh", 28: "twentyeighth",
29: "twentyninth", 30: "thirtieth", 31: "thirtyfirst"
}
return ordinal_dict.get(number, "")
def date_to_words(date_string):
"""Konvertiert ein Datum im Format YYYY-MM-DD in die englische Schreibweise."""
inf_engine = inflect.engine()
date_obj = datetime.strptime(date_string, "%Y-%m-%d")
year = date_obj.year
if 1900 <= year <= 1999:
year_words = f"{inf_engine.number_to_words(year // 100, andword='') } hundred"
if year % 100 != 0:
year_words += f" {inf_engine.number_to_words(year % 100, andword='')}"
else:
year_words = inf_engine.number_to_words(year, andword='')
year_formatted = year_words.replace(',', '')
month = date_obj.strftime("%B")
day = date_obj.day
day_ordinal = number_to_ordinal_word(day)
output_text = f"{day_ordinal} {month} {year_formatted}"
return output_text
def perform_gematria_calculation_for_date_range(start_date, end_date):
"""Führt die Gematria-Berechnung für einen Datumsbereich durch."""
logger.info(f"Startdatum: {start_date}, Enddatum: {end_date}")
results = {}
delta = timedelta(days=1)
current_date = start_date
while current_date <= end_date:
# Datum in String umwandeln
date_string = current_date.strftime("%Y-%m-%d")
date_words = date_to_words(date_string)
logger.info(f"Datum: {current_date}, Tagesname: {date_words}")
gematria_sum = calculate_gematria_sum(date_words)
logger.info(f"Gematria-Summe: {gematria_sum}")
if gematria_sum not in results:
results[gematria_sum] = []
results[gematria_sum].append({
"date": current_date.strftime('%Y-%m-%d'),
"date_words": date_words
})
current_date += delta
return results
def generate_json_output(results, start_date, end_date):
"""Generiert die JSON-Ausgabe mit dem Datumsbereich und den Ergebnissen."""
result = {
"DateRange": {
"StartDate": start_date.strftime("%Y-%m-%d"),
"EndDate": end_date.strftime("%Y-%m-%d")
},
"Results": results
}
return json.dumps(result, indent=4, ensure_ascii=False)
# --- Hauptanwendung mit Gradio ---
with gr.Blocks() as app:
with gr.Row():
start_date = Calendar(type="datetime", label="Startdatum")
end_date = Calendar(type="datetime", label="Enddatum")
calculate_btn = gr.Button("Gematria für Zeitraum berechnen")
json_output = gr.Textbox(label="JSON-Ausgabe")
# --- Event-Handler ---
def perform_calculation(start_date, end_date):
"""Führt die Berechnung aus und generiert die JSON-Ausgabe."""
logger.info(f"perform_calculation aufgerufen mit: start_date={start_date}, end_date={end_date}")
results = perform_gematria_calculation_for_date_range(start_date, end_date)
json_result = generate_json_output(results, start_date, end_date)
return json_result
# --- Event-Trigger ---
calculate_btn.click(
perform_calculation,
inputs=[start_date, end_date],
outputs=[json_output],
api_name="calculate_gematria"
)
if __name__ == "__main__":
app.launch(share=False)
|