yucelyener adlı üyeden alıntı: mesajı görüntüle
Yapay zeka çıktısı bir deneyin isterseniz.
# -*- coding: utf-8 -*-
import pandas as pd
from groq import Groq
import time
import sys
 
# 🔑 Ayarlarınızı Buraya Girin
# 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'
 
# API İstemcisini Başlat
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)
 
# Kullanılacak Sütun Adını Belirle (Excel dosyanızdaki ilk sütunun adı)
# Eğer özetlenecek içerik "Icerik" adlı sütundaysa, bunu değiştirin.
TARGET_COLUMN = "ICERIK" # Lütfen excel'inizdeki asıl sütun adını yazınız
OUTPUT_COLUMN = f"{TARGET_COLUMN}_OZET"
 
def groq_isle(text, is_ozet=True):
    """Metni özetler veya özgünleştirir (paraphrase). API hız limitini aşmamak için yeniden deneme içerir."""
    
    # Kullanıcı isteğine göre prompt oluşturma
    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 (Paraphrase)
        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
    for attempt in range(max_retries):
        try:
            chat = client.chat.completions.create(
                messages=[{"role": "user", "content": prompt}],
                # Daha yüksek bir model seçimi (daha iyi sonuçlar için)
                model="llama-3.3-70b-versatile",
                temperature=0.7 if not is_ozet else 0.3, # Özgünleştirmede daha yüksek yaratıcılık
                max_tokens=2000 # Çıktı için daha yüksek bir limit
            )
            
            islemlenmis_metin = chat.choices[0].message.content.strip()
            
            # Sonuç kelime veya cümle olmaması durumunda basit bir kontrol
            if len(islemlenmis_metin.split()) < 5:
                raise ValueError("API'den anlamlı bir sonuç gelmedi.")

            # Özetleme yapılıyorsa cümle sonu kontrolü
            if is_ozet and not islemlenmis_metin.endswith(('.', '!', '?')):
                # Son noktayı bul ve sonrasını kes (tam cümle garantisi için)
                son = islemlenmis_metin.rfind('.')
                if son > len(islemlenmis_metin) * 0.75: # Metnin sonuna yakınsa
                    islemlenmis_metin = islemlenmis_metin[:son+1]
                else:
                    islemlenmis_metin += '.' # Nokta ekle
                    
            return islemlenmis_metin
        
        except Exception as e:
            hata_mesaji = str(e)
            print(f"\nAPI HATA ({attempt + 1}. deneme): {hata_mesaji[:100]}...")
            
            # Hız limiti hatası için ekstra bekleme (Çoğu Groq/OpenAI limit hatası için geçerli)
            if "Rate limit" in hata_mesaji or "429" in hata_mesaji:
                wait_time = 10 # 10 saniye bekle
                print(f"Hız limiti hatası! {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 oluştu, {wait_time} saniye sonra tekrar deneniyor...")
                time.sleep(wait_time)
            else:
                # Maksimum deneme sayısına ulaşıldı
                print("Maksimum deneme sayısına ulaşıldı. Orjinal metin kaydediliyor.")
                return f"HATA: {text[:100]}..." # Hata durumunda metnin bir kısmını kaydet
                
    return text[:150] + "..." # Tüm denemeler başarısız olursa
 
# --- Ana İşlem ---
def islem_baslat(is_ozetleme):
    try:
        df = pd.read_excel(excel_file)
    except FileNotFoundError:
        print(f"HATA: Dosya bulunamadı: {excel_file}")
        sys.exit(1)
        
    if TARGET_COLUMN not in df.columns:
        print(f"HATA: '{TARGET_COLUMN}' adlı sütun dosyada bulunamadı. Lütfen sütun adını kontrol edin.")
        # Kullanıcının Excel'deki ilk sütunun adını bulmasına yardımcı olmak için:
        print(f"Dosyanızdaki ilk 5 sütun: {df.columns.tolist()[:5]}")
        sys.exit(1)
        
    print(f"\n🚀 {excel_file} dosyası yüklendi. İşlem Sütunu: **{TARGET_COLUMN}**")
    print(f"Çıktı Sütunu: **{OUTPUT_COLUMN}**")
    print(f"Mod: **{'ÖZETLEME' if is_ozetleme else 'ÖZGÜNLEŞTİRME'}**\n")
 
    # Çıktı sütunu yoksa oluştur
    if OUTPUT_COLUMN not in df.columns:
        df[OUTPUT_COLUMN] = ""
 
    # İşlemi yap
    for i, row in df.iterrows():
        text = str(row[TARGET_COLUMN])
        
        # Daha önce özetlenmiş veya çok kısa metinleri atla
        if df.at[i, OUTPUT_COLUMN] != "" and not str(df.at[i, OUTPUT_COLUMN]).startswith("HATA"):
            print(f"✅ Satır {i+1}: Daha önce işlenmiş. Atlanıyor.")
            continue
            
        # 10 kelimeden az olanları atla
        if len(text.split()) < 10:
            df.at[i, OUTPUT_COLUMN] = "Çok kısa metin."
            continue

        print(f"⏳ Satır {i+1} ({len(text.split())} kelime) işleniyor...", end=" ")
        
        # API işlemini çağır
        df.at[i, OUTPUT_COLUMN] = groq_isle(text, is_ozet=is_ozetleme)
        
        # Her satırdan sonra dosyayı kaydet (İşlemin yarım kalmaması için)
        try:
            df.to_excel(output_file, index=False)
        except Exception as e:
            print(f"\nKAYIT HATA: Dosya kaydedilemedi. Excel'in kapalı olduğundan emin olun. Hata: {e}")
            
        print("✅ Tamamlandı. Bekleniyor...")
        
        # API hız limitlerine takılmamak için her çağrıdan sonra 1 saniye bekle
        time.sleep(1)
 
    print(f"\n🎉 İşlem Tamamlandı. Sonuç dosyası: **{output_file}**")
 
# ➡️ Özetleme veya Özgünleştirme Seçimi
# is_ozetleme = True: ÖZETLEME YAPAR
# is_ozetleme = False: ÖZGÜNLEŞTİRME (PARAPHRASE) YAPAR
islem_baslat(is_ozetleme=True)

# Özgünleştirme yapmak isterseniz yukarıdaki satırı yorum satırı yapın ve aşağıdaki satırı aktif edin.
# islem_baslat(is_ozetleme=False)

bu hatayı verdi hocam