Skip to content

Übungen: Tag 1 Block 4 - Einführung in RAG

Übung 1: Laden eines Finanzberichts

Ziel

Laden Sie einen Finanzbericht als PDF und extrahieren Sie grundlegende Informationen.

Voraussetzungen

  • Python 3.8+
  • Installierte Pakete: langchain, pypdf, openai

Anleitung

  1. Installieren Sie die benötigten Pakete: bash pip install langchain pypdf openai

  2. Laden Sie einen Beispiel-Finanzbericht herunter (oder verwenden Sie einen eigenen): ```python # Beispiel: Herunterladen eines öffentlichen Finanzberichts import requests

url = "https://www.bundesbank.de/resource/blob/823524/..." # URL zu einem Bundesbank-Bericht response = requests.get(url)

with open("finanzbericht.pdf", "wb") as f: f.write(response.content) ```

  1. Erstellen Sie ein Python-Skript zum Laden des PDFs: ```python from langchain.document_loaders import PyPDFLoader

# Laden des Finanzberichts loader = PyPDFLoader("finanzbericht.pdf") documents = loader.load()

# Informationen ausgeben print(f"Anzahl der geladenen Seiten: {len(documents)}")

# Inhalt der ersten Seite anzeigen print("\nAuszug aus der ersten Seite:") print(documents[0].page_content[:500])

# Metadaten anzeigen print("\nMetadaten der ersten Seite:") print(documents[0].metadata) ```

  1. Erweitern Sie das Skript, um nach bestimmten Schlüsselwörtern zu suchen: ```python # Nach Schlüsselwörtern suchen keywords = ["Risiko", "Inflation", "Zinsen", "Bilanz"]

for keyword in keywords: count = sum(1 for doc in documents if keyword in doc.page_content) print(f"Das Wort '{keyword}' kommt in {count} Seiten vor.") ```

Bonus

Extrahieren Sie alle Seiten, die ein bestimmtes Schlüsselwort enthalten, und speichern Sie diese in einer separaten Datei.


Übung 2: Analyse von Finanzkennzahlen aus Excel

Ziel

Laden Sie eine Excel-Datei mit Finanzkennzahlen und bereiten Sie die Daten für die weitere Verarbeitung vor.

Voraussetzungen

  • Python 3.8+
  • Installierte Pakete: langchain, pandas, openpyxl, unstructured

Anleitung

  1. Installieren Sie die benötigten Pakete: bash pip install langchain pandas openpyxl unstructured

  2. Erstellen Sie eine einfache Excel-Datei mit Finanzkennzahlen oder verwenden Sie eine vorhandene. Beispielstruktur:

  3. Spalte A: Datum
  4. Spalte B: Umsatz
  5. Spalte C: Kosten
  6. Spalte D: Gewinn

  7. Laden Sie die Excel-Datei mit LangChain: ```python from langchain.document_loaders import UnstructuredExcelLoader

# Laden der Excel-Datei loader = UnstructuredExcelLoader("finanzkennzahlen.xlsx") documents = loader.load()

print(f"Anzahl der extrahierten Elemente: {len(documents)}") print(f"Erster Eintrag: {documents[0].page_content}") ```

  1. Alternativ können Sie Pandas für eine strukturiertere Verarbeitung verwenden: ```python import pandas as pd from langchain.schema import Document

# Excel mit Pandas laden df = pd.read_excel("finanzkennzahlen.xlsx")

# Konvertieren in LangChain-Dokumente documents = [] for index, row in df.iterrows(): content = f"Datum: {row['Datum']}, Umsatz: {row['Umsatz']}, Kosten: {row['Kosten']}, Gewinn: {row['Gewinn']}" metadata = {"row": index, "source": "finanzkennzahlen.xlsx"} doc = Document(page_content=content, metadata=metadata) documents.append(doc)

# Ausgabe der Dokumente for doc in documents[:3]: # Erste 3 Einträge anzeigen print(doc) ```

  1. Berechnen Sie einige grundlegende Statistiken: ```python # Statistiken berechnen avg_revenue = df['Umsatz'].mean() max_profit = df['Gewinn'].max() min_profit = df['Gewinn'].min()

print(f"Durchschnittlicher Umsatz: {avg_revenue}") print(f"Maximaler Gewinn: {max_profit}") print(f"Minimaler Gewinn: {min_profit}") ```

Bonus

Erstellen Sie ein einfaches Diagramm, das die Entwicklung von Umsatz und Gewinn über die Zeit zeigt.


Übung 3: Extraktion von Finanzinformationen aus dem Web

Ziel

Laden Sie Finanzinformationen von einer Website und extrahieren Sie relevante Daten.

Voraussetzungen

  • Python 3.8+
  • Installierte Pakete: langchain, beautifulsoup4, requests

Anleitung

  1. Installieren Sie die benötigten Pakete: bash pip install langchain beautifulsoup4 requests

  2. Laden Sie Inhalte von einer Finanz-Website: ```python from langchain.document_loaders import WebBaseLoader

# URL einer Finanzseite (z.B. Bundesbank Statistiken) url = "https://www.bundesbank.de/de/statistiken/geld-und-kapitalmaerkte/zinssaetze-und-renditen"

# Laden der Webseite loader = WebBaseLoader(url) documents = loader.load()

print(f"Anzahl der geladenen Dokumente: {len(documents)}") print(f"Auszug aus dem Inhalt: {documents[0].page_content[:300]}...") ```

  1. Extrahieren Sie spezifische Informationen mit BeautifulSoup: ```python import requests from bs4 import BeautifulSoup from langchain.schema import Document

# Webseite laden response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser')

# Beispiel: Alle Tabellen extrahieren tables = soup.find_all('table')

# Dokumente aus Tabellen erstellen table_documents = [] for i, table in enumerate(tables): content = table.get_text() metadata = {"source": url, "table_number": i} doc = Document(page_content=content, metadata=metadata) table_documents.append(doc)

print(f"Anzahl gefundener Tabellen: {len(table_documents)}") if table_documents: print(f"Inhalt der ersten Tabelle: {table_documents[0].page_content[:200]}...") ```

  1. Speichern Sie die extrahierten Informationen: ```python # Speichern der extrahierten Informationen with open("finanzinformationen.txt", "w", encoding="utf-8") as f: for doc in documents: f.write(f"Quelle: {doc.metadata['source']}\n") f.write(f"Inhalt: {doc.page_content[:500]}...\n\n")

print("Informationen wurden in 'finanzinformationen.txt' gespeichert.") ```

Bonus

Implementieren Sie eine Funktion, die nach bestimmten Finanzindikatoren (z.B. Leitzins, Inflationsrate) sucht und diese extrahiert.


Übung 4: Kombinieren verschiedener Datenquellen

Ziel

Laden Sie Daten aus verschiedenen Quellen (PDF, Excel, Web) und kombinieren Sie diese zu einem einheitlichen Datensatz.

Voraussetzungen

  • Erfolgreicher Abschluss der Übungen 1-3

Anleitung

  1. Erstellen Sie eine Funktion zum Laden von PDFs: ```python from langchain.document_loaders import PyPDFLoader

def load_pdf(file_path): loader = PyPDFLoader(file_path) documents = loader.load() # Metadaten ergänzen for doc in documents: doc.metadata["type"] = "pdf" return documents ```

  1. Erstellen Sie eine Funktion zum Laden von Excel-Dateien: ```python import pandas as pd from langchain.schema import Document

def load_excel(file_path): df = pd.read_excel(file_path) documents = [] for index, row in df.iterrows(): content = ", ".join([f"{col}: {row[col]}" for col in df.columns]) metadata = {"row": index, "source": file_path, "type": "excel"} doc = Document(page_content=content, metadata=metadata) documents.append(doc) return documents ```

  1. Erstellen Sie eine Funktion zum Laden von Webinhalten: ```python from langchain.document_loaders import WebBaseLoader

def load_web(url): loader = WebBaseLoader(url) documents = loader.load() # Metadaten ergänzen for doc in documents: doc.metadata["type"] = "web" return documents ```

  1. Kombinieren Sie alle Datenquellen: ```python # Daten aus verschiedenen Quellen laden pdf_docs = load_pdf("finanzbericht.pdf") excel_docs = load_excel("finanzkennzahlen.xlsx") web_docs = load_web("https://www.bundesbank.de/de/statistiken")

# Alle Dokumente kombinieren all_documents = pdf_docs + excel_docs + web_docs

print(f"Gesamtzahl der Dokumente: {len(all_documents)}") print(f"Davon PDFs: {sum(1 for doc in all_documents if doc.metadata['type'] == 'pdf')}") print(f"Davon Excel: {sum(1 for doc in all_documents if doc.metadata['type'] == 'excel')}") print(f"Davon Web: {sum(1 for doc in all_documents if doc.metadata['type'] == 'web')}") ```

  1. Erstellen Sie eine einfache Suchfunktion: ```python def search_documents(documents, query): results = [] for doc in documents: if query.lower() in doc.page_content.lower(): results.append(doc) return results

# Beispielsuche query = "inflation" results = search_documents(all_documents, query)

print(f"Gefundene Dokumente für '{query}': {len(results)}") for i, doc in enumerate(results[:3]): # Zeige die ersten 3 Ergebnisse print(f"\nErgebnis {i+1}:") print(f"Quelle: {doc.metadata['source']}, Typ: {doc.metadata['type']}") print(f"Inhalt: {doc.page_content[:200]}...") ```

Bonus

Implementieren Sie eine einfache Bewertungsfunktion, die die Relevanz der Suchergebnisse basierend auf der Häufigkeit des Suchbegriffs bewertet.