import gradio as gr import google.generativeai as genai import os import PyPDF2 from docx import Document import markdown from datetime import datetime import tempfile # Gemini API anahtarını ortam değişkeninden al genai.configure(api_key=os.environ["GOOGLE_API_KEY"]) # PDF metni çıkar def extract_text_from_pdf(pdf_file): text = "" try: pdf_reader = PyPDF2.PdfReader(pdf_file) for page in pdf_reader.pages: text += page.extract_text() or "" return text except Exception as e: return f"Hata: PDF okunamadı. {str(e)}" # Gemini ile analiz et def analyze(text, questions): generation_config = { "temperature": 0.2, "top_p": 0.95, "top_k": 64, "max_output_tokens": 8192, } model = genai.GenerativeModel( model_name="gemini-1.5-flash", generation_config=generation_config ) # Özet çıkar summary_prompt = f"Aşağıdaki metni özetle:\n\n{text[:15000]}\n\nÖzet:" summary = model.generate_content(summary_prompt).text # Soruları cevapla qna = [] for question in questions: if question.strip() == "": continue prompt = f"Belge:\n{text[:15000]}\n\nSoru: {question}\nCevap:" answer = model.generate_content(prompt).text qna.append((question, answer)) return summary, qna # Word belgesi oluştur def create_doc(summary, qna): doc = Document() doc.add_heading("PDF Raporu", 0) doc.add_paragraph(f"Oluşturulma Tarihi: {datetime.now().strftime('%d.%m.%Y %H:%M')}") doc.add_heading("Özet", level=1) doc.add_paragraph(summary) doc.add_heading("Soru-Cevap", level=1) for i, (question, answer) in enumerate(qna, 1): doc.add_heading(f"Soru {i}: {question}", level=2) doc.add_paragraph(answer) temp_dir = tempfile.gettempdir() file_path = os.path.join(temp_dir, f"rapor_{datetime.now().strftime('%Y%m%d%H%M%S')}.docx") doc.save(file_path) return file_path # Gradio fonksiyonu def process(pdf_file, questions_text): text = extract_text_from_pdf(pdf_file) if text.startswith("Hata"): return text, None questions = questions_text.strip().split("\n") summary, qna = analyze(text, questions) html_output = f"""
{markdown.markdown(summary)}