Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -22,7 +22,7 @@ def create_faiss_index(documents):
|
|
22 |
index.add(document_embeddings)
|
23 |
return index, documents
|
24 |
|
25 |
-
# Text aus PDF extrahieren
|
26 |
def extract_text_from_pdf(pdf_path):
|
27 |
doc = fitz.open(pdf_path)
|
28 |
text_chunks = []
|
@@ -34,18 +34,22 @@ def extract_text_from_pdf(pdf_path):
|
|
34 |
return text_chunks
|
35 |
|
36 |
# Suche nach mehreren passenden Abschnitten
|
37 |
-
def search_documents(query, index, documents, k=
|
38 |
query_embedding = model.encode([query])[0].astype('float32')
|
39 |
-
D, I = index.search(np.array([query_embedding]), k=k)
|
40 |
results = [documents[i] for i in I[0]]
|
41 |
-
return
|
42 |
|
43 |
-
#
|
44 |
-
def
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
|
|
|
|
|
|
|
|
49 |
|
50 |
# Gesamtprozess
|
51 |
def chatbot_response(pdf_path, question):
|
@@ -57,12 +61,12 @@ def chatbot_response(pdf_path, question):
|
|
57 |
# FAISS-Index erstellen
|
58 |
index, documents = create_faiss_index(text_chunks)
|
59 |
|
60 |
-
#
|
61 |
-
|
62 |
-
logging.info(f"
|
63 |
|
64 |
# Antwort generieren
|
65 |
-
answer =
|
66 |
return answer
|
67 |
|
68 |
# Gradio-Interface
|
@@ -75,7 +79,7 @@ interface = gr.Interface(
|
|
75 |
inputs=[pdf_input, question_input],
|
76 |
outputs=response_output,
|
77 |
title="PDF-Fragebeantwortung mit FAISS und Transformers",
|
78 |
-
description="Lade eine PDF-Datei hoch und stelle Fragen zu ihrem Inhalt. Das System verwendet FAISS, Transformers und ein QA-Modell, um
|
79 |
)
|
80 |
|
81 |
if __name__ == "__main__":
|
|
|
22 |
index.add(document_embeddings)
|
23 |
return index, documents
|
24 |
|
25 |
+
# Text aus PDF extrahieren
|
26 |
def extract_text_from_pdf(pdf_path):
|
27 |
doc = fitz.open(pdf_path)
|
28 |
text_chunks = []
|
|
|
34 |
return text_chunks
|
35 |
|
36 |
# Suche nach mehreren passenden Abschnitten
|
37 |
+
def search_documents(query, index, documents, k=10):
|
38 |
query_embedding = model.encode([query])[0].astype('float32')
|
39 |
+
D, I = index.search(np.array([query_embedding]), k=k) # Suche nach den Top k Treffern
|
40 |
results = [documents[i] for i in I[0]]
|
41 |
+
return results # Liste von Kontexten zurückgeben
|
42 |
|
43 |
+
# Kombiniere mehrere Antworten
|
44 |
+
def generate_detailed_answer(contexts, question):
|
45 |
+
detailed_answer = []
|
46 |
+
for context in contexts:
|
47 |
+
try:
|
48 |
+
result = qa_model(question=question, context=context)
|
49 |
+
detailed_answer.append(result['answer'])
|
50 |
+
except Exception as e:
|
51 |
+
logging.warning(f"Fehler im QA-Modell: {e}")
|
52 |
+
return " ".join(detailed_answer)
|
53 |
|
54 |
# Gesamtprozess
|
55 |
def chatbot_response(pdf_path, question):
|
|
|
61 |
# FAISS-Index erstellen
|
62 |
index, documents = create_faiss_index(text_chunks)
|
63 |
|
64 |
+
# Suche nach Kontexten
|
65 |
+
contexts = search_documents(question, index, documents, k=10)
|
66 |
+
logging.info(f"Gefundene Kontexte: {[context[:100] for context in contexts]}") # Logge die ersten 100 Zeichen jedes Kontexts
|
67 |
|
68 |
# Antwort generieren
|
69 |
+
answer = generate_detailed_answer(contexts, question)
|
70 |
return answer
|
71 |
|
72 |
# Gradio-Interface
|
|
|
79 |
inputs=[pdf_input, question_input],
|
80 |
outputs=response_output,
|
81 |
title="PDF-Fragebeantwortung mit FAISS und Transformers",
|
82 |
+
description="Lade eine PDF-Datei hoch und stelle Fragen zu ihrem Inhalt. Das System verwendet FAISS, Transformers und ein QA-Modell, um detaillierte Antworten zu liefern."
|
83 |
)
|
84 |
|
85 |
if __name__ == "__main__":
|