Anujgr8's picture
Update app.py
21378d2 verified
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()