File size: 2,116 Bytes
e84a97b
7f96312
d8d8be1
d859c3e
e84a97b
 
 
 
7bf65ec
7f96312
318ff7b
d8d8be1
 
 
 
 
 
7f96312
adbd41e
7f96312
d8d8be1
 
e84a97b
7f96312
 
 
e84a97b
7f96312
 
e84a97b
 
 
 
 
d8d8be1
e84a97b
7f96312
d8d8be1
 
d93fe74
318ff7b
 
ee9ba92
7f96312
fbe3ac4
 
318ff7b
 
7f96312
 
fbe3ac4
ee9ba92
318ff7b
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
from transformers import pipeline, T5ForConditionalGeneration, T5Tokenizer
import gradio as gr
from PyPDF2 import PdfReader

# T5-Modell und Tokenizer laden
model = T5ForConditionalGeneration.from_pretrained('t5-small')
tokenizer = T5Tokenizer.from_pretrained('t5-small')
qa_model = pipeline("text2text-generation", model=model, tokenizer=tokenizer)

# Funktion zum Extrahieren von Text aus der PDF
def extract_text_from_pdf(pdf_path):
    reader = PdfReader(pdf_path)
    text = ""
    for page in reader.pages:
        text += page.extract_text()
    return text

# Funktion für das Bearbeiten der Frage und des Kontextes
def chatbot_response(pdf_path, question):
    # PDF-Text extrahieren
    context = extract_text_from_pdf(pdf_path)
    
    # Text aufteilen, falls er zu lang ist
    max_input_length = 512
    context_parts = [context[i:i + max_input_length] for i in range(0, len(context), max_input_length)]
    
    # Die Frage als Prompt an T5 schicken
    answers = []
    for part in context_parts:
        input_text = f"question: {question} context: {part}"
        input_ids = tokenizer.encode(input_text, return_tensors="pt", truncation=True, max_length=512)
        output = model.generate(input_ids, max_length=150, num_beams=4, early_stopping=True)
        answer = tokenizer.decode(output[0], skip_special_tokens=True)
        answers.append(answer.strip())
    
    # Gib die letzte Antwort zurück
    return answers[-1] if answers else "Keine Antwort gefunden"

# Gradio-Interface erstellen
pdf_input = gr.File(label="PDF-Datei hochladen", type="filepath")
question_input = gr.Textbox(label="Frage eingeben", placeholder="Stelle eine Frage zu dem PDF-Dokument")
response_output = gr.Textbox(label="Antwort")

# Gradio-Interface
interface = gr.Interface(
    fn=chatbot_response,
    inputs=[pdf_input, question_input],
    outputs=response_output,
    title="PDF-Fragebeantwortung mit T5 und Gradio",
    description="Lade eine PDF-Datei hoch und stelle Fragen zu ihrem Inhalt. Das System verwendet T5, um passende Antworten zu finden."
)

if __name__ == "__main__":
    interface.launch()