File size: 3,545 Bytes
8c07c55 |
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 |
# -*- 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() |