Spaces:
Sleeping
Sleeping
Commit
·
ddbe479
1
Parent(s):
d300238
add search interface
Browse files
app.py
CHANGED
|
@@ -359,6 +359,82 @@ def update_rounds_dropdown():
|
|
| 359 |
new_choices = extract_rounds_combinations()
|
| 360 |
return new_choices
|
| 361 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 362 |
# --- Main Gradio App ---
|
| 363 |
with gr.Blocks() as app:
|
| 364 |
with gr.Tab("ELS Search"):
|
|
@@ -586,6 +662,174 @@ with gr.Blocks() as app:
|
|
| 586 |
else:
|
| 587 |
return {"visible": False, "__type__": "update"}, {"visible": True, "__type__": "update"}
|
| 588 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 589 |
# --- Event Handlers ---
|
| 590 |
|
| 591 |
search_type.change(
|
|
|
|
| 359 |
new_choices = extract_rounds_combinations()
|
| 360 |
return new_choices
|
| 361 |
|
| 362 |
+
def perform_gematria_calculation_for_date_range(start_date, end_date):
|
| 363 |
+
logger.debug(f"Calculating date gematria for range: {start_date} - {end_date}")
|
| 364 |
+
results = {}
|
| 365 |
+
delta = timedelta(days=1)
|
| 366 |
+
current_date = start_date
|
| 367 |
+
|
| 368 |
+
while current_date <= end_date:
|
| 369 |
+
date_string = current_date.strftime("%Y-%m-%d")
|
| 370 |
+
date_words = date_to_words(date_string)
|
| 371 |
+
date_gematria = calculate_gematria_sum(date_words, "") # Angepasst, um der Funktion calculate_gematria_sum zu entsprechen
|
| 372 |
+
|
| 373 |
+
results[date_string] = {
|
| 374 |
+
"date_words": date_words,
|
| 375 |
+
"date_gematria": date_gematria,
|
| 376 |
+
}
|
| 377 |
+
current_date += delta
|
| 378 |
+
logger.debug(f"Finished calculating date gematria.")
|
| 379 |
+
return results
|
| 380 |
+
|
| 381 |
+
def find_matching_dates(date_gematrias, names, search_journal_sum):
|
| 382 |
+
logger.debug(f"Searching for matches with journal sum: {search_journal_sum}")
|
| 383 |
+
matching_dates = {}
|
| 384 |
+
|
| 385 |
+
for name in names:
|
| 386 |
+
name_gematria = calculate_gematria_sum(name, "") # Angepasst, um der Funktion calculate_gematria_sum zu entsprechen
|
| 387 |
+
target_date_gematria = search_journal_sum - name_gematria if name_gematria is not None else None
|
| 388 |
+
logger.debug(f"Name: {name}, Gematria: {name_gematria}, Target Date Gematria: {target_date_gematria}")
|
| 389 |
+
|
| 390 |
+
if target_date_gematria is not None:
|
| 391 |
+
for date_str, date_data in date_gematrias.items():
|
| 392 |
+
if date_data["date_gematria"] == target_date_gematria:
|
| 393 |
+
if name not in matching_dates:
|
| 394 |
+
matching_dates[name] = []
|
| 395 |
+
matching_dates[name].append(date_str)
|
| 396 |
+
logger.debug(f"Matches for {name}: {matching_dates.get(name, [])}")
|
| 397 |
+
return matching_dates
|
| 398 |
+
|
| 399 |
+
def find_shared_journal_sums(date_gematrias, names):
|
| 400 |
+
"""Finds shared journal sums and formats output with names and dates together."""
|
| 401 |
+
logger.debug("Calculating shared journal sums...")
|
| 402 |
+
shared_sums = {}
|
| 403 |
+
name_gematrias = {name: calculate_gematria_sum(name, "") for name in names}
|
| 404 |
+
|
| 405 |
+
for date_str, date_data in date_gematrias.items():
|
| 406 |
+
date_gematria = date_data["date_gematria"]
|
| 407 |
+
for name, name_gematria in name_gematrias.items():
|
| 408 |
+
journal_sum = date_gematria + name_gematria
|
| 409 |
+
journal_sum_str = str(journal_sum) # Konvertiere den Schlüssel (journal_sum) in einen String
|
| 410 |
+
if journal_sum_str not in shared_sums:
|
| 411 |
+
shared_sums[journal_sum_str] = {}
|
| 412 |
+
if name not in shared_sums[journal_sum_str]:
|
| 413 |
+
shared_sums[journal_sum_str][name] = []
|
| 414 |
+
shared_sums[journal_sum_str][name].append(date_str)
|
| 415 |
+
|
| 416 |
+
# Filter out sums not shared by at least two names and format output
|
| 417 |
+
result = {}
|
| 418 |
+
for journal_sum_str, data in shared_sums.items():
|
| 419 |
+
if len(data) >= 2:
|
| 420 |
+
result[journal_sum_str] = {}
|
| 421 |
+
for name, dates in data.items():
|
| 422 |
+
result[journal_sum_str][name] = dates
|
| 423 |
+
|
| 424 |
+
logger.debug(f"Shared Journal Sums: {result}")
|
| 425 |
+
return result
|
| 426 |
+
|
| 427 |
+
def calculate_and_find_dates(start_date, end_date, names_input, search_journal_sum, find_shared=False):
|
| 428 |
+
names = [n.strip() for n in names_input.split("\n") if n.strip()]
|
| 429 |
+
date_gematrias = perform_gematria_calculation_for_date_range(start_date, end_date)
|
| 430 |
+
if find_shared:
|
| 431 |
+
shared_sums = find_shared_journal_sums(date_gematrias, names)
|
| 432 |
+
return None, shared_sums
|
| 433 |
+
else:
|
| 434 |
+
matching_dates = find_matching_dates(date_gematrias, names, int(search_journal_sum))
|
| 435 |
+
return matching_dates, None
|
| 436 |
+
|
| 437 |
+
|
| 438 |
# --- Main Gradio App ---
|
| 439 |
with gr.Blocks() as app:
|
| 440 |
with gr.Tab("ELS Search"):
|
|
|
|
| 662 |
else:
|
| 663 |
return {"visible": False, "__type__": "update"}, {"visible": True, "__type__": "update"}
|
| 664 |
|
| 665 |
+
with gr.Tab("Date Range Journal Sum Search"):
|
| 666 |
+
with gr.Row():
|
| 667 |
+
start_date_jr = Calendar(type="datetime", label="Start Date")
|
| 668 |
+
end_date_jr = Calendar(type="datetime", label="End Date")
|
| 669 |
+
with gr.Row():
|
| 670 |
+
names_input_jr = gr.Textbox(label="Names (one per line)", lines=5)
|
| 671 |
+
search_sum_jr = gr.Number(label="Search Journal Sum", precision=0)
|
| 672 |
+
|
| 673 |
+
with gr.Row():
|
| 674 |
+
calculate_btn_jr = gr.Button("Search Journal Sum")
|
| 675 |
+
shared_sums_btn_jr = gr.Button("Find Shared Journal Sums")
|
| 676 |
+
|
| 677 |
+
matching_dates_output_jr = gr.JSON(label="Matching Dates")
|
| 678 |
+
shared_sums_output_jr = gr.JSON(label="Shared Journal Sums")
|
| 679 |
+
|
| 680 |
+
calculate_btn_jr.click(
|
| 681 |
+
lambda start_date, end_date, names_input, search_sum: calculate_and_find_dates(
|
| 682 |
+
start_date, end_date, names_input, search_sum, find_shared=False),
|
| 683 |
+
inputs=[start_date_jr, end_date_jr, names_input_jr, search_sum_jr],
|
| 684 |
+
outputs=[matching_dates_output_jr, shared_sums_output_jr]
|
| 685 |
+
)
|
| 686 |
+
|
| 687 |
+
shared_sums_btn_jr.click(
|
| 688 |
+
lambda start_date, end_date, names_input: calculate_and_find_dates(
|
| 689 |
+
start_date, end_date, names_input, 0, find_shared=True),
|
| 690 |
+
inputs=[start_date_jr, end_date_jr, names_input_jr],
|
| 691 |
+
outputs=[matching_dates_output_jr, shared_sums_output_jr]
|
| 692 |
+
)
|
| 693 |
+
|
| 694 |
+
|
| 695 |
+
with gr.Tab("Date Range ELS Search"):
|
| 696 |
+
with gr.Row():
|
| 697 |
+
start_date_els = Calendar(type="datetime", label="Start Date")
|
| 698 |
+
end_date_els = Calendar(type="datetime", label="End Date")
|
| 699 |
+
with gr.Row():
|
| 700 |
+
names_input_els = gr.Textbox(label="Names (one per line)", lines=5)
|
| 701 |
+
with gr.Row():
|
| 702 |
+
search_type_els = gr.Radio(
|
| 703 |
+
label="Search by",
|
| 704 |
+
choices=["Text in result_text", "Gematria Sum in results"],
|
| 705 |
+
value="Text in result_text"
|
| 706 |
+
)
|
| 707 |
+
with gr.Row():
|
| 708 |
+
search_mode_els = gr.Radio(
|
| 709 |
+
label="Search Mode",
|
| 710 |
+
choices=["Exact Search", "Contains Word"],
|
| 711 |
+
value="Contains Word"
|
| 712 |
+
)
|
| 713 |
+
with gr.Row():
|
| 714 |
+
search_term_els = gr.Textbox(label="Search Term", visible=True)
|
| 715 |
+
gematria_sum_search_els = gr.Number(label="Gematria Sum", visible=False)
|
| 716 |
+
with gr.Row():
|
| 717 |
+
include_torah_chk_els = gr.Checkbox(label="Include Torah", value=True)
|
| 718 |
+
include_bible_chk_els = gr.Checkbox(label="Include Bible", value=True)
|
| 719 |
+
include_quran_chk_els = gr.Checkbox(label="Include Quran", value=True)
|
| 720 |
+
include_hindu_chk_els = gr.Checkbox(label="Include Rigveda", value=False)
|
| 721 |
+
include_tripitaka_chk_els = gr.Checkbox(label="Include Tripitaka", value=False)
|
| 722 |
+
|
| 723 |
+
with gr.Row():
|
| 724 |
+
perform_search_btn_els = gr.Button("Perform Search")
|
| 725 |
+
|
| 726 |
+
filtered_results_output_els = gr.JSON(label="Filtered Results")
|
| 727 |
+
|
| 728 |
+
# Funktionen zur Aktualisierung der Sichtbarkeit der Sucheingabefelder
|
| 729 |
+
def update_search_components_els(search_type):
|
| 730 |
+
if search_type == "Text in result_text":
|
| 731 |
+
return gr.Textbox(visible=True), gr.Number(visible=False)
|
| 732 |
+
else:
|
| 733 |
+
return gr.Textbox(visible=False), gr.Number(visible=True)
|
| 734 |
+
|
| 735 |
+
search_type_els.change(
|
| 736 |
+
fn=update_search_components_els,
|
| 737 |
+
inputs=[search_type_els],
|
| 738 |
+
outputs=[search_term_els, gematria_sum_search_els]
|
| 739 |
+
)
|
| 740 |
+
|
| 741 |
+
# Hauptfunktion für den vierten Tab
|
| 742 |
+
def perform_date_range_els_search(start_date, end_date, names_input, search_type, search_term, gematria_sum_search, search_mode, include_torah, include_bible, include_quran, include_hindu, include_tripitaka):
|
| 743 |
+
names = [n.strip() for n in names_input.split("\n") if n.strip()]
|
| 744 |
+
date_gematrias = perform_gematria_calculation_for_date_range(start_date, end_date)
|
| 745 |
+
|
| 746 |
+
# Zwischenergebnisse mit Datum, Namen und Gematria-Summe speichern
|
| 747 |
+
intermediate_results = []
|
| 748 |
+
for date_str, date_data in date_gematrias.items():
|
| 749 |
+
for name in names:
|
| 750 |
+
name_gematria = calculate_gematria_sum(name, "")
|
| 751 |
+
combined_gematria_sum = date_data["date_gematria"] + name_gematria
|
| 752 |
+
intermediate_results.append(
|
| 753 |
+
{"date": date_str, "name": name, "gematria_sum": combined_gematria_sum}
|
| 754 |
+
)
|
| 755 |
+
|
| 756 |
+
# Ergebnisse nach Datum sortieren
|
| 757 |
+
intermediate_results.sort(key=lambda x: x["date"])
|
| 758 |
+
|
| 759 |
+
all_results = []
|
| 760 |
+
for intermediate_result in intermediate_results:
|
| 761 |
+
date_str = intermediate_result["date"]
|
| 762 |
+
name = intermediate_result["name"]
|
| 763 |
+
gematria_sum = intermediate_result["gematria_sum"]
|
| 764 |
+
|
| 765 |
+
# Hier die ELS-Suche für jede Gematria-Summe durchführen
|
| 766 |
+
els_results = perform_els_search(
|
| 767 |
+
step=gematria_sum,
|
| 768 |
+
rounds_combination="1,-1",
|
| 769 |
+
tlang="english",
|
| 770 |
+
strip_spaces=True,
|
| 771 |
+
strip_in_braces=True,
|
| 772 |
+
strip_diacritics_chk=True,
|
| 773 |
+
include_torah=include_torah,
|
| 774 |
+
include_bible=include_bible,
|
| 775 |
+
include_quran=include_quran,
|
| 776 |
+
include_hindu=include_hindu,
|
| 777 |
+
include_tripitaka=include_tripitaka
|
| 778 |
+
)
|
| 779 |
+
|
| 780 |
+
# Die Ergebnisse für jedes Buch und jede Gematria-Summe verarbeiten
|
| 781 |
+
for book_name, book_results in els_results.items():
|
| 782 |
+
if book_results:
|
| 783 |
+
for result in book_results:
|
| 784 |
+
try:
|
| 785 |
+
result_text = result['result_text']
|
| 786 |
+
result_sum = result['result_sum']
|
| 787 |
+
|
| 788 |
+
# Filtern der Ergebnisse
|
| 789 |
+
if search_type == "Text in result_text":
|
| 790 |
+
if search_mode == "Exact Search" and search_term == result_text:
|
| 791 |
+
all_results.append(
|
| 792 |
+
{
|
| 793 |
+
"date": date_str,
|
| 794 |
+
"name": name,
|
| 795 |
+
"gematria_sum": gematria_sum,
|
| 796 |
+
"book": book_name,
|
| 797 |
+
"result": result
|
| 798 |
+
}
|
| 799 |
+
)
|
| 800 |
+
elif search_mode == "Contains Word" and search_term in result_text:
|
| 801 |
+
all_results.append(
|
| 802 |
+
{
|
| 803 |
+
"date": date_str,
|
| 804 |
+
"name": name,
|
| 805 |
+
"gematria_sum": gematria_sum,
|
| 806 |
+
"book": book_name,
|
| 807 |
+
"result": result
|
| 808 |
+
}
|
| 809 |
+
)
|
| 810 |
+
elif search_type == "Gematria Sum in results":
|
| 811 |
+
if result_sum == gematria_sum_search:
|
| 812 |
+
all_results.append(
|
| 813 |
+
{
|
| 814 |
+
"date": date_str,
|
| 815 |
+
"name": name,
|
| 816 |
+
"gematria_sum": gematria_sum,
|
| 817 |
+
"book": book_name,
|
| 818 |
+
"result": result
|
| 819 |
+
}
|
| 820 |
+
)
|
| 821 |
+
except KeyError as e:
|
| 822 |
+
logger.error(f"KeyError - Key '{e.args[0]}' not found in result. Skipping this result.")
|
| 823 |
+
continue
|
| 824 |
+
|
| 825 |
+
return all_results
|
| 826 |
+
|
| 827 |
+
perform_search_btn_els.click(
|
| 828 |
+
perform_date_range_els_search,
|
| 829 |
+
inputs=[start_date_els, end_date_els, names_input_els, search_type_els, search_term_els, gematria_sum_search_els, search_mode_els, include_torah_chk_els, include_bible_chk_els, include_quran_chk_els, include_hindu_chk_els, include_tripitaka_chk_els],
|
| 830 |
+
outputs=[filtered_results_output_els]
|
| 831 |
+
)
|
| 832 |
+
|
| 833 |
# --- Event Handlers ---
|
| 834 |
|
| 835 |
search_type.change(
|