Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| from transformers import pipeline | |
| from PyPDF2 import PdfReader | |
| # Load a generative model for human-like answers | |
| question_answer_pipeline = pipeline("text2text-generation", model="google/flan-t5-large") | |
| # Function to extract text from a PDF | |
| def extract_text_from_pdf(pdf_file_path): | |
| try: | |
| reader = PdfReader(pdf_file_path) | |
| text = "" | |
| for page in reader.pages: | |
| page_text = page.extract_text() | |
| if page_text: # Check if text is extracted | |
| text += page_text | |
| return text.strip() | |
| except Exception as e: | |
| return f"Error extracting text from PDF: {e}" | |
| # Function to process the context and generate a human-like answer | |
| def get_humanlike_answer(pdf_path, text_input, question): | |
| if pdf_path: # If a PDF is uploaded | |
| context = extract_text_from_pdf(pdf_path) | |
| if context.startswith("Error"): | |
| return context # Return the error message if extraction failed | |
| elif text_input.strip(): # If text is pasted | |
| context = text_input | |
| else: | |
| return "Please upload a PDF or paste text for context." | |
| # Generate a conversational answer | |
| prompt = f"Context: {context}\nQuestion: {question}\nAnswer conversationally:" | |
| try: | |
| response = question_answer_pipeline(prompt, max_length=150, num_return_sequences=1) | |
| return response[0]["generated_text"] if "generated_text" in response[0] else "Error: Could not generate an answer." | |
| except Exception as e: | |
| return f"Error generating answer: {e}" | |
| # Gradio Interface | |
| demo = gr.Interface( | |
| fn=get_humanlike_answer, | |
| inputs=[ | |
| gr.File(label="Upload PDF (optional)", type="filepath"), | |
| gr.Textbox(label="Paste Text (optional)", lines=10), | |
| gr.Textbox(label="Ask a Question", lines=1), | |
| ], | |
| outputs=gr.Textbox(label="Answer", lines=4), | |
| title="PDF/Text Question Answering System", | |
| description="Upload a PDF or paste text and ask questions. Get human-like answers! If both are provided, the PDF will be used." | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch() | |