|
|
|
""" |
|
Created on Mon Dec 25 18:18:27 2023 |
|
|
|
@author: alish |
|
""" |
|
|
|
import gradio as gr |
|
import fitz |
|
import questiongenerator as qs |
|
import random |
|
|
|
from questiongenerator import QuestionGenerator |
|
qg = QuestionGenerator() |
|
|
|
|
|
|
|
def Extract_QA(qlist): |
|
Q_All='' |
|
A_All='' |
|
|
|
for i in range(len(qlist)): |
|
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_{i+1}: {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""" |
|
Answer_{i+1}: {result[0]} |
|
|
|
|
|
""" |
|
Q_All= Q_All+Q |
|
A_All=A_All+ A |
|
|
|
|
|
return (Q_All,A_All) |
|
|
|
|
|
|
|
|
|
|
|
|
|
def extract_text_from_pdf(pdf_file_path): |
|
|
|
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) |
|
|
|
random_number = random.uniform(0, N) |
|
|
|
random_number = int(random_number) |
|
selected_extracted_text= sub_texts[random_number] |
|
|
|
return(selected_extracted_text) |
|
|
|
|
|
def pipeline(NoQs): |
|
global Q,A |
|
text= selected_extracted_text |
|
qlist= qg.generate(text, num_questions=NoQs, answer_style="multiple_choice") |
|
Q,A= Extract_QA(qlist) |
|
A= A + '\n'+text |
|
return (Q,A) |
|
|
|
def ReurnAnswer(): |
|
return A |
|
|
|
def GetQuestion(NoQs): |
|
NoQs=int(NoQs) |
|
pick_One_txt(extracted_text) |
|
Q,A=pipeline(NoQs) |
|
return Q |
|
|
|
with gr.Blocks() as demo: |
|
|
|
with gr.Row(): |
|
|
|
input_file=gr.UploadButton(label='Select a file!', file_types=[".pdf"]) |
|
|
|
|
|
with gr.Row(): |
|
with gr.Column(): |
|
upload_btn = gr.Button(value="Upload the pdf File.") |
|
Gen_Question = gr.Button(value="Show the Question(s)") |
|
Gen_Answer = gr.Button(value="Show the Answer(s)") |
|
No_Qs= gr.Slider(minimum=1, maximum=5,step=1, label='No Questions') |
|
''' |
|
with gr.Accordion("Instruction"): |
|
gr.Markdown("Start by selecting a 'pdf' file using 'Select file' tab." ) |
|
gr.Markdown("Upload the selceted 'pdf' file using 'Upload the pdf file' tab." ) |
|
gr.Markdown("The code will randomly select a block of the text and generate N questions form it each time you push 'Show Question(s)" ) |
|
''' |
|
gr.Markdown(""" **Instruction** |
|
* Start by selecting a 'pdf' file using 'Select file' tab. |
|
* Upload the selceted 'pdf' file using 'Upload the pdf file' tab. |
|
* The code will randomly select a block of the text and generate N questions form it each time you push 'Show Question(s)'. """ ) |
|
|
|
gr.Image("PupQuizAI.png") |
|
|
|
|
|
|
|
with gr.Column(): |
|
file_stat= gr.Textbox(label="File Status") |
|
question = gr.Textbox(label="Question(s)") |
|
Answer = gr.Textbox(label="Answer(s)") |
|
''' |
|
with gr.Accordion("Instruction"): |
|
gr.Markdown("Start by selecting a 'pdf' file using 'Select file' tab." ) |
|
gr.Markdown("Upload the selceted 'pdf' file using 'Upload the pdf file' tab." ) |
|
gr.Markdown("The code will randomly select a block of the text and generate N questions form it each time you push 'Show Question(s)" ) |
|
''' |
|
|
|
upload_btn.click(extract_text_from_pdf, inputs=input_file, outputs=file_stat, api_name="QuestioGenerator") |
|
Gen_Question.click(GetQuestion, inputs=No_Qs, outputs=question, api_name="QuestioGenerator") |
|
Gen_Answer.click(ReurnAnswer, inputs=None, outputs=Answer, api_name="QuestioGenerator") |
|
|
|
|
|
|
|
demo.launch() |