-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgui.py
More file actions
97 lines (76 loc) · 3.55 KB
/
gui.py
File metadata and controls
97 lines (76 loc) · 3.55 KB
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
import tkinter as tk
from tkinter import filedialog, messagebox, ttk
from pdf_reader import PDFReader
from database import Database
#from huggingface_api import HuggingFaceAPI
from gemini_api import GeminiAPI
from prompts import PROMPT_ARZT, PROMPT_PATIENT
class GUI:
def __init__(self):
self.api = GeminiAPI()
self.database = Database()
self.prompt_patient = PROMPT_PATIENT
self.prompt_arzt = PROMPT_ARZT
self.selected_prompt = None
self.setup_gui()
def setup_gui(self):
self.root = tk.Tk()
self.root.title("Arztbrief-Analyse")
greeting_label = tk.Label(
self.root,
text="Willkommen zur Arztbrief-Analyse! Bitte wählen Sie Ihre Rolle aus und laden Sie Ihren Arztbrief hoch.",
font=("Arial", 16),
wraplength=800,
justify="center"
)
greeting_label.pack(pady=20)
self.role_var = tk.StringVar(value="Wählen Sie eine Rolle")
role_dropdown = ttk.Combobox(
self.root,
textvariable=self.role_var,
values=["Arzt", "Patient"],
state="readonly",
font=("Arial", 14),
width=20
)
role_dropdown.pack(pady=10)
self.btn_upload = tk.Button(self.root, text="Arztbrief hochladen", command=self.upload_arztbrief, font=("Arial", 14))
self.btn_upload.pack()
self.text_result = tk.Text(self.root, wrap="word", font=("Arial", 14))
self.text_result.pack(expand=True, fill="both", padx=20, pady=20)
self.text_result.tag_configure("header", font=("Arial", 16, "bold"))
self.root.mainloop()
def upload_arztbrief(self):
role = self.role_var.get()
if role not in ["Arzt", "Patient"]:
messagebox.showwarning("Fehler", "Bitte wählen Sie eine Rolle aus (Arzt oder Patient).")
return
# Set the corresponding prompt
print(f"Rolle: {role}")
self.selected_prompt = self.prompt_arzt if role == "Arzt" else self.prompt_patient
# Ask for a file
file_path = filedialog.askopenfilename(filetypes=[("PDF Dateien", "*.pdf")])
# Display a loading message in the output box
self.text_result.delete("1.0", tk.END)
self.text_result.insert(tk.END, "Der Arztbrief wird analysiert. Bitte warten Sie...\n")
self.root.update_idletasks()
if file_path:
self.process_file(file_path)
def process_file(self, file_path):
text = PDFReader.read_pdf(file_path)
try:
analysis = self.api.analyze_text(text, prompt=self.selected_prompt)
self.text_result.delete("1.0", tk.END)
self.text_result.insert(tk.END, "=== Analyse ===\n", "header")
self.text_result.insert(tk.END, analysis)
# Fetch all cases from the database
all_cases = self.database.get_all_cases()
cases_text = "\n".join([f"ID: {case[0]}, Diagnose: {case[1]}, Text: {case[2]}, Therapie: {case[3]}, Maßnahmen: {case[4]}" for case in all_cases])
# Search for similar cases using Gemini API
similar_cases = self.api.search_similar_cases(text, cases_text)
print(f"Similar Cases: {similar_cases}") # Print the similar cases
if similar_cases:
self.text_result.insert(tk.END, "\n\n--- Ähnliche Fälle ---\n", "header")
self.text_result.insert(tk.END, similar_cases)
except Exception as e:
messagebox.showerror("Fehler", f"Analyse fehlgeschlagen: {str(e)}")