# https://elrmnd-vocal-pdf-summarizer.hf.space # Import libraries import gradio as gr import PyPDF2 import torch from transformers import pipeline import scipy import numpy from gtts import gTTS from io import BytesIO from transformers import AutoTokenizer, AutoModelForSeq2SeqLM # Function to extract text from PDF # Defines a function to extract raw text from a PDF file def extract_text(pdf_file): pdfReader = PyPDF2.PdfReader(pdf_file) pageObj = pdfReader.pages[0] return pageObj.extract_text() # Function to summarize text # Defines a function to summarize the extracted text using facebook/bart-large-cnn def summarize_text(text): sentences = text.split(". ") for i, sentence in enumerate(sentences): if "Abstract" in sentence: start = i + 1 end = start + 6 break abstract = ". ".join(sentences[start:end+1]) # Load BART model & tokenizer tokenizer = AutoTokenizer.from_pretrained("pszemraj/led-base-book-summary") model = AutoModelForSeq2SeqLM.from_pretrained("pszemraj/led-base-book-summary") # Tokenize abstract inputs = tokenizer(abstract, max_length=1024, return_tensors="pt", truncation=True) # Generate summary summary_ids = model.generate(inputs['input_ids'], max_length=50, min_length=30, no_repeat_ngram_size=3, encoder_no_repeat_ngram_size=3, repetition_penalty=3.5, num_beams=4, do_sample=True, early_stopping=False) summary = tokenizer.decode(summary_ids[0], skip_special_tokens=True) if '.' in summary: index = summary.rindex('.') if index != -1: summary = summary[:index+1] return summary # Function to convert text to audio # Defines a function to convert text to an audio file using Google Text-to-Speech def text_to_audio(text): tts = gTTS(text, lang='en') buffer = BytesIO() tts.write_to_fp(buffer) buffer.seek(0) return buffer.read() ### Main function ### The main function that ties everything together: ### extracts text, summarizes, and converts to audio. def audio_pdf(pdf_file): text = extract_text(pdf_file) summary = summarize_text(text) audio = text_to_audio(summary) return summary, audio # Define Gradio interface # Gradio web interface with a file input, text output to display the summary # and audio output to play the audio file. # Launches the interface inputs = gr.File() summary_text = gr.Text() audio_summary = gr.Audio() iface = gr.Interface( fn=audio_pdf, inputs=inputs, outputs=[summary_text,audio_summary], title="The Vocal PDF Summarizer", description="I will summarize your pdf and transform it in to an audio", examples=["Article 11 Hidden Technical Debt in Machine Learning Systems.pdf", "Article 6 BloombergGPT_ A Large Language Model for Finance.pdf", "Article 5 A Comprehensive Survey on Applications of Transformers for Deep Learning Tasks.pdf", "Article 8 Llama 2_ Open Foundation and Fine-Tuned Chat Models.pdf" ] ) iface.launch() # Launch the interface