Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import PyPDF2 | |
| import os | |
| import subprocess | |
| import tempfile | |
| import google.generativeai as genai | |
| from nltk.corpus import stopwords | |
| from nltk.tokenize import word_tokenize, sent_tokenize | |
| import nltk | |
| nltk.download('stopwords') | |
| nltk.download('punkt') | |
| def summarize_text(text): | |
| # Tokenizing the text | |
| stopWords = set(stopwords.words("english")) | |
| words = word_tokenize(text) | |
| # Creating a frequency table to keep the score of each word | |
| freqTable = dict() | |
| for word in words: | |
| word = word.lower() | |
| if word in stopWords: | |
| continue | |
| if word in freqTable: | |
| freqTable[word] += 1 | |
| else: | |
| freqTable[word] = 1 | |
| # Creating a dictionary to keep the score of each sentence | |
| sentences = sent_tokenize(text) | |
| sentenceValue = dict() | |
| for sentence in sentences: | |
| for word, freq in freqTable.items(): | |
| if word in sentence.lower(): | |
| if sentence in sentenceValue: | |
| sentenceValue[sentence] += freq | |
| else: | |
| sentenceValue[sentence] = freq | |
| sumValues = 0 | |
| for sentence in sentenceValue: | |
| sumValues += sentenceValue[sentence] | |
| # Average value of a sentence from the original text | |
| average = int(sumValues / len(sentenceValue)) | |
| # Storing sentences into our summary. | |
| summary = '' | |
| for sentence in sentences: | |
| if (sentence in sentenceValue) and (sentenceValue[sentence] > (1.2 * average)): | |
| summary += " " + sentence | |
| return summary | |
| def Notes_data(API,prompt): | |
| genai.configure(api_key=API) | |
| model = genai.GenerativeModel('gemini-pro') | |
| response = model.generate_content(prompt) | |
| return response.text | |
| def markdown_to_pdf(markdown_content): | |
| # Create a temporary file to store the markdown content | |
| with tempfile.NamedTemporaryFile(mode="w", delete=False, suffix=".md", encoding="utf-8") as temp_md_file: | |
| temp_md_file.write(markdown_content) | |
| temp_md_filename = temp_md_file.name | |
| # Define output PDF filename | |
| output_pdf_filename = tempfile.NamedTemporaryFile(suffix=".pdf", delete=False).name | |
| # Execute mdpdf command | |
| command = f"mdpdf -o {str(output_pdf_filename)} {str(temp_md_filename)}" | |
| subprocess.run(command, shell=True) | |
| # Delete temporary markdown file | |
| os.remove(temp_md_filename) | |
| return output_pdf_filename | |
| # Authenticate using the API key | |
| # Set the API key as an environment variable | |
| def extract_text_from_pdf(pdf_file): | |
| text = "" | |
| with open(pdf_file, "rb") as file: | |
| pdf_reader = PyPDF2.PdfReader(file) | |
| for page_num in range(len(pdf_reader.pages)): | |
| page = pdf_reader.pages[page_num] | |
| text += page.extract_text() | |
| return text | |
| def get_prompt(text,subject,topic): | |
| prompt = f""" | |
| you are given a {subject} topic | |
| {text} | |
| Create the well Structured detailed Notes as a html code in the following templat. Consider the following points while creating the template. | |
| 1. Introduction part must have minimum 500 words | |
| 2. In the notes part please describe each topic in detail with word count 1000 | |
| 3. Key points part must have minimum 250 words. | |
| 4. The notes should be on topic. | |
| <!DOCTYPE html> | |
| <html> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <title>Chapter Study Material </title> | |
| </head> | |
| <body> | |
| <h1>Study Material</h1> | |
| <h3>1. Introduction</h3> | |
| <p> | |
| <!-- Replace with your introduction content--> | |
| </p> | |
| <h3>2.Important Topics in detail from the chapter. </h3> | |
| <!--DEcribe the Imortant topics don't forget the quations formulas and other things replated to the topic.Describe and elaborate each of the topic and formula and equation--> | |
| <h4><!-- Heading of topic 1>r</h4> | |
| <p> | |
| <!--Desribe the topice in 100 words and bullet out the subtopic and describe if any--> | |
| <!-- Euations and formulas if any--> | |
| </P> | |
| <h4><!-- Heading of topic 2>r</h4> | |
| <p> | |
| <!--Desribe the topice in 100 words bullet out the subtopic and describe if any--> | |
| <!-- Euations and formulas if any--> | |
| </P> | |
| <h4><!-- Heading of topic 3>r</h4> | |
| <p> | |
| <!--Desribe the topice in 100 words bullet out the subtopic and describe if any--> | |
| <!-- Euations and formulas if any--> | |
| </P> | |
| <!-- Like wise add all possible topics from the chapter--> | |
| <h3> Key Points from the chapter </h3> | |
| <p> <!--Replace with your key points content in bulletpoints--> | |
| </body> | |
| </html> | |
| """ | |
| prompt2 = f""" | |
| Create detailed study material from the given given Chapter from a book by considering the following points in mind | |
| 1.Ensure a thorough understanding of the chapter's main ideas and themes. | |
| 2.Identify and emphasise essential concepts and arguments. | |
| 3.Create a well-organised outline reflecting the chapter's structure. | |
| 4.Provide concise, to-the-point summaries for each section. | |
| 5.Define and clarify key terms and concepts introduced in the chapter. | |
| 6.Pose engaging questions for self-assessment and discussion. | |
| 7.Ensure accurate citations for quotes and references. | |
| 8.use given text only for reference you can add as much as detail you can. | |
| 9.The response should be complete. | |
| 10.Generate response as a html page with all type of formatting. | |
| 11.Each point you take in the study material please describe it in detail. | |
| Use the following HTML template to structure your notes: | |
| <!DOCTYPE html> | |
| <html> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <title>Chapter Study Material</title> | |
| </head> | |
| <body> | |
| <h1>Chapter Study Material</h1> | |
| <h3>1. Introduction</h3> | |
| <p> | |
| <!-- Replace with your introduction content --> | |
| </p> | |
| <h3>2. Describe important Points in detail from the chapter</h3> | |
| <h4><!-- Heading of topic 1>r</h4> | |
| <p> | |
| <!--Desribe the topice in detail and elaborate it and bullet out the subtopic and describe if any--> | |
| </P> | |
| <h4><!-- Heading of topic 2>r</h4> | |
| <p> | |
| <!--Desribe the topice in detail and elaborate bullet out the subtopic and describe if any--> | |
| </P> | |
| <h4><!-- Heading of topic 3>r</h4> | |
| <p> | |
| <!--Desribe the topice 3 in detail and elaborate--> | |
| </P> | |
| <!-- Like wise add all possible topics from the chapter--> | |
| <h3>3. Summary</h3> | |
| <p> | |
| <!-- Replace with your summary content --> | |
| </p> | |
| <!-- Additional content can be added as needed --> | |
| </body> | |
| </html> | |
| Chapter Context: | |
| {text}""" | |
| prompt3 = f""" | |
| Create detailed study material from the given given topic from a book chapter by considering the following points in mind | |
| 1.Notes will be based on topic specific. | |
| 2.Ensure that explanations are clear and concise, using simple language to make complex concepts understandable. | |
| 3.Highlight key concepts, theories, and important formulas related to each topic in detail. | |
| 4.For mathematical components like physics and chemistry, provide step-by-step solutions for numerical problems. | |
| 5.The notes should be in detail cover all the concepts related to the topic. | |
| 6.use given text only for reference you can add as much as detail you can. | |
| 7.The response should be complete. | |
| 8.Ignore unneccessory informstion in the context. | |
| 9.Generate response as a valid 'mardown formate' page with all type of formatting. | |
| Topics: {topic} | |
| Chapter Reference:- | |
| {text}""" | |
| return prompt2 if subject=="English" else prompt3 | |
| def pdf_generator(API,class_name, subject,chapter,query=None): | |
| # Create a list to store the generated PDF file paths | |
| pdf_file_path = f"Books/{class_name}/{subject}/{chapter}.pdf" | |
| pdf_text = summarize_text(extract_text_from_pdf(pdf_file_path)) | |
| study_material = generate_study_material(API,pdf_text,subject,query) | |
| study_material = markdown_to_pdf(study_material) | |
| return study_material | |
| def generate_study_material(API,pdf_text,subject,topic): | |
| response = Notes_data(API,get_prompt(pdf_text,subject,topic)) | |
| return response | |
| # Define Gradio input and output components | |
| input_components = [ | |
| gr.Textbox(label="Enter your Gemini API"), | |
| gr.Dropdown(["Class 10", "Class 11", "Class 12"], label="Select Class"), | |
| gr.Dropdown(["Math", "Science", "English","Chemistry"], label="Select Subject"), | |
| gr.Dropdown(["Chapter 1", "Chapter 2", "Chapter 3"], label="Select Chapters"), | |
| gr.Textbox(label="Write the topics name saperated by ','") | |
| ] | |
| output_component = gr.File(label="Notes") | |
| # Create the Gradio interface | |
| iface = gr.Interface( | |
| fn=pdf_generator, | |
| inputs=input_components, | |
| outputs=output_component, | |
| title="PDF Generator", | |
| description="Generate PDFs based on class, subject, and chapter selection.", | |
| ) | |
| # Launch the Gradio app | |
| iface.launch() | |