la04 commited on
Commit
7b74120
·
verified ·
1 Parent(s): 3b403d0

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +47 -9
app.py CHANGED
@@ -3,7 +3,7 @@ import gradio as gr
3
  from PyPDF2 import PdfReader
4
 
5
  # Modell und Tokenizer für Fragebeantwortung laden
6
- model_name = "deepset/roberta-base-squad2"
7
  model = AutoModelForQuestionAnswering.from_pretrained(model_name)
8
  tokenizer = AutoTokenizer.from_pretrained(model_name)
9
 
@@ -17,17 +17,55 @@ def extract_text_from_pdf(pdf_path):
17
  text += page.extract_text()
18
  return text
19
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
  # Funktion für die Fragebeantwortung
21
  def chatbot_response(pdf_path, question):
22
  # PDF-Text extrahieren
23
  context = extract_text_from_pdf(pdf_path)
24
 
25
- # Frage beantworten
26
- try:
27
- result = qa_pipeline(question=question, context=context)
28
- return result['answer']
29
- except Exception as e:
30
- return f"Fehler bei der Beantwortung: {e}"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
 
32
  # Gradio-Interface erstellen
33
  pdf_input = gr.File(label="PDF-Datei hochladen", type="filepath")
@@ -39,8 +77,8 @@ interface = gr.Interface(
39
  fn=chatbot_response,
40
  inputs=[pdf_input, question_input],
41
  outputs=response_output,
42
- title="PDF-Fragebeantwortung auf Deutsch",
43
- description="Lade eine PDF-Datei hoch und stelle Fragen zu ihrem Inhalt. Antworten basieren nur auf den PDF-Inhalten."
44
  )
45
 
46
  if __name__ == "__main__":
 
3
  from PyPDF2 import PdfReader
4
 
5
  # Modell und Tokenizer für Fragebeantwortung laden
6
+ model_name = "deepset/roberta-base-squad2" # Anpassung bei Bedarf nach Fine-Tuning
7
  model = AutoModelForQuestionAnswering.from_pretrained(model_name)
8
  tokenizer = AutoTokenizer.from_pretrained(model_name)
9
 
 
17
  text += page.extract_text()
18
  return text
19
 
20
+ # Funktion für Kontextvorverarbeitung: Aufteilung in Abschnitte basierend auf Absätzen
21
+ def split_text_into_paragraphs(text, max_length=500):
22
+ paragraphs = text.split("\n") # Text nach Zeilenumbrüchen aufteilen
23
+ refined_paragraphs = []
24
+ temp = ""
25
+
26
+ for para in paragraphs:
27
+ if len(temp) + len(para) <= max_length:
28
+ temp += " " + para
29
+ else:
30
+ refined_paragraphs.append(temp.strip())
31
+ temp = para
32
+ if temp:
33
+ refined_paragraphs.append(temp.strip())
34
+
35
+ return refined_paragraphs
36
+
37
+ # Funktion für Postprocessing der Antwort
38
+ def refine_answer(answer):
39
+ if not answer or len(answer.split()) < 3: # Minimalbedingung für eine gültige Antwort
40
+ return "Die Antwort konnte nicht eindeutig aus dem Dokument ermittelt werden."
41
+ # Weitere Regeln für Umformulierung oder Präzisierung könnten hier folgen
42
+ return answer.capitalize().strip()
43
+
44
  # Funktion für die Fragebeantwortung
45
  def chatbot_response(pdf_path, question):
46
  # PDF-Text extrahieren
47
  context = extract_text_from_pdf(pdf_path)
48
 
49
+ # Text vorverarbeiten: Aufteilen in Absätze
50
+ context_parts = split_text_into_paragraphs(context)
51
+
52
+ # Relevante Abschnitte finden (Keyword-Suche)
53
+ relevant_parts = [part for part in context_parts if any(word.lower() in part.lower() for word in question.split())]
54
+ if not relevant_parts:
55
+ relevant_parts = context_parts # Fallback auf gesamten Text, wenn keine Übereinstimmungen gefunden werden
56
+
57
+ # Frage beantworten: Kombiniere Antworten aus relevanten Abschnitten
58
+ answers = []
59
+ for part in relevant_parts:
60
+ try:
61
+ result = qa_pipeline(question=question, context=part)
62
+ answers.append(result['answer'])
63
+ except Exception as e:
64
+ answers.append("") # Fehlerhafte Abschnitte überspringen
65
+
66
+ # Beste Antwort auswählen und Postprocessing anwenden
67
+ final_answer = refine_answer(" ".join(answers).strip())
68
+ return final_answer
69
 
70
  # Gradio-Interface erstellen
71
  pdf_input = gr.File(label="PDF-Datei hochladen", type="filepath")
 
77
  fn=chatbot_response,
78
  inputs=[pdf_input, question_input],
79
  outputs=response_output,
80
+ title="Verbesserte PDF-Fragebeantwortung",
81
+ description="Lade eine PDF-Datei hoch und stelle Fragen zu ihrem Inhalt. Antworten basieren nur auf den PDF-Inhalten und werden optimiert ausgegeben."
82
  )
83
 
84
  if __name__ == "__main__":