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)