Ü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¶
-
Installieren Sie die benötigten Pakete:
bash pip install langchain pypdf openai -
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) ```
- 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) ```
- 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¶
-
Installieren Sie die benötigten Pakete:
bash pip install langchain pandas openpyxl unstructured -
Erstellen Sie eine einfache Excel-Datei mit Finanzkennzahlen oder verwenden Sie eine vorhandene. Beispielstruktur:
- Spalte A: Datum
- Spalte B: Umsatz
- Spalte C: Kosten
-
Spalte D: Gewinn
-
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}") ```
- 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) ```
- 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¶
-
Installieren Sie die benötigten Pakete:
bash pip install langchain beautifulsoup4 requests -
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]}...") ```
- 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]}...") ```
- 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¶
- 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 ```
- 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 ```
- 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 ```
- 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')}") ```
- 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.