diff --git a/README.md b/README.md
index 7a26a38263e32934f37b378db236e6f388e789ed..194bd645195ca4c6ac84a7187f9f41a08fbd3054 100644
--- a/README.md
+++ b/README.md
@@ -1,93 +1,80 @@
 # Graphical Lecture Content Extraction
 
 
+This repository contains the implementation and data used in the Bachelor thesis titled "**AI Generator for Questions from Graphical Lecture Content**." The focus of the thesis is the development of a system that generates questions based on **graphical lecture content** using **Large Language Models (LLMs)** and **OpenAI's Vision API**. The project aims to explore efficient methods for extracting and interpreting graphical content from educational materials, primarily in the form of PDFs, and to automate the generation of educational questions.
 
-## Getting started
+## Project Overview
 
-To make it easy for you to get started with GitLab, here's a list of recommended next steps.
+The core of this project is the **Retrieval-Augmented Generation (RAG)** model, which combines **Large Language Models (LLMs)** with external document knowledge to dynamically generate questions from lecture content. The project primarily focuses on graphical content processing, such as images, charts, and diagrams in lecture PDFs.
 
-Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)!
+### Key Features:
+- **Text and Graphical Content Processing**: Leveraging **OpenAI's Vision API** to interpret images and diagrams, extracting meaningful educational content.
+- **Question Generation**: Automatically generating questions from lecture materials using the **AnythingLLM** framework, which embeds the content into a vector database for efficient retrieval.
+- **Comparative Analysis**: Evaluating the performance of **text-based extraction** versus **graphical content processing**.
 
-## Add your files
+## Methodology
 
-- [ ] [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files
-- [ ] [Add files using the command line](https://docs.gitlab.com/ee/gitlab-basics/add-file.html#add-a-file-using-the-command-line) or push an existing Git repository with the following command:
+The project was divided into several phases, each involving different approaches for extracting and processing educational content from PDF slides:
 
-```
-cd existing_repo
-git remote add origin https://gitlab.tugraz.at/ed-tech/2024/graphical-lecture-content-extraction.git
-git branch -M main
-git push -uf origin main
-```
+1. **PDF Text Extraction**: Using **PyMuPDF** to extract textual content from lecture slides.
+2. **Graphical Content Processing**: Converting PDF slides into images and using **OpenAI’s Vision API** to extract and interpret graphical information (charts, images, diagrams).
+3. **Retrieval-Augmented Generation (RAG)**: Embedding the extracted content in a vector database using **AnythingLLM**, enabling dynamic retrieval of relevant content and generating questions through prompts.
+4. **Evaluation and Comparison**: Testing different prompt designs and comparing the results of text-based extraction versus graphical content processing.
 
-## Integrate with your tools
+More detailed information about the methods and results can be found in the Bachelor thesis document.
 
-- [ ] [Set up project integrations](https://gitlab.tugraz.at/ed-tech/2024/graphical-lecture-content-extraction/-/settings/integrations)
-
-## Collaborate with your team
-
-- [ ] [Invite team members and collaborators](https://docs.gitlab.com/ee/user/project/members/)
-- [ ] [Create a new merge request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html)
-- [ ] [Automatically close issues from merge requests](https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically)
-- [ ] [Enable merge request approvals](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/)
-- [ ] [Set auto-merge](https://docs.gitlab.com/ee/user/project/merge_requests/merge_when_pipeline_succeeds.html)
-
-## Test and Deploy
-
-Use the built-in continuous integration in GitLab.
-
-- [ ] [Get started with GitLab CI/CD](https://docs.gitlab.com/ee/ci/quick_start/index.html)
-- [ ] [Analyze your code for known vulnerabilities with Static Application Security Testing (SAST)](https://docs.gitlab.com/ee/user/application_security/sast/)
-- [ ] [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/ee/topics/autodevops/requirements.html)
-- [ ] [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/ee/user/clusters/agent/)
-- [ ] [Set up protected environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html)
-
-***
-
-# Editing this README
+## Installation
 
-When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thanks to [makeareadme.com](https://www.makeareadme.com/) for this template.
+### Requirements
 
-## Suggestions for a good README
+- Python 3.x
+- Required Python libraries:
+  - `requests`
+  - `PyMuPDF`
+  - `pdf2image`
+  - `os`
+  - `sys`
+  - `subprocess`
 
-Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information.
+### Steps
 
-## Name
-Choose a self-explaining name for your project.
+1. **Clone the repository**:
+   ```bash
+   git clone <repository-url>
+   cd <repository-folder>
+   ```
 
-## Description
-Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors.
+2. **Install dependencies**:
+   Install the required Python libraries using `pip`:
+   ```bash
+   pip install -r requirements.txt
+   ```
 
-## Badges
-On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge.
+3. **Run the script**:
+   The script extracts content from PDF files and processes both text and graphical data. To run the extraction and generation process, use:
+   ```bash
+   python content_extraction.py
+   ```
 
-## Visuals
-Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method.
+4. **Using Docker**:
+   For deploying the **AnythingLLM** web interface, you can use Docker. Follow the instructions provided in the [AnythingLLM Docker Guide](https://github.com/Mintplex-Labs/anything-llm/blob/master/docker/HOW_TO_USE_DOCKER.md).
 
-## Installation
-Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection.
+## Data Source
 
-## Usage
-Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README.
+The graphical lecture content used for testing and evaluation in this thesis is based on lectures from **TU Graz** on **cryptographic processes**, with specific attention to non-textual elements such as **block ciphers**, **encryption schemes**, and **AES round functions**. The images and content were derived from the educational materials provided by **TU Graz IAIK** [Lecture Material](https://www.iaik.tugraz.at/course/information-security-inp33404uf-wintersemester-2023-24/).
 
-## Support
-Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc.
+## Results
 
-## Roadmap
-If you have ideas for releases in the future, it is a good idea to list them in the README.
+The results showed that graphical content could be effectively processed and interpreted by **OpenAI's Vision API**, providing detailed descriptions of diagrams and other non-textual elements. This allowed for more accurate and meaningful question generation compared to text-based extraction alone. Prompt responses were gathered in dataset.json with analysis in dataset_comparison_prompt3.json.
 
-## Contributing
-State if you are open to contributions and what your requirements are for accepting them.
+  
+## License
 
-For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self.
+This repository, including the developed code and related materials, is also published under the [Creative Commons Attribution 4.0 International License (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/).
 
-You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser.
 
-## Authors and acknowledgment
-Show your appreciation to those who have contributed to the project.
+## Acknowledgments
 
-## License
-For open source projects, say how it is licensed.
+This work was supervised by **Priv.-Doz. Dipl.-Ing. Dr.techn. Martin Ebner** and **Benedikt Brünner, MEd BEd** at the **Institute of Interactive Systems and Data Science**, **Graz University of Technology**.
 
-## Project status
-If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers.
+For more information, please refer to the **Bachelor thesis** attached.
diff --git a/content_extraction.py b/content_extraction.py
new file mode 100644
index 0000000000000000000000000000000000000000..a4551594d77903825cc77f190488dda6150fa6ba
--- /dev/null
+++ b/content_extraction.py
@@ -0,0 +1,112 @@
+import subprocess
+import sys
+import os
+
+def install_package(package):
+    subprocess.check_call([sys.executable, "-m", "pip", "install", package])
+
+install_package('pdf2image')
+install_package('requests')
+
+from pdf2image import convert_from_path
+import base64
+import requests
+
+def list_pdfs_in_folder(folder_path):
+
+    pdf_files = [f for f in os.listdir(folder_path) if f.endswith('.pdf')]
+    if not pdf_files:
+        print("No PDF files found in the specified folder.")
+        sys.exit(1)
+    
+    print("Select a PDF file to process:")
+    for i, pdf in enumerate(pdf_files):
+        print(f"{i + 1}: {pdf}")
+    
+    while True:
+        try:
+            choice = int(input("Enter the number of the PDF file: "))
+            if 1 <= choice <= len(pdf_files):
+                return os.path.join(folder_path, pdf_files[choice - 1])
+            else:
+                print("Invalid choice. Please select a valid number.")
+        except ValueError:
+            print("Invalid input. Please enter a number.")
+
+def ask_for_pages(num_pages):
+    print(f"The selected PDF has {num_pages} pages.")
+    while True:
+        try:
+            pages = input(f"Enter the page numbers to process (1-{num_pages}), separated by commas (e.g., 1,3,5): ")
+            page_numbers = [int(page.strip()) - 1 for page in pages.split(",")]
+            if all(0 <= page < num_pages for page in page_numbers):
+                return page_numbers
+            else:
+                print("Invalid page numbers. Please enter valid page numbers.")
+        except ValueError:
+            print("Invalid input. Please enter numbers separated by commas.")
+
+def encode_image(image_path):
+    with open(image_path, "rb") as image_file:
+        return base64.b64encode(image_file.read()).decode('utf-8')
+
+def analyze_image(api_key, base64_image):
+    headers = {
+        "Content-Type": "application/json",
+        "Authorization": f"Bearer {api_key}"
+    }
+
+    payload = {
+        "model": "gpt-4o-mini",
+        "messages": [
+            {
+                "role": "user",
+                "content": [
+                    {
+                        "type": "text",
+                        "text": "Can you describe in detail what is the content of this university presentation? Write it down as if it was a university learning book and only write information provided on slide, no additional information."
+                    },
+                    {
+                        "type": "image_url",
+                        "image_url": {
+                            "url": f"data:image/jpeg;base64,{base64_image}"
+                        }
+                    }
+                ]
+            }
+        ],
+        "max_tokens": 2000
+    }
+
+    response = requests.post("https://api.openai.com/v1/chat/completions", headers=headers, json=payload)
+    
+    if response.status_code == 200:
+        try:
+            return response.json()
+        except ValueError:
+            print("Error: Could not decode the JSON response.")
+            print("Response text:", response.text)
+    else:
+        print(f"Error: Request failed with status code {response.status_code}")
+        print("Response text:", response.text)
+
+def process_pdf(pdf_path, api_key):
+    images = convert_from_path(pdf_path)
+    num_pages = len(images)
+
+    pages_to_process = ask_for_pages(num_pages)
+
+    for i in pages_to_process:
+        image_filename = f'page_{i + 1}.jpg'
+        images[i].save(image_filename, 'JPEG')
+        base64_image = encode_image(image_filename)
+        response = analyze_image(api_key, base64_image)
+        if response:
+            print(f"Response for page {i + 1}: {response}")
+
+folder_path = '/path' #full path to folder with lecture content
+pdf_path = list_pdfs_in_folder(folder_path)
+
+api_key = "" #add your own created api key 
+
+process_pdf(pdf_path, api_key)
diff --git a/dataset.json b/dataset.json
new file mode 100644
index 0000000000000000000000000000000000000000..4e0463ec4f8d72b23e90c9ae10758acb3c209e01
--- /dev/null
+++ b/dataset.json
@@ -0,0 +1,68 @@
+[
+    {
+        "Figure": "3.1",
+        "RatingNo": 1,
+        "Prompt": "Can you describe in detail what is in this image? Give me all the written details for educational purpose. Do NOT summarize the image. Do NOT describe the visual style.",
+        "CourseContent": 3,
+        "Accuracy": 5,
+        "Complexity": 4,
+        "Language": 4,
+        "Total": 16,
+        "Answer": "The image contains information about block ciphers, specifically addressing key space and plaintext space. Here are the written details:\n\n---\n\n**Block Ciphers – Key Space and Plaintext Space**\n\nA block cipher is a family of permutations (bijective functions) \\( E_K \\).\n\nEach \\( k \\)-bit key \\( K \\) defines a permutation \\( E_K \\) that encrypts \\( n \\)-bit message blocks \\( M \\) to \\( n \\)-bit ciphertext blocks \\( C = E_K(M) \\).\n\nIt also defines the inverse permutation \\( D_K = E^{-1}_K \\) that maps \\( C \\) back to \\( M \\).\n\n- \\( 2^n \\) possible inputs/outputs \\( M \\)\n- \\( 2^k \\) possible keys (mappings) \\( K \\)\n\n**Encrypt** \n\\( M \\) \n\\( n \\)-bit \n\\( E_K \\) \n\\( n \\)-bit \n\\( C \\)\n\n**Decrypt** \n\\( C \\) \n\\( n \\)-bit \n\\( D_K \\) \n\\( n \\)-bit \n\\( M \\)\n\n---\n\nThis text summarizes the concept and operational mechanics of block ciphers in encryption and decryption processes."
+    },
+    {
+        "Figure": "3.2",
+        "RatingNo": 2,
+        "Prompt": "Can you describe in detail what is in this image? Give me all the written details for educational purpose. Do NOT summarize the image. Do NOT describe the visual style.",
+        "CourseContent": 3,
+        "Accuracy": 5,
+        "Complexity": 4,
+        "Language": 4,
+        "Total": 16,
+        "Answer": "The image is titled AES Round Function – Overview and presents the four main steps involved in the AES (Advanced Encryption Standard) round function. \n\n1. **SubBytes (SB)**:\n - Represents a transformation where a byte is substituted according to a predefined substitution table (S-box).\n - Input matrix: \n ```\n a = | a00 a01 a02 a03 |\n | a10 a11 a12 a13 |\n | a20 a21 a22 a23 |\n | a30 a31 a32 a33 |\n ```\n - Output matrix: \n ```\n b = | b00 b01 b02 b03 |\n | b10 b11 b12 b13 |\n | b20 b21 b22 b23 |\n | b30 b31 b32 b33 |\n ```\n - The mapping is denoted as `S`, where `aij` is transformed into `bij` for each element.\n\n2. **ShiftRows (SR)**:\n - This step involves shifting the rows of the matrix.\n - The operation shifts the rows by different offsets:\n - The first row remains unchanged.\n - The second row is shifted one byte to the left.\n - The third row is shifted two bytes to the left.\n - The fourth row is shifted three bytes to the left.\n\n3. **MixColumns (MC)**:\n - In this step, each column of the matrix is mixed by multiplying it wiey (AK)**:\n - This final transformation for a round involves a bitwise XOR operation between the current state and a round key.\n - Matrices involved:\n - State matrix (output from MixColumns or th a fixed matrix, defined as:\n ```\n | 2 3 1 1 |\n | 1 2 3 1 |\n | 1 1 2 3 |\n | 3 1 1 2 |\n ```\n - This matrix multiplication produces new column values in the output matrix.\n\n4. **AddRoundKShiftRows, if skipped).\n - Round key matrix:\n ```\n k = | k00 k01 k02 k03 |\n | k10 k11 k12 k13 |\n | k20 k21 k22 k23 |\n | k30 k31 k32 k33 |\n ```\n - The operation results in:\n ```\n output = state ⊕ k\n"
+    },
+    {
+        "Figure": "3.1",
+        "RatingNo": 3,
+        "Prompt": "Can you describe in detail what is the content of this university presentation? Write it down as if it was a university learning book.",
+        "CourseContent": 2,
+        "Accuracy": 5,
+        "Complexity": 5,
+        "Language": 5,
+        "Total": 17,
+        "Answer": "Block Ciphers – Key Space and Plaintext Space\n\n## Introduction to Block Ciphers\n\nA **block cipher** is a cryptographic algorithm that operates on fixed-size blocks of data, transforming plaintext into ciphertext and vice versa through encryption and decryption processes. The fundamental principle of block ciphers revolves around the use of permutations, which are bijective functions that ensure a one-to-one mapping between the input and output data.\n\n### Components of a Block Cipher\n\n1. **Plaintext (M)**:\n - Represented as an n-bit message block. This is the original data that needs to be protected.\n\n2. **Ciphertext (C)**:\n - Also represented as an n-bit message block. This is the encrypted output that results from processing the plaintext through the block cipher.\n\n3. **Key (K)**:\n - A k-bit key that defines the specific transformation performed by the cipher. Each key results in a unique encryption and decryption function.\n\n### Encryption Process\n\nThe encryption procedure can be described as follows:\n\n1. The plaintext \\( M \\) is input into an encryption function \\( E_K \\), which represents the block cipher's encryption algorithm defined by the key \\( K \\).\n \n \\[\n C = E_K(M)\n \\]\n\n2. This process produces the ciphertext \\( C \\). The key \\( K \\) is crucial as it dictates how the plaintext is transformed into ciphertext, providing the necessary security.\n\n### Decryption Process\n\nThe decryption process is the reverse of encryption:\n\n1. The ciphertext \\( C \\) is input into the decryption function \\( D_K \\), which utilizes the same key \\( K \\) to retrieve the original plaintext.\n \n \\[\n M = D_K(C) = E^{-1}_K(C)\n \\]\n\n2. The inverse function \\( D_K \\) effectively reverses the encryption, highlighting the bijective nature of the cipher.\n\n### Key and Input Space\n\nThe characteristics of block ciphers are further defined by their key and input space:\n\n- **Input/Output Space**:\n - For an n-bit message block, there are \\( 2^n \\) possible plaintexts and ciphertexts, indicating the vast number of unique data combinations the cipher can process.\n\n- **Key Space**:\n - For a k-bit key, there are \\( 2^k \\) possible keys, which determines the number of unique mappings (or permutations) the block cipher can employ."
+    },
+    {
+        "Figure": "3.2",
+        "RatingNo": 4,
+        "Prompt": "Can you describe in detail what is the content of this university presentation? Write it down as if it was a university learning book.",
+        "CourseContent": 2,
+        "Accuracy": 5,
+        "Complexity": 5,
+        "Language": 5,
+        "Total": 17,
+        "Answer": "AES Round Function Overview\n\nThe Advanced Encryption Standard (AES) is a symmetric encryption algorithm widely used for securing data. The AES round function is a critical component of the encryption process, consisting of a series of operations that transform the input data into encrypted output. This section provides a detailed description of each step in the AES round function.\n\n## 1. SubBytes (SB)\n\nThe SubBytes step is a non-linear byte substitution that operates on each byte of the state array independently. During this transformation, each byte is replaced with a corresponding byte from a predefined substitution box (S-box). This S-box is designed to provide resistance against linear and differential cryptanalysis. The transformation can be mathematically represented as:\n\n\\[ b_{ij} = S(a_{ij}) \\]\n\nwhere \\( a_{ij} \\) is the input byte from the state matrix and \\( b_{ij} \\) is the output byte after substitution.\n\n## 2. ShiftRows (SR)\n\nThe ShiftRows operation involves cyclically shifting the rows of the state array. Each row is shifted left by a number of positions equal to its row index. Specifically, the first row is not shifted, the second row is shifted by one byte, the third by two bytes, and the fourth by three bytes. This operation enhances diffusion by ensuring that the bytes in each row interact more thoroughly with those in other rows in subsequent processing steps.\n\nThe transformation can be illustrated as:\n- Row 0: \\[ (a_{00}, a_{01}, a_{02}, a_{03}) \\]\n- Row 1: \\[ (a_{11}, a_{12}, a_{13}, a_{10}) \\]\n- Row 2: \\[ (a_{22}, a_{23}, a_{20}, a_{21}) \\]\n- Row 3: \\[ (a_{33}, a_{30}, a_{31}, a_{32}) \\]\n\nThis rearrangement helps increase the diffusion of the data.\n\n## 3. MixColumns (MC)\n\nThe MixColumns step involves mixing the columns of the state array. Each column is treated as a four-term polynomial over the finite field GF(2^8), and is transformed using matrix multiplication with a fixed matrix:\n\n\\[\n\\begin{bmatrix}\n2 & 3 & 1 & 1 \\\\\n1 & 2 & 3 & 1 \\\\\n1 & 1 & 2 & 3 \\\\\n3 & 1 & 1 & 2\n\\end{bmatrix}\n\\]\n\nThe matrix multiplication ensures that the bits in each column are mixed to achieve maximum diffusion.\n\n## 4. AddRoundKey (AK)\n\nIn the final step of the round function, the state array is bitwise XORed with the round key. This operation ensures that the encryption process is dependent on the secret key."
+    },
+    {
+        "Figure": "3.1",
+        "RatingNo": 5,
+        "Prompt": "Can you describe in detail what is the content of this university presentation? Write it down as if it was a university learning book.",
+        "CourseContent": 5,
+        "Accuracy": 5,
+        "Complexity": 4,
+        "Language": 5,
+        "Total": 19,
+        "Answer": "Block Ciphers – Key Space and Plaintext Space\n\nA block cipher is a family of permutations (bijective functions) \\( E_K \\).\n\n- Each \\( k \\)-bit key \\( K \\) defines a permutation \\( E_K \\) that encrypts \\( n \\)-bit message blocks \\( M \\) to \\( n \\)-bit ciphertext blocks \\( C = E_K(M) \\).\n\n- It also defines the inverse permutation \\( D_K = E^{-1}_K \\) that maps \\( C \\) back to \\( M \\).\n\n### Properties\n- \\( 2^n \\) possible inputs/outputs \\( M \\)\n- \\( 2^k \\) possible keys (mappings) \\( K \\)\n\n### Encrypt\n- \\( M \\) (n-bit) → \\( C \\) (n-bit) using \\( E_K \\)\n\n### Decrypt\n- \\( C \\) (n-bit) → \\( M \\) (n-bit) using \\( D_K \\)"
+    },
+    {
+        "Figure": "3.2",
+        "RatingNo": 6,
+        "Prompt": "Can you describe in detail what is the content of this university presentation? Write it down as if it was a university learning book.",
+        "CourseContent": 5,
+        "Accuracy": 5,
+        "Complexity": 4,
+        "Language": 5,
+        "Total": 19,
+        "Answer": "# AES Round Function – Overview\n\n1. **SubBytes (SB)**\n   - Input Matrix: \n   \\[\n   \\begin{bmatrix}\n   a_{00} & a_{01} & a_{02} & a_{03} \\\\\n   a_{10} & a_{11} & a_{12} & a_{13} \\\\\n   a_{20} & a_{21} & a_{22} & a_{23} \\\\\n   a_{30} & a_{31} & a_{32} & a_{33}\n   \\end{bmatrix}\n   \\]\n   - Output Matrix:\n   \\[\n   \\begin{bmatrix}\n   b_{00} & b_{01} & b_{02} & b_{03} \\\\\n   b_{10} & b_{11} & b_{12} & b_{13} \\\\\n   b_{20} & b_{21} & b_{22} & b_{23} \\\\\n   b_{30} & b_{31} & b_{32} & b_{33}\n   \\end{bmatrix}\n   \\]\n   - Transformation: \\( S(a_{ij}) = b_{ij} \\)\n\n2. **ShiftRows (SR)**\n   - Transformation of Rows:\n   \\[\n   \\begin{bmatrix}\n   a_{00} & a_{01} & a_{02} & a_{03} \\\\\n   a_{10} & a_{11} & a_{12} & a_{13} \\\\\n   a_{20} & a_{21} & a_{22} & a_{23} \\\\\n   a_{30} & a_{31} & a_{32} & a_{33}\n   \\end{bmatrix}\n   \\]\n   - Shifting Results:\n   \\[\n   \\begin{bmatrix}\n   b_{00} & b_{01} & b_{02} & b_{03} \\\\\n   b_{11} & b_{12} & b_{13} & b_{10} \\\\\n   b_{22} & b_{23} & b_{20} & b_{21} \\\\\n   b_{33} & b_{30} & b_{31} & b_{32}\n   \\end{bmatrix}\n   \\]\n\n3. **MixColumns (MC)**  \n   - Operation: Mixing of the columns.\n   - Transformation: Each column is multiplied by a fixed polynomial.\n   - Matrix Representation:  \n   \\[\n   \\begin{bmatrix}\n   2 & 3 & 1 & 1 \\\\\n   1 & 2 & 3 & 1 \\\\\n   1 & 1 & 2 & 3 \\\\\n   3 & 1 & 1 & 2\n   \\end{bmatrix}\n   \\]\n   - Input: State matrix \\( A \\)\n   - Output: State matrix \\( B \\)\n\n4. **AddRoundKey (AK)**  \n   - Operation: Bitwise XOR between the state and the round key.\n   - Formula: \n   \\[\n   B = A \\oplus K\n   \\]\n   - Where \\( K \\) is the round key, and both \\( A \\) and \\( K \\) are matrices."
+    }
+]
\ No newline at end of file
diff --git a/dataset_comparison_prompt3.json b/dataset_comparison_prompt3.json
new file mode 100644
index 0000000000000000000000000000000000000000..cea407bbe7f68542a0d16c3b0b180cdda437ee0d
--- /dev/null
+++ b/dataset_comparison_prompt3.json
@@ -0,0 +1,57 @@
+[
+    {
+        "Figure": "Figure 3.1",
+        "Prompt": "Can you describe in detail what is the content of this university presentation? Write it down as if it was a university learning book and only write information provided on slide, no additional information.",
+        "Accuracy_and_Clarity": 4,
+        "Technical_Accuracy": 5,
+        "Adaptability": 4,
+        "Sum": 13,
+        "Answer": "Block Ciphers – Key Space and Plaintext Space\n\nA block cipher is a family of permutations (bijective functions) \\( E_K \\).\n\n- Each \\( k \\)-bit key \\( K \\) defines a permutation \\( E_K \\) that encrypts \\( n \\)-bit message blocks \\( M \\) to \\( n \\)-bit ciphertext blocks \\( C = E_K(M) \\).\n\n- It also defines the inverse permutation \\( D_K = E^{-1}_K \\) that maps \\( C \\) back to \\( M \\).\n\n### Properties\n- \\( 2^n \\) possible inputs/outputs \\( M \\)\n- \\( 2^k \\) possible keys (mappings) \\( K \\)\n\n### Encrypt\n- \\( M \\) (n-bit) → \\( C \\) (n-bit) using \\( E_K \\)\n\n### Decrypt\n- \\( C \\) (n-bit) → \\( M \\) (n-bit) using \\( D_K \\)"
+    },
+    {
+        "Figure": "Figure 3.2",
+        "Prompt": "Can you describe in detail what is the content of this university presentation? Write it down as if it was a university learning book and only write information provided on slide, no additional information.",
+        "Accuracy_and_Clarity": 4,
+        "Technical_Accuracy": 5,
+        "Adaptability": 4,
+        "Sum": 13,
+        "Answer": "# AES Round Function – Overview\n\n1. **SubBytes (SB)**\n   - Input Matrix: \n   \\[\n   \\begin{bmatrix}\n   a_{00} & a_{01} & a_{02} & a_{03} \\\\\n   a_{10} & a_{11} & a_{12} & a_{13} \\\\\n   a_{20} & a_{21} & a_{22} & a_{23} \\\\\n   a_{30} & a_{31} & a_{32} & a_{33}\n   \\end{bmatrix}\n   \\]\n   - Output Matrix:\n   \\[\n   \\begin{bmatrix}\n   b_{00} & b_{01} & b_{02} & b_{03} \\\\\n   b_{10} & b_{11} & b_{12} & b_{13} \\\\\n   b_{20} & b_{21} & b_{22} & b_{23} \\\\\n   b_{30} & b_{31} & b_{32} & b_{33}\n   \\end{bmatrix}\n   \\]\n   - Transformation: \\( S(a_{ij}) = b_{ij} \\)\n\n2. **ShiftRows (SR)**\n   - Transformation of Rows:\n   \\[\n   \\begin{bmatrix}\n   a_{00} & a_{01} & a_{02} & a_{03} \\\\\n   a_{10} & a_{11} & a_{12} & a_{13} \\\\\n   a_{20} & a_{21} & a_{22} & a_{23} \\\\\n   a_{30} & a_{31} & a_{32} & a_{33}\n   \\end{bmatrix}\n   \\]\n   - Shifting Results:\n   \\[\n   \\begin{bmatrix}\n   b_{00} & b_{01} & b_{02} & b_{03} \\\\\n   b_{11} & b_{12} & b_{13} & b_{10} \\\\\n   b_{22} & b_{23} & b_{20} & b_{21} \\\\\n   b_{33} & b_{30} & b_{31} & b_{32}\n   \\end{bmatrix}\n   \\]\n\n3. **MixColumns (MC)**  \n   - Operation: Mixing of the columns.\n   - Transformation: Each column is multiplied by a fixed polynomial.\n   - Matrix Representation:  \n   \\[\n   \\begin{bmatrix}\n   2 & 3 & 1 & 1 \\\\\n   1 & 2 & 3 & 1 \\\\\n   1 & 1 & 2 & 3 \\\\\n   3 & 1 & 1 & 2\n   \\end{bmatrix}\n   \\]\n   - Input: State matrix \\( A \\)\n   - Output: State matrix \\( B \\)\n\n4. **AddRoundKey (AK)**  \n   - Operation: Bitwise XOR between the state and the round key.\n   - Formula: \n   \\[\n   B = A \\oplus K\n   \\]\n   - Where \\( K \\) is the round key, and both \\( A \\) and \\( K \\) are matrices."
+    },
+    {
+        "Figure": "Figure 3.3",
+        "Prompt": "Can you describe in detail what is the content of this university presentation? Write it down as if it was a university learning book and only write information provided on slide, no additional information.",
+        "Accuracy_and_Clarity": 4,
+        "Technical_Accuracy": 5,
+        "Adaptability": 4,
+        "Sum": 13,
+        "Answer": "### AEAD – Authenticated Encryption (with Associated Data)\n\n#### Description:\n- A secure communication model where both confidentiality and authenticity are ensured.\n\n#### Components:\n- **K**: Secret key used for encryption.\n- **N**: Nonce, a unique number that must never repeat for the same key \\( K \\).\n- **A**: Associated data (metadata) that is authenticated but not encrypted.\n- **M**: Message to be encrypted.\n- **C**: Ciphertext, the encrypted output of the message.\n- **T**: Tag, a cryptographic checksum to verify authenticity.\n\n#### Process:\n1. Input the nonce \\( N \\), associated data \\( A \\), and message \\( M \\) into the authenticated encryption function \\( AE_K \\).\n2. Output ciphertext \\( C \\) and tag \\( T \\).\n3. For decryption:\n   - Input nonce \\( N \\), associated data \\( A \\), and tag \\( T \\) to verify authenticity.\n   - Obtain message \\( M \\) or an error indication if verification fails."
+    },
+    {
+        "Figure": "Figure 3.4",
+        "Prompt": "Can you describe in detail what is the content of this university presentation? Write it down as if it was a university learning book and only write information provided on slide, no additional information.",
+        "Accuracy_and_Clarity": 5,
+        "Technical_Accuracy": 5,
+        "Adaptability": 4,
+        "Sum": 14,
+        "Answer": "### Encryption Schemes – Application\n\n1. **Alice computes** \\( C = \\mathcal{E}_K(N, M) \\)\n2. **Alice transmits** \\( N \\) and \\( C \\) to Bob (over an insecure channel controlled by Eve)\n3. **Bob computes** \\( M = \\mathcal{D}_K(N, C) "
+    },
+    {
+        "Figure": "Figure 3.5",
+        "Prompt": "Can you describe in detail what is the content of this university presentation? Write it down as if it was a university learning book and only write information provided on slide, no additional information.",
+        "Accuracy_and_Clarity": 5,
+        "Technical_Accuracy": 5,
+        "Adaptability": 4,
+        "Sum": 14,
+        "Answer": "### Conclusion\n\n- Symmetric schemes protect data confidentiality and/or authenticity.\n- Their security builds on secure primitives by using a secure mode.\n\n#### Confidentiality can be protected with:\n- Encryption (no authenticity)\n- Authenticated Encryption\n- Asymmetric encryption, key encapsulation (next lecture)"
+    },
+    {
+        "Figure": "Figure 3.6",
+        "Prompt": "Can you describe in detail what is the content of this university presentation? Write it down as if it was a university learning book and only write information provided on slide, no additional information.",
+        "Accuracy_and_Clarity": 5,
+        "Technical_Accuracy": 5,
+        "Adaptability": 5,
+        "Sum": 15,
+        "Answer":  "### An Example (still continued): Simple Password Manager\n\n```c\nuint32_t readPIN() {\n    char buffer[16];\n    printf(\"Enter PIN:\\n\");\n    fgets(buffer, 16, stdin);\n    if(getenv(\"DEBUG\")) printf(buffer);\n    return atoi(buffer);\n}\n```\n\n- We ignored the \"debug mode\" before…\n- One additional state in the FSM → echos the input\n- Security property stays the same\n- It should be practically infeasible for an attacker to get the password list (output) if he does not know the PIN (input)."
+    }
+]
+