Spaces:
Sleeping
Sleeping
# -*- 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() |