Quizersteller / app.py
BabakBagheriGisour's picture
Update app.py
85421a0 verified
import streamlit as st
from transformers import pipeline
from PyPDF2 import PdfReader
import json
# بارگذاری مدل GPT-Neo
pipe = pipeline("text-generation", model="EleutherAI/gpt-neo-125m")
def extract_text_from_pdf(pdf_file):
"""استخراج متن از فایل PDF."""
reader = PdfReader(pdf_file)
text = ""
for page in reader.pages:
text += page.extract_text()
return text.strip()
def generate_quiz_json(text):
"""تولید JSON بر اساس متن."""
prompt = (
f"Hier ist ein Text:\n\n"
f"{text}\n\n"
"Erstelle basierend auf diesem Text eine Quizfrage. "
"Stelle eine Frage, die mit dem Inhalt des Textes zu tun hat. "
"Verwende das folgende JSON-Format für die Ausgabe, indem du alle Optionen und die richtige Antwort aus dem Text extrahierst:\n\n"
"{\n"
' "text": "<Der Originaltext aus dem Input>",\n'
' "frage": "<Eine Frage, die auf dem Text basiert>",\n'
' "options": ["<Option1>", "<Option2>", "<Option3>", "<Option4>"],\n'
' "antwort": "<Die richtige Antwort aus den Optionen>"\n'
"}\n\n"
"Bitte extrahiere und verwende konkrete Werte aus dem Text, anstatt Platzhalter wie 'TEXT', 'FRAGE', 'OPTION1' usw."
)
# تولید خروجی از مدل
generated_output = pipe(prompt, max_new_tokens=300, num_return_sequences=1)[0]['generated_text']
# تلاش برای پارس کردن JSON تولیدشده
try:
start_index = generated_output.find('{')
end_index = generated_output.rfind('}') + 1
json_string = generated_output[start_index:end_index]
parsed_json = json.loads(json_string)
return parsed_json
except json.JSONDecodeError:
return {"error": "Ungültiges JSON-Format im GPT-Ausgabe."}
def download_json(data, filename="quiz.json"):
"""تبدیل داده‌ها به JSON و ایجاد لینک دانلود."""
json_data = json.dumps(data, ensure_ascii=False, indent=4)
st.download_button(
label="📥 JSON herunterladen",
data=json_data,
file_name=filename,
mime="application/json",
)
# رابط کاربری Streamlit
st.title("Quiz Generator aus PDF")
st.write("Laden Sie eine PDF-Datei hoch, um Quizfragen zu generieren.")
# دکمه آپلود فایل
uploaded_file = st.file_uploader("PDF-Datei hochladen", type="pdf")
if uploaded_file is not None:
# استخراج متن از فایل PDF
with st.spinner("Text wird extrahiert..."):
extracted_text = extract_text_from_pdf(uploaded_file)
# تولید JSON از متن
with st.spinner("Quizfragen werden generiert..."):
quiz_json = generate_quiz_json(extracted_text)
# نمایش JSON تولیدشده
st.write("### Generierter JSON:")
st.json(quiz_json)
# افزودن دکمه دانلود JSON
st.write("### JSON herunterladen:")
download_json(quiz_json)