File size: 5,481 Bytes
68b69da
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
import navigium as navigium
import os
import extract_from_word as ex
import time


def main(input, filename="Vokabelliste.xlsx", export2by=False, anzahl_threads=20, progress=gr.Progress()):
    start_time = time.time()
    progress(0, desc="Starting...")
    if type(input) is str:
        text = input
        text = text.split("\n")
        words = navigium.split_into_words(text)
    elif type(input) is list:
        words = []
        tmp_names = []
        for file in input:
            if os.path.splitext(file)[1] == ".docx":
                tmp_names.append(os.path.splitext(os.path.basename(file))[0])
                words.extend(ex.extract_highlighted_words(file))
        if filename == "":
            filename = "_UND_".join(tmp_names)
    else:
        return

    progress(0.05, desc="Prepared...")

    progress(0.1, desc="Request to Navigium...")
    output = navigium.threaded_function(words, anzahl_threads=anzahl_threads)
    progress(0.61, desc="Sort and analyse...")
    sorted = navigium.sort_by_wordtype(output)
    vocabulary = navigium.advanced_formating(sorted)
    progress(0.83, desc="Exporting...")
    if filename == "":
        filepath_excel = "Vokabelliste.xlsx"
        filepath_by2 = "Vokabelliste.by2"
    elif filename.endswith(".xlsx"):
        filepath_by2 = f"{os.path.splitext(os.path.basename(filename))[0]}.by2"
    elif not filename.endswith(".xlsx"):
        filepath_excel = f"{filename}.xlsx"
        filepath_by2 = f"{filename}.by2"
    excel = navigium.save2excel(filepath_excel, vocabulary)
    if export2by == True:
        navigium.save2by2(excel, filepath_by2)
        progress(1, desc="Finished...")
        return [filepath_excel, filepath_by2]
    progress(1, desc="Finished...")
    end_time = time.time()
    duration = end_time - start_time
    print(f"Der Code hat {duration:.5f} Sekunden benötigt.")
    return [filepath_excel]

# Erstelle das Gradio Blocks Interface
with gr.Blocks() as demo:
    # Tabs für die Alternative zwischen Texteingabe und Datei-Upload
    gr.Markdown("<h1 style='text-align: center;'>Vokabellisten Generator</h1>")
    gr.Markdown("<p style='text-align: center;'>Einfach aus lateinischen Texten Vokabellisten generieren</p>")
    gr.Markdown("<p style='text-align: center; color: red;'>!!!Achtung!!! Dies ist eine Beta-Version und unterstützt aktuell nur Nomen, Verben und Adjektive</p>")
    with gr.Tabs():
        with gr.TabItem("Texteingabe"):
            gr.Markdown("<p style='text-align: left;'>Gib deinen lateinischen Text ein und lade dir anschließend die generierte Excel-Datei und optional auch die Brainyoo-Datei herunter.</p>")
            with gr.Row():
                with gr.Column():
                    name = gr.Textbox(placeholder="Gib den gewünschten Dateiname hier ein (Default: \"Vokabelliste.xlsx\")...", label="Dateiname(optional):", lines=1, max_lines=1)
                    textbox = gr.Textbox(placeholder="Gib deinen lateinischen Text hier ein...", label="Lateinischer Text:", lines=10, max_lines=10)
                    #box = gr.Checkbox(label="Convert Excel to PDF (kann bis zu 5min länger dauern)", value=False)
                    export2by2 = gr.Checkbox(label="Export nach Brainyoo (als .by2 Datei)", value=False)
                    slider = gr.Slider(minimum=1, maximum=128, value=20, label="Verändere die Anzahl an Threads. (Beeinflusst direkt die Geschwindigkeit)")
                    submit_btn = gr.Button("Absenden")
                with gr.Column():    
                    result_box = gr.Files(label="Download Excel-Datei und ggf. deine Brainyoo-Datei")
                    submit_btn.click(fn=main, inputs=[textbox, name, export2by2, slider], outputs=result_box)
        
        with gr.TabItem("Datei-Upload (.docx)"):
            gr.Markdown("<p style='text-align: left;'>Lade eine Word-Datei hoch und lade dir anschließend die generierte Excel-Datei und optional auch die Brainyoo-Datei herunter.</p>")
            with gr.Row():
                with gr.Column():
                    name = gr.Textbox(placeholder="Gib den gewünschten Dateiname hier ein (Default: Dateiname der Word-Datei)...", label="Dateiname(optional):", lines=1, max_lines=1)
                    docx_file = gr.File(file_count="multiple", label="Lade eine Word-Datei hoch, welche in roter Textfarbe oder mit einem beliebigen Textmarker markierte Wörter enthält")
                    #box = gr.Checkbox(label="Convert Excel to PDF (kann bis zu 5min länger dauern)", value=False)
                    export2by2 = gr.Checkbox(label="Export nach Brainyoo (als .by2 Datei)", value=False)
                    slider = gr.Slider(minimum=1, maximum=128, value=20, label="Verändere die Anzahl an Threads. (Beeinflusst direkt die Geschwindigkeit)")
                    submit_btn = gr.Button("Absenden")
                with gr.Column():    
                    result_box = gr.Files(label="Download Excel-Datei und ggf. deine Brainyoo-Datei")
                    submit_btn.click(fn=main, inputs=[docx_file, name, export2by2, slider], outputs=result_box)
    #gr.Markdown("<hr>")
    gr.Markdown("<p style='text-align: center;'>Programmiert von: Rostbraten</p>")
    link = "https://www.navigium.de/latein-woerterbuch/"
    gr.Markdown(f"<p style='text-align: center;'>Nutzt \"{link}\" als Wörterbuch</p>")

# Starte die Gradio App
demo.launch()