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()