geceyolcusu2002 adlı üyeden alıntı: mesajı görüntüle

bu hatayı verdi hocam
Bunu dener misiniz?
# -*- coding: utf-8 -*-
import pandas as pd
from groq import Groq
import time
import sys
 
# -------------------------------------------------------------------
# 🔑 AYARLARINIZI BURAYA GİRİN
# -------------------------------------------------------------------
 
# Groq API key (ücretsiz) - console.groq.com adresinden alın
GROQ_API_KEY = "BURAYA_API_KEY_YAPISTIRIN" 
 
# Giriş ve Çıkış Dosya Yolları
excel_file = r'C:\DOSYA YOLU\ozet.xlsx'
output_file = r'C:\DOSYA YOLU\ozet_sonuc.xlsx'
 
# ❗️ ÇOK ÖNEMLİ: Excel dosyanızda özetlenecek metinlerin bulunduğu sütunun
# tam adını buraya yazın (Örn: "Icerik", "Makale", "Haber Metni" vb.)
TARGET_COLUMN = "ICERIK" 
 
# Hangi işlemi yapmak istediğinizi seçin:
# True = ÖZETLEME yap
# False = ÖZGÜNLEŞTİRME (Yeniden Yazma) yap
ISLEM_MODU_OZETLEME = True 
 
# -------------------------------------------------------------------
# API İŞLEM FONKSİYONU (Yeniden Deneme Mekanizmalı)
# -------------------------------------------------------------------
 
try:
    client = Groq(api_key=GROQ_API_KEY)
except Exception as e:
    print(f"HATA: Groq istemcisi başlatılamadı. API anahtarını kontrol edin. Hata: {e}")
    sys.exit(1)
 
OUTPUT_COLUMN = f"{TARGET_COLUMN}_SONUC"
 
def groq_isle(text, is_ozet=True):
    """Metni özetler veya özgünleştirir. API hız limitini aşmamak için yeniden deneme içerir."""
    
    if is_ozet:
        baslik = "Bu Türkçe metni özetle:"
        kurallar = """KURALLAR:
- Maksimum 100 kelime (kesinlikle bu sınırı aşma)
- Tam cümleler, nokta ile bitir
- Önemli tarihleri ve isimleri koru
- Yarım cümle ASLA yazma
- Başlık kullanma."""
        sonuc_etiketi = "Özet:"
    else: # Özgünleştirme
        baslik = "Bu Türkçe metni, içeriğini bozmadan tamamen özgünleştir (paraphrase et):"
        kurallar = """KURALLAR:
- Metnin anlamını KESİNLİKLE koru
- Yeni metin, orijinal metinle kelime bazında aynı olmamalı
- Başlık kullanma."""
        sonuc_etiketi = "Özgünleştirilmiş Metin:"
 
    prompt = f"""{baslik}
 
{kurallar}
 
Metin: {text}
 
{sonuc_etiketi}"""
 
    max_retries = 3 # Bir hata durumunda en fazla 3 kez yeniden dene
    for attempt in range(max_retries):
        try:
            chat = client.chat.completions.create(
                messages=[{"role": "user", "content": prompt}],
                model="llama-3.3-70b-versatile", 
                temperature=0.3 if is_ozet else 0.7,
                max_tokens=2000
            )
            
            islemlenmis_metin = chat.choices[0].message.content.strip()
            
            if len(islemlenmis_metin.split()) < 5:
                raise ValueError("API'den anlamlı bir sonuç gelmedi (çok kısa).")

            return islemlenmis_metin
        
        except Exception as e:
            hata_mesaji = str(e)
            print(f"\n[API HATA] ({attempt + 1}. deneme): {hata_mesaji[:100]}...")
            
            # Hız limiti hatası (Rate limit)
            if "Rate limit" in hata_mesaji or "429" in hata_mesaji:
                wait_time = 10 
                print(f"Hiz limiti hatasi! {wait_time} saniye bekleniyor...")
                time.sleep(wait_time)
            elif attempt < max_retries - 1:
                wait_time = 5 # Diğer hatalar için 5 saniye bekle
                print(f"Hata olustu, {wait_time} saniye sonra tekrar deneniyor...")
                time.sleep(wait_time)
            else:
                print("Maksimum deneme sayisina ulasildi. Orjinal metin kaydediliyor.")
                return f"HATA: {text[:100]}..."
                
    return f"HATA: Tum denemeler basarisiz oldu. {text[:100]}..."
 
# -------------------------------------------------------------------
# ANA İŞLEM (Excel Okuma ve Yazma)
# -------------------------------------------------------------------
def islem_baslat():
    try:
        df = pd.read_excel(excel_file)
    except FileNotFoundError:
        print(f"HATA: Dosya bulunamadi: {excel_file}")
        sys.exit(1)
        
    if TARGET_COLUMN not in df.columns:
        print(f"HATA: '{TARGET_COLUMN}' adlı sütun dosyada bulunamadı.")
        print(f"Lütfen kodun en başındaki 'TARGET_COLUMN' değişkenini düzeltin.")
        print(f"Dosyanızdaki mevcut sütun adları: {df.columns.tolist()}")
        sys.exit(1)
        
    print(f"\n[BASLADI] {excel_file} dosyasi yüklendi.")
    print(f"Islem Sütunu: **{TARGET_COLUMN}**")
    print(f"Cikti Sütunu: **{OUTPUT_COLUMN}**")
    print(f"Mod: **{'OZETLEME' if ISLEM_MODU_OZETLEME else 'OZGUNLESTIRME'}**\n")
 
    if OUTPUT_COLUMN not in df.columns:
        df[OUTPUT_COLUMN] = ""
 
    for i, row in df.iterrows():
        text = str(row[TARGET_COLUMN])
        
        # Daha önce işlenmişse (veya hata değilse) atla
        if pd.isna(df.at[i, OUTPUT_COLUMN]) or df.at[i, OUTPUT_COLUMN] == "":
            pass # Boşsa devam et
        elif not str(df.at[i, OUTPUT_COLUMN]).startswith("HATA"):
            print(f"[ATLANDI] Satir {i+1}: Daha önce işlenmiş.")
            continue
            
        if len(text.split()) < 10:
            print(f"[ATLANDI] Satir {i+1}: Metin çok kısa (10 kelimeden az).")
            df.at[i, OUTPUT_COLUMN] = "Cok kisa metin."
            continue

        print(f"[ISLENIYOR] Satir {i+1} ({len(text.split())} kelime)...", end=" ")
        
        df.at[i, OUTPUT_COLUMN] = groq_isle(text, is_ozet=ISLEM_MODU_OZETLEME)
        
        print("Tamamlandi.")
        
        # Her 5 satırda bir dosyayı kaydet (Sürekli kaydetmek yavaşlatır)
        if (i + 1) % 5 == 0:
            try:
                df.to_excel(output_file, index=False)
                print(f"--- Ara Kayit Yapildi (Satir {i+1}) ---")
            except Exception as e:
                print(f"\n[KAYIT HATA] Dosya kaydedilemedi. Excel'in kapalı olduğundan emin olun. Hata: {e}")
        
        # API hız limitine takılmamak için 1 saniye bekle
        time.sleep(1) 
 
    # Döngü bittikten sonra son kez kaydet
    try:
        df.to_excel(output_file, index=False)
    except Exception as e:
        print(f"\n[KAYIT HATA] Son dosya kaydedilemedi. Excel'in kapalı olduğundan emin olun. Hata: {e}")
        
    print(f"\n[BITTI] Islem Tamamlandi. Sonuç dosyasi: **{output_file}**")
 
# Kodu Çalıştır
islem_baslat()