File size: 1,489 Bytes
002247f
63459a6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
import requests
import io
import json
from transformers import AutoTokenizer, AutoModelForQuestionAnswering

# Download and load pre-trained model and tokenizer
model_name = "distilbert-base-cased-distilled-squad"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForQuestionAnswering.from_pretrained(model_name)

def answer_question(pdf_file, question):
    # Convert PDF to text
    pdf_data = pdf_file.read()
    pdf_stream = io.BytesIO(pdf_data)
    response = requests.post(
        'https://pdftotext.com/ExtractText',
        files={'pdffile': pdf_stream},
        data={'form': 'pdftotext'}
    )
    text = response.text.strip()

    # Tokenize question and text
    input_ids = tokenizer.encode(question, text)

    # Perform question answering
    outputs = model(torch.tensor([input_ids]), return_dict=True)
    answer_start = outputs.start_logits.argmax().item()
    answer_end = outputs.end_logits.argmax().item()
    answer = tokenizer.convert_tokens_to_string(tokenizer.convert_ids_to_tokens(input_ids[answer_start:answer_end+1]))

    return answer

inputs = [
    gr.inputs.File(label="PDF document"),
    gr.inputs.Textbox(label="Question")
]

outputs = gr.outputs.Textbox(label="Answer")

gr.Interface(fn=answer_question, inputs=inputs, outputs=outputs, title="PDF Question Answering Tool", 
             description="Upload a PDF document and ask a question. The app will use a pre-trained model to find the answer.").launch()