File size: 4,692 Bytes
b3516be 43a825a 083065b b3516be |
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 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 |
# -*- 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):
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):
# 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(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():
with gr.Column(scale=1):
with gr.Row():
gr.Image("PupQuizAI.png")
gr.Markdown(""" 🐶 **PupQuizAI** is an Artificial-Intelligence tool that streamlines the studying process. Simply input a text pdf that you need to study from. Then, PupQuiz will create 1-5 custom questions for you to study from.
🐶 Be patient! It might take minutes to run!
""" )
input_file=gr.UploadButton(label='Select a file!', file_types=[".pdf"])
input_file.upload(extract_text_from_pdf, input_file)
#upload_btn = gr.Button(value="Upload the pdf File.")
Gen_Question = gr.Button(value="Show Questions")
Gen_Answer = gr.Button(value="Show Answers")
No_Qs= gr.Slider(minimum=1, maximum=5,step=1, label='Max # of Questions')
gr.Markdown(""" 🐶
**Instructions:**
* Start by selecting a 'pdf' text file you want to upload by clicking the "Select file" button. (PupQuiz currently only supports files that can have highlightable text)
* Select the number of questions you want generated from the "# of Questions" selector.
* Click "Show Questions"
* Then, if you want answers to the questions, select "Show Answers" """ )
#gr.Image("PupQuizAI.png")
with gr.Column(scale=2.0):
#file_stat= gr.Textbox(label="File Status")
question = gr.Textbox(label="Question(s)")
Answer = gr.Textbox(label="Answer(s)")
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() |