| import os |
| import fitz |
| import google.generativeai as genai |
| from functools import lru_cache |
| from typing import Optional, List |
|
|
| API_KEY = "YOUR GEMINI API KEY" |
| genai.configure(api_key=API_KEY) |
|
|
|
|
| try: |
| model = genai.GenerativeModel('gemini-2.0-flash') |
| except Exception as e: |
| print(f"Model başlatılamadı: {e}") |
| exit() |
|
|
| @lru_cache(maxsize=10) |
| def extract_text_from_pdf(pdf_path: str) -> Optional[str]: |
| if not os.path.exists(pdf_path): |
| return None |
| try: |
| doc = fitz.open(pdf_path) |
| text = "\n".join(page.get_text("text") for page in doc) |
| return text.strip() if text else None |
| except Exception as e: |
| print(f"PDF işlenirken hata oluştu: {e}") |
| return None |
|
|
| def extract_text_from_multiple_pdfs(pdf_paths: List[str]) -> Optional[str]: |
| texts = [] |
| for path in pdf_paths: |
| text = extract_text_from_pdf(path) |
| if text: |
| texts.append(text) |
| return "\n".join(texts) if texts else None |
|
|
| def build_prompt(context: str, request: str) -> str: |
| req_lower = request.lower() |
| if "özetle" in req_lower: |
| return f"Metni kısaca özetle:\n\n{context}" |
| elif "çevir" in req_lower: |
| return f"Metni İngilizce'ye çevir:\n\n{context}" |
| else: |
| return f"Bağlam: {context}\n\nKullanıcı: {request}\n\nLütfen uygun yanıtı oluştur." |
|
|
| def process_request(context: str, request: str) -> str: |
| prompt = build_prompt(context, request) |
| try: |
| response = model.generate_content(prompt) |
| return response.text.strip() |
| except Exception as e: |
| return f"Model hata: {e}" |
|
|
| def main(): |
| print("NotebookLM-ZaynAI") |
| |
| while True: |
| pdf_input = input("PDF dosyasının yolunu girin: ").strip() |
| if not pdf_input: |
| print("Lütfen geçerli dosya yolu girin.") |
| continue |
| |
| pdf_paths = [path.strip() for path in pdf_input.split(",")] |
| context = extract_text_from_multiple_pdfs(pdf_paths) |
| if context: |
| break |
| print("PDF dosyalarından metin çıkarılamadı, lütfen dosya yollarını kontrol edin.") |
| |
| print("Çık yazarak ZaynAI'dan çıkabilirsiniz.") |
| |
| while True: |
| user_request = input("Soru/Talimat: ").strip() |
| if user_request.lower() == "çık": |
| print("Çıkılıyor...") |
| break |
| if not user_request: |
| continue |
| |
| answer = process_request(context, user_request) |
| print("\nYanıt:") |
| print(answer) |
| print() |
|
|
| if __name__ == "__main__": |
| main() |
|
|