PupQuizAI / app.py
DpShirazi's picture
Upload 3 files
8c07c55
raw
history blame
3.55 kB
# -*- coding: utf-8 -*-
"""
Created on Mon Dec 25 18:18:27 2023
@author: alish
"""
import gradio as gr
import fitz # PyMuPDF
import questiongenerator as qs
import random
from questiongenerator import QuestionGenerator
qg = QuestionGenerator()
def Extract_QA(qlist):
i=0
question_i= qlist[i]['question']
Choices_ans= []
Choice_is_correct=[]
for j in range(4):
Choices_ans= Choices_ans+ [qlist[i]['answer'][j]['answer']]
Choice_is_correct= Choice_is_correct+ [qlist[i]['answer'][j]['correct']]
Q=f"""
Q: {question_i}
A. {Choices_ans[0]}
B. {Choices_ans[1]}
C. {Choices_ans[2]}
D. {Choices_ans[3]}
"""
xs=['A','B','C','D']
result = [x for x, y in zip(xs, Choice_is_correct) if y ]
A= f"""
The rigth answer is: {result[0]}
"""
return (Q,A)
def extract_text_from_pdf(pdf_file_path):
# Read the PDF file
global extracted_text
text = []
with fitz.open(pdf_file_path) as doc:
for page in doc:
text.append(page.get_text())
extracted_text= '\n'.join(text)
extracted_text= get_sub_text(extracted_text)
return ("The pdf is uploaded Successfully from:"+ str(pdf_file_path))
qg = qs.QuestionGenerator()
def get_sub_text(TXT):
sub_texts= qg._split_into_segments(TXT)
if isinstance(sub_texts, list):
return sub_texts
else:
return [sub_texts]
def pick_One_txt(sub_texts):
global selected_extracted_text
N= len(sub_texts)
if N==1:
selected_extracted_text= sub_texts[0]
return(selected_extracted_text)
# Generate a random number between low and high
random_number = random.uniform(0, N)
# Pick the integer part of the random number
random_number = int(random_number)
selected_extracted_text= sub_texts[random_number]
return(selected_extracted_text)
def pipeline():
global Q,A
text= selected_extracted_text
qlist= qg.generate(text, num_questions=1, answer_style="multiple_choice")
Q,A= Extract_QA(qlist)
A= A + '\n'+text
return (Q,A)
def ReurnAnswer():
return A
def GetQuestion():
pick_One_txt(extracted_text)
Q,A=pipeline()
return Q
with gr.Blocks() as demo:
with gr.Row():
#input_file=gr.File(type="filepath", label="Upload PDF Document")
input_file=gr.UploadButton(label='Select a file!', file_types=[".pdf"])
#upload_btn = gr.Button(value="Upload File")
#txt= extract_text_from_pdf(input_file)
with gr.Row():
with gr.Column():
upload_btn = gr.Button(value="Upload the pdf File.")
Gen_Question = gr.Button(value="Show the Question")
Gen_Answer = gr.Button(value="Show the Answer")
with gr.Column():
file_stat= gr.Textbox(label="File Status")
question = gr.Textbox(label="Question(s)")
Answer = gr.Textbox(label="Answer(s)")
upload_btn.click(extract_text_from_pdf, inputs=input_file, outputs=file_stat, api_name="QuestioGenerator")
Gen_Question.click(GetQuestion, inputs=None, outputs=question, api_name="QuestioGenerator")
Gen_Answer.click(ReurnAnswer, inputs=None, outputs=Answer, api_name="QuestioGenerator")
#examples = gr.Examples(examples=["I went to the supermarket yesterday.", "Helen is a good swimmer."],
# inputs=[english])
demo.launch()