Spaces:
Sleeping
Sleeping
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) | |