RAG_test_1 / app.py
la04's picture
Update app.py
318ff7b verified
raw
history blame
2.49 kB
import faiss
import numpy as np
import gradio as gr
from sentence_transformers import SentenceTransformer
import fitz # PyMuPDF für die Textextraktion aus PDFs
# Schritt 1: Lade das Modell für die Embeddings
model = SentenceTransformer('all-MiniLM-L6-v2')
# FAISS-Index erstellen
def create_faiss_index(documents):
document_embeddings = model.encode(documents)
dimension = len(document_embeddings[0])
index = faiss.IndexFlatL2(dimension)
document_embeddings = np.array(document_embeddings).astype('float32')
index.add(document_embeddings) # Füge Dokumente zum Index hinzu
return index, documents
# Schritt 2: Extrahiere Text aus einem PDF
def extract_text_from_pdf(pdf_path):
doc = fitz.open(pdf_path)
text_pages = []
for page_num in range(len(doc)):
page = doc.load_page(page_num)
text = page.get_text("text") # Extrahiert den Text als normalen Text
text_pages.append(text)
return text_pages
# Schritt 3: Suche nach einer ähnlichen Antwort auf eine Eingabeabfrage
def search_documents(query, index, documents):
query_embedding = model.encode([query])[0].astype('float32')
D, I = index.search(np.array([query_embedding]), k=1) # Suche nach den Top 1 Treffern
return documents[I[0][0]] # Gibt das am besten passende Dokument zurück
# Schritt 4: Gesamtprozess (Fragebeantwortung)
def chatbot_response(pdf, question):
# Speichern der hochgeladenen PDF
pdf_path = "uploaded_pdf.pdf"
pdf.save(pdf_path)
# Textextraktion aus der PDF
text_pages = extract_text_from_pdf(pdf_path)
# FAISS-Index erstellen
index, documents = create_faiss_index(text_pages)
# Suche nach Antwort
answer = search_documents(question, index, documents)
# Lösche die hochgeladene PDF-Datei
os.remove(pdf_path)
return answer
# Gradio-Interface
pdf_input = gr.File(label="PDF-Datei hochladen", type="file")
question_input = gr.Textbox(label="Frage eingeben", placeholder="Stelle eine Frage zu dem PDF-Dokument")
response_output = gr.Textbox(label="Antwort")
# Gradio-Interface erstellen
interface = gr.Interface(
fn=chatbot_response,
inputs=[pdf_input, question_input],
outputs=response_output,
title="PDF-Fragebeantwortung mit FAISS und Transformers",
description="Lade eine PDF-Datei hoch und stelle Fragen zu ihrem Inhalt. Das System verwendet FAISS und Transformers, um die passende Antwort zu finden."
)
if __name__ == "__main__":
interface.launch()