diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..b42097e865c14e2dde215fccdd2e303d6c103b36
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+**/__pycache__/
\ No newline at end of file
diff --git a/.idea/Asyst_code.iml b/.idea/Asyst_code.iml
index c5de4eb4005d5f40bb0f5459cb4e94850bdfa2ff..3d9d0762b49f41c8e1d383398af87a4f9d1995b8 100644
--- a/.idea/Asyst_code.iml
+++ b/.idea/Asyst_code.iml
@@ -2,9 +2,10 @@
 <module type="PYTHON_MODULE" version="4">
   <component name="NewModuleRootManager">
     <content url="file://$MODULE_DIR$">
+      <excludeFolder url="file://$MODULE_DIR$/.venv" />
       <excludeFolder url="file://$MODULE_DIR$/venv" />
     </content>
-    <orderEntry type="jdk" jdkName="Python 3.10 (Asyst_code)" jdkType="Python SDK" />
+    <orderEntry type="jdk" jdkName="Python 3.10 (ASYST)" jdkType="Python SDK" />
     <orderEntry type="sourceFolder" forTests="false" />
   </component>
 </module>
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index aeb483921323486ab6e4a356a05cafb855de0ee1..e91440885d1535ea0f872c88bf2a2851ab35549a 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -3,7 +3,7 @@
   <component name="Black">
     <option name="sdkName" value="Python 3.8" />
   </component>
-  <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10 (Asyst_code)" project-jdk-type="Python SDK" />
+  <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10 (ASYST)" project-jdk-type="Python SDK" />
   <component name="PythonCompatibilityInspectionAdvertiser">
     <option name="version" value="3" />
   </component>
diff --git a/Source/Skript/outputs/predictions.txt b/Source/Skript/outputs/predictions.txt
index 6f43d618f8fbc1be3f94a8aad004af542152714f..c5db57f89cd07456e5050c8e15b550136edd541c 100644
--- a/Source/Skript/outputs/predictions.txt
+++ b/Source/Skript/outputs/predictions.txt
@@ -1,17 +1,17 @@
 question	referenceAnswer	studentAnswer	suggested_grade	observed_grade
 Warum braucht man für XML-Tags Namensräume?	Da jeder Benutzer frei XML-Tags definieren kann, kann es passieren, dass dasselbe Tag in mehreren Dokumenten vorkommt und jeweils eine unterschiedliche Bedeutung hat. Namensräume sorgen dafür, dass diese unterschiedlichen Bedeutungen eindeutig auseinandergehalten werden können, indem die Tags qualifiziert werden. Namensräume verknüpfen Tags mit einer Anwendung:	weil sich die Namen von Tags aus einzelnen XML Dateien überschneiden können.Deshlab qualifizierte Namen das bedeuteet dass die Namen sich auf einen Namenraum beziehen und der Namenraum ist als Attribut an Elemente gebunden.	correct	correct
 Warum möchten Sie bei der Objektserialisierung mit Hilfe von transient bzw. serialPersistentFields[] die Kontrolle darüber haben, welche Felder serialisiert werden?	Wenn das Objekt schützenswerte Information enthält wie z.B. Passwörter, müssen diese bei der Serialisierung ausgeschlossen werden, da sie sonst aus dem serialisierten Objekt problemlos auszulesen sind.  Außerdem gibt es Felder, die nicht serialisierbar sind (z.B. Sockets oder Threads). Diese Felder möchte man auch ausschließen.	Wenn Attribute mit transient markiert werden, dann werden sie bei der Serialisierung übersprungen. serialPersistentFields[] kann man die zu serialisierenden Attribute aufzählen	correct	incorrect
-Warum braucht man für XML-Tags Namensräume?	Da jeder Benutzer frei XML-Tags definieren kann, kann es passieren, dass dasselbe Tag in mehreren Dokumenten vorkommt und jeweils eine unterschiedliche Bedeutung hat. Namensräume sorgen dafür, dass diese unterschiedlichen Bedeutungen eindeutig auseinandergehalten werden können, indem die Tags qualifiziert werden. Namensräume verknüpfen Tags mit einer Anwendung: 	Namensräume verknüft ein XML-Element mit einer Anwendung. Der Gültigkeitsbereich gilt für den Bereich mit dem Präfix versehenen Elemente und Attribute.	correct	correct
+Warum braucht man für XML-Tags Namensräume?	Da jeder Benutzer frei XML-Tags definieren kann, kann es passieren, dass dasselbe Tag in mehreren Dokumenten vorkommt und jeweils eine unterschiedliche Bedeutung hat. Namensräume sorgen dafür, dass diese unterschiedlichen Bedeutungen eindeutig auseinandergehalten werden können, indem die Tags qualifiziert werden. Namensräume verknüpfen Tags mit einer Anwendung: 	Namensräume verknüft ein XML-Element mit einer Anwendung. Der Gültigkeitsbereich gilt für den Bereich mit dem Präfix versehenen Elemente und Attribute.	correct	incorrect
 Sie möchten ein protected-Feld und mehrere unimplementierte Methoden vererben. Benutzen Sie eine Schnittstelle oder eine abstrakte Klasse? Warum?	abstrakte Klasse.  Schnittstellen können nur Konstanten vererben, abstrakte Klassen vererben Felder. alternativ: abstrakte Klassen vererben unimplementierte Methoden	ich würde eine abstrakte Klasse benutzen, weil die Schinttstellen können nur Konstanten haben.	correct	correct
-Warum braucht man bei der Arbeit mit Threads Synchronisation?	Man muss vermeiden, dass verschiedene Threads gleichzeitig auf Daten oder Objekte zugreifen, weil es dadurch zur Zerstörung von Werten und zu inkonsistenten Zuständen kommen kann.	Wenn zwei oder mehrere parallel laufende Threads dasselbe Objekt ansprechen, kann es zu Problemem kommen, da beide gleichzeitig das Objekt ändern. Deswegen benutzt man Monitore, wobei die dazugehörigen Objekte in ein Monitor eingeschlossen werden. Eingekapselt werden kritische Abschnitte.	incorrect	incorrect
-Wie wird bei Methodenschablonen ermittelt, welchen konkreten Typ T zur Laufzeit annimmt? Wie wird dies bei Klassenschablonen ermittelt?	Bei Methodenschablonen wird T aus den angegebenen Parametern abgeleitet (deshalb muss T als einer der Parametertypen vorliegen). Wenn die Parameter nicht den gleichen Typ haben, wird T als der unterste gemeinsame Muttertyp in der Ableitungshierarchie gewählt. Bei Klassenschablonen wird beim Erstellen eines neuen Objekts die Typinstanziierung angegeben.	Bei der instanzierung. Die in der Klammer verwendeten Typen.	incorrect	correct
+Warum braucht man bei der Arbeit mit Threads Synchronisation?	Man muss vermeiden, dass verschiedene Threads gleichzeitig auf Daten oder Objekte zugreifen, weil es dadurch zur Zerstörung von Werten und zu inkonsistenten Zuständen kommen kann.	Wenn zwei oder mehrere parallel laufende Threads dasselbe Objekt ansprechen, kann es zu Problemem kommen, da beide gleichzeitig das Objekt ändern. Deswegen benutzt man Monitore, wobei die dazugehörigen Objekte in ein Monitor eingeschlossen werden. Eingekapselt werden kritische Abschnitte.	incorrect	correct
+Wie wird bei Methodenschablonen ermittelt, welchen konkreten Typ T zur Laufzeit annimmt? Wie wird dies bei Klassenschablonen ermittelt?	Bei Methodenschablonen wird T aus den angegebenen Parametern abgeleitet (deshalb muss T als einer der Parametertypen vorliegen). Wenn die Parameter nicht den gleichen Typ haben, wird T als der unterste gemeinsame Muttertyp in der Ableitungshierarchie gewählt. Bei Klassenschablonen wird beim Erstellen eines neuen Objekts die Typinstanziierung angegeben.	Bei der instanzierung. Die in der Klammer verwendeten Typen.	incorrect	incorrect
 Warum können verschiedene Instanzen von Enumerationstypen in switch-case-Konstrukten genutzt werden?	Weil es von jedem Objekt nur eine Instanz gibt, so dass == mit equals() identisch ist.	Weil die Enumerationstypen stets public, final und static sind.	incorrect	incorrect
 Wie bestimmen Sie bei einem XML-Dokument Gültigkeit und Wohlgeformtheit? Kann eines ohne das andere vorkommen?	Wohlgeformtheit bestimmt sich aus den Syntaxvorschriften für XML-Dokumente (z.B. müssen alle Tags geschlossen werden, es darf nur ein Wurzelelement geben, reservierte Zeichen müssen vermieden werden). Gültigkeit liegt vor, wenn das XML-Dokument darüber hinaus der Elementdefinition aus der DTD entspricht. Ein XML-Dokument kann wohlgeformt sein, ohne gültig zu sein, aber zur Gültigkeit ist die Wohlgeformtheit Voraussetzung. Alternativ: Dokumente werden mit ""validate"" auf Gültigkeit und Wohlgeformtheit geprüft	Ein XML Dokument muss einen internen und externen DTD enthalten. Die DTD-Datei beschreibt die Struktur. Diese muss gut geformt sein. Eine XML Datei kann ohne DTD nicht vorkommen, denn dann ist Struktur nicht wohlgeformt.	incorrect	incorrect
-In einer Swing-Demo ändert sich beim Klick auf einen Button der Text auf dem Button. Wie sieht der mehrschrittige Ablauf hinter den Kulissen aus?	Der Klick auf den Button erzeugt ein ActionEvent. Das ActionEvent wird von einem Listener aufgefangen, der beim Button registriert ist. Dieser Listener führt daraufhin seinen Code aus, der den Text ändert.	es wird mit einer actionEvent erzeugt	incorrect	correct
+In einer Swing-Demo ändert sich beim Klick auf einen Button der Text auf dem Button. Wie sieht der mehrschrittige Ablauf hinter den Kulissen aus?	Der Klick auf den Button erzeugt ein ActionEvent. Das ActionEvent wird von einem Listener aufgefangen, der beim Button registriert ist. Dieser Listener führt daraufhin seinen Code aus, der den Text ändert.	es wird mit einer actionEvent erzeugt	incorrect	incorrect
 
-Classification Report:
+Classification Report - high Precision for classes correct or incorrect indicates that the class prediction is reliable:
 	 precision 	 recall 	 f1-score 	 support
-correct	0.75	0.60	0.67	5
-incorrect	0.60	0.75	0.67	4
+correct	0.50	0.67	0.57	3
+incorrect	0.80	0.67	0.73	6
 accuracy			0.67	9
-weighted avg	0.68	0.67	0.67	9
\ No newline at end of file
+weighted avg	0.70	0.67	0.68	9
\ No newline at end of file
diff --git a/Source/Skript/outputs/test.tsv b/Source/Skript/outputs/test.tsv
index 70965c74870201cb17f5281a842d5a837e84cf64..8cbfadfafa618cdd015a401b4a5bac09557c7463 100644
--- a/Source/Skript/outputs/test.tsv
+++ b/Source/Skript/outputs/test.tsv
@@ -1,10 +1,10 @@
 question	referenceAnswer	studentAnswer	observed grade
 Warum braucht man für XML-Tags Namensräume?	Da jeder Benutzer frei XML-Tags definieren kann, kann es passieren, dass dasselbe Tag in mehreren Dokumenten vorkommt und jeweils eine unterschiedliche Bedeutung hat. Namensräume sorgen dafür, dass diese unterschiedlichen Bedeutungen eindeutig auseinandergehalten werden können, indem die Tags qualifiziert werden. Namensräume verknüpfen Tags mit einer Anwendung:	weil sich die Namen von Tags aus einzelnen XML Dateien überschneiden können.Deshlab qualifizierte Namen das bedeuteet dass die Namen sich auf einen Namenraum beziehen und der Namenraum ist als Attribut an Elemente gebunden.	correct
 Warum möchten Sie bei der Objektserialisierung mit Hilfe von transient bzw. serialPersistentFields[] die Kontrolle darüber haben, welche Felder serialisiert werden?	Wenn das Objekt schützenswerte Information enthält wie z.B. Passwörter, müssen diese bei der Serialisierung ausgeschlossen werden, da sie sonst aus dem serialisierten Objekt problemlos auszulesen sind.  Außerdem gibt es Felder, die nicht serialisierbar sind (z.B. Sockets oder Threads). Diese Felder möchte man auch ausschließen.	Wenn Attribute mit transient markiert werden, dann werden sie bei der Serialisierung übersprungen. serialPersistentFields[] kann man die zu serialisierenden Attribute aufzählen	incorrect
-Warum braucht man für XML-Tags Namensräume?	Da jeder Benutzer frei XML-Tags definieren kann, kann es passieren, dass dasselbe Tag in mehreren Dokumenten vorkommt und jeweils eine unterschiedliche Bedeutung hat. Namensräume sorgen dafür, dass diese unterschiedlichen Bedeutungen eindeutig auseinandergehalten werden können, indem die Tags qualifiziert werden. Namensräume verknüpfen Tags mit einer Anwendung: 	Namensräume verknüft ein XML-Element mit einer Anwendung. Der Gültigkeitsbereich gilt für den Bereich mit dem Präfix versehenen Elemente und Attribute.	correct
+Warum braucht man für XML-Tags Namensräume?	Da jeder Benutzer frei XML-Tags definieren kann, kann es passieren, dass dasselbe Tag in mehreren Dokumenten vorkommt und jeweils eine unterschiedliche Bedeutung hat. Namensräume sorgen dafür, dass diese unterschiedlichen Bedeutungen eindeutig auseinandergehalten werden können, indem die Tags qualifiziert werden. Namensräume verknüpfen Tags mit einer Anwendung: 	Namensräume verknüft ein XML-Element mit einer Anwendung. Der Gültigkeitsbereich gilt für den Bereich mit dem Präfix versehenen Elemente und Attribute.	incorrect
 Sie möchten ein protected-Feld und mehrere unimplementierte Methoden vererben. Benutzen Sie eine Schnittstelle oder eine abstrakte Klasse? Warum?	abstrakte Klasse.  Schnittstellen können nur Konstanten vererben, abstrakte Klassen vererben Felder. alternativ: abstrakte Klassen vererben unimplementierte Methoden	ich würde eine abstrakte Klasse benutzen, weil die Schinttstellen können nur Konstanten haben.	correct
-Warum braucht man bei der Arbeit mit Threads Synchronisation?	Man muss vermeiden, dass verschiedene Threads gleichzeitig auf Daten oder Objekte zugreifen, weil es dadurch zur Zerstörung von Werten und zu inkonsistenten Zuständen kommen kann.	Wenn zwei oder mehrere parallel laufende Threads dasselbe Objekt ansprechen, kann es zu Problemem kommen, da beide gleichzeitig das Objekt ändern. Deswegen benutzt man Monitore, wobei die dazugehörigen Objekte in ein Monitor eingeschlossen werden. Eingekapselt werden kritische Abschnitte.	incorrect
-Wie wird bei Methodenschablonen ermittelt, welchen konkreten Typ T zur Laufzeit annimmt? Wie wird dies bei Klassenschablonen ermittelt?	Bei Methodenschablonen wird T aus den angegebenen Parametern abgeleitet (deshalb muss T als einer der Parametertypen vorliegen). Wenn die Parameter nicht den gleichen Typ haben, wird T als der unterste gemeinsame Muttertyp in der Ableitungshierarchie gewählt. Bei Klassenschablonen wird beim Erstellen eines neuen Objekts die Typinstanziierung angegeben.	Bei der instanzierung. Die in der Klammer verwendeten Typen.	correct
+Warum braucht man bei der Arbeit mit Threads Synchronisation?	Man muss vermeiden, dass verschiedene Threads gleichzeitig auf Daten oder Objekte zugreifen, weil es dadurch zur Zerstörung von Werten und zu inkonsistenten Zuständen kommen kann.	Wenn zwei oder mehrere parallel laufende Threads dasselbe Objekt ansprechen, kann es zu Problemem kommen, da beide gleichzeitig das Objekt ändern. Deswegen benutzt man Monitore, wobei die dazugehörigen Objekte in ein Monitor eingeschlossen werden. Eingekapselt werden kritische Abschnitte.	correct
+Wie wird bei Methodenschablonen ermittelt, welchen konkreten Typ T zur Laufzeit annimmt? Wie wird dies bei Klassenschablonen ermittelt?	Bei Methodenschablonen wird T aus den angegebenen Parametern abgeleitet (deshalb muss T als einer der Parametertypen vorliegen). Wenn die Parameter nicht den gleichen Typ haben, wird T als der unterste gemeinsame Muttertyp in der Ableitungshierarchie gewählt. Bei Klassenschablonen wird beim Erstellen eines neuen Objekts die Typinstanziierung angegeben.	Bei der instanzierung. Die in der Klammer verwendeten Typen.	incorrect
 Warum können verschiedene Instanzen von Enumerationstypen in switch-case-Konstrukten genutzt werden?	Weil es von jedem Objekt nur eine Instanz gibt, so dass == mit equals() identisch ist.	Weil die Enumerationstypen stets public, final und static sind.	incorrect
 Wie bestimmen Sie bei einem XML-Dokument Gültigkeit und Wohlgeformtheit? Kann eines ohne das andere vorkommen?	Wohlgeformtheit bestimmt sich aus den Syntaxvorschriften für XML-Dokumente (z.B. müssen alle Tags geschlossen werden, es darf nur ein Wurzelelement geben, reservierte Zeichen müssen vermieden werden). Gültigkeit liegt vor, wenn das XML-Dokument darüber hinaus der Elementdefinition aus der DTD entspricht. Ein XML-Dokument kann wohlgeformt sein, ohne gültig zu sein, aber zur Gültigkeit ist die Wohlgeformtheit Voraussetzung. Alternativ: Dokumente werden mit ""validate"" auf Gültigkeit und Wohlgeformtheit geprüft	Ein XML Dokument muss einen internen und externen DTD enthalten. Die DTD-Datei beschreibt die Struktur. Diese muss gut geformt sein. Eine XML Datei kann ohne DTD nicht vorkommen, denn dann ist Struktur nicht wohlgeformt.	incorrect
-In einer Swing-Demo ändert sich beim Klick auf einen Button der Text auf dem Button. Wie sieht der mehrschrittige Ablauf hinter den Kulissen aus?	Der Klick auf den Button erzeugt ein ActionEvent. Das ActionEvent wird von einem Listener aufgefangen, der beim Button registriert ist. Dieser Listener führt daraufhin seinen Code aus, der den Text ändert.	es wird mit einer actionEvent erzeugt	correct
+In einer Swing-Demo ändert sich beim Klick auf einen Button der Text auf dem Button. Wie sieht der mehrschrittige Ablauf hinter den Kulissen aus?	Der Klick auf den Button erzeugt ein ActionEvent. Das ActionEvent wird von einem Listener aufgefangen, der beim Button registriert ist. Dieser Listener führt daraufhin seinen Code aus, der den Text ändert.	es wird mit einer actionEvent erzeugt	incorrect
diff --git a/Source/main.py b/Source/main.py
index fb4df26612af61ef54dc4f317accc62a040da19f..4846a8ad7c9565120115fffd588a7cde6ebd1dca 100644
--- a/Source/main.py
+++ b/Source/main.py
@@ -34,8 +34,11 @@ class App(ttk.Frame):
             self.columnconfigure(index=index, weight=1)
             self.rowconfigure(index=index, weight=1)
 
-        # Create value list
-        self.combo_list = ["Choose language of input data", "English", "German"]
+        # # # Create value list
+        # self.combo_list = ["Choose language of input data", "English", "German"]
+
+        #Create a label
+        self.label = tk.Label(root, text="Please upload an Excel file:", font=("Arial", 12, "bold"))
 
         # Create a Frame for input widgets
         self.widgets_frame = ttk.Frame(self)
@@ -249,18 +252,19 @@ class App(ttk.Frame):
             root.update()
 
             # start the correct backend pipeline
-            if self.combobox.get() == 'English':
-                showinfo(
-                    title="Information",
-                    message="Generating grade suggestions for English student answers. This may take a little while.")
-                # run English backend
-                english_backend()
-            elif self.combobox.get() == 'German':
-                showinfo(
-                    title="Information",
-                    message="Generating grade suggestions for German student answers. This may take a little while.")
-                # run German/multilingual backend
-                german_backend()
+            # if self.combobox.get() == 'English':
+            #     showinfo(
+            #         title="Information",
+            #         message="Generating grade suggestions for English student answers. This may take a little while.")
+            #     # run English backend
+            #     english_backend()
+            # elif self.combobox.get() == 'German':
+            #     showinfo(
+            #         title="Information",
+            #         message="Generating grade suggestions for German student answers. This may take a little while.")
+            #     # run German/multilingual backend
+            #     german_backend()
+            german_backend()
 
             self.button1.config(state=NORMAL)
             self.button2.config(state=NORMAL)
@@ -269,26 +273,28 @@ class App(ttk.Frame):
             # Evaluation window
             open_new_window()
 
-        self.button2 = ttk.Button(self.widgets_frame, text="Input file", command=import_csv_data, state=DISABLED)
+        self.button2 = ttk.Button(self.widgets_frame, text="Input file", command=import_csv_data, state="normal")
         self.button2.grid(row=9, column=0, padx=5, pady=10, sticky="nsew")
 
         # select language, "Choose language" as default
-        self.combobox = ttk.Combobox(
-            self.widgets_frame, values=self.combo_list)
-        self.combobox.current(0)
-        self.combobox.grid(row=5, column=0, padx=5, pady=10, sticky="ew")
+        # self.combobox = ttk.Combobox(
+        #     self.widgets_frame, values=self.combo_list)
+        # self.combobox.current(0)
+        # self.combobox.grid(row=5, column=0, padx=5, pady=10, sticky="ew")
+        self.label = tk.Label(self.widgets_frame, text="Please upload an Excel file:", font=("Arial", 12, "bold"))
+        self.label.grid(row=5, column=0, padx=5, pady=10, sticky="w")
 
         # set state for button2("Input"-button) and if 'Spanish' is chosen in the combobox disable both buttons
         def set_buttons_state(event):
             self.button2.config(state="normal")
             # print('State changed')
-            if self.combobox.get() == 'Spanish':
-                showwarning(title="Information", message="Not available")
-                self.button1.config(state="disabled")
-                self.button2.config(state="disabled")
+            # if self.combobox.get() == 'Spanish':
+            #     showwarning(title="Information", message="Not available")
+            #     self.button1.config(state="disabled")
+            #     self.button2.config(state="disabled")
 
         # get events from changing combobox
-        self.combobox.bind('<<ComboboxSelected>>', set_buttons_state)
+        # self.combobox.bind('<<ComboboxSelected>>', set_buttons_state)
 
         self.button1 = ttk.Button(self.widgets_frame, text="Start",
                                   command=start_progress,