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"""

Özet

{markdown.markdown(summary)}

Soru ve Cevaplar

""" for i, (q, a) in enumerate(qna, 1): html_output += f"Soru {i}: {q}
Cevap: {a}

" doc_path = create_doc(summary, qna) return html_output, doc_path default_questions = """Belgenin ana konusu nedir? Belgedeki önemli bulgular nelerdir? Yazarlar kimlerdir? Belge hangi tarihte yayınlanmıştır?""" # Gradio Arayüzü demo = gr.Interface( fn=process, inputs=[ gr.File(label="PDF Yükle", file_types=[".pdf"]), gr.Textbox(label="Sorular (her satıra bir soru)", value=default_questions, lines=6) ], outputs=[ gr.HTML(label="Cevaplar"), gr.File(label="Word Raporu") ], title="📄 PDF'ten Soru-Cevap ve Word Raporu", description="Gemini API kullanarak PDF içeriğinden sorulara cevap verir ve rapor hazırlar.", allow_flagging="never" ) if __name__ == "__main__": demo.launch(share=True)