ultrapro-tagger / modules /tools_text.py
Hydragee's picture
Upload folder using huggingface_hub
772b344 verified
import os
import re
import random
import gradio as gr
REFINELIST_PATH = "data/text_lists/RafineListesi.txt"
REFINELIST_FILENAME = "RafineListesi.txt"
def clean_and_uniquify_text_simple(text):
"""Metni temizler, alt çizgileri boşluğa çevirir ve etiketleri tekilleştirir."""
if not text: return ""
cleaned = re.sub(r'[\s_]+', ' ', text).strip()
tags = {t.strip() for t in cleaned.split(',') if t.strip()}
return ", ".join(sorted(tags))
def convert_lines_to_comma(text):
"""Satırları virgülle ayrılmış metne çevirir."""
lines = [line.strip() for line in text.split('\n') if line.strip()]
if not lines: return "", gr.update(value="⚠️ Girişte geçerli metin bulunamadı.", visible=True)
return ", ".join(lines), gr.update(value="✅ Satırlar virgüllü metne çevrildi.", visible=True)
def convert_comma_to_lines(text):
"""Virgülle ayrılmış metni satırlara çevirir."""
lines = [line.strip() for line in text.split(',') if line.strip()]
if not lines: return "", gr.update(value="⚠️ Girişte geçerli metin bulunamadı.", visible=True)
return "\n".join(lines), gr.update(value="✅ Virgüllü metin satırlara çevrildi.", visible=True)
def select_and_copy_random_lines(text_input_raw, num_lines_to_copy_slider):
"""Metinden rastgele satırları seçer."""
lines = [line.strip() for line in text_input_raw.split('\n') if line.strip()]
num_lines = int(num_lines_to_copy_slider)
if not lines: return "", gr.update(value="⚠️ Girişte geçerli metin bulunamadı.", visible=True)
if num_lines > len(lines):
return "", gr.update(value=f"⚠️ {len(lines)} satır var, ancak {num_lines} satır istendi. İşlem iptal edildi.", visible=True)
selected = random.sample(lines, num_lines)
return "\n".join(selected), gr.update(value=f"✅ {num_lines} adet rastgele satır seçildi.", visible=True)
def refine_text_by_file(input_text: str):
"""Kullanıcı metnini RafineListesi.txt dosyasındaki anahtar kelimelere göre filtreler."""
if not input_text.strip():
return "", gr.update(value="⚠️ Girişte geçerli metin bulunamadı.", visible=True)
target_path = REFINELIST_PATH
try:
if not os.path.exists(target_path):
os.makedirs(os.path.dirname(target_path), exist_ok=True)
with open(target_path, "w", encoding="utf-8") as f: f.write("")
return input_text, gr.update(value=f"⚠️ Uyarı: '{target_path}' dosyası bulunamadı, boş bir dosya oluşturuldu.", visible=True)
with open(target_path, 'r', encoding='utf-8') as f:
kaldirilacak_kelimeler = [satir.strip().lower() for satir in f if satir.strip()]
if not kaldirilacak_kelimeler:
return input_text, gr.update(value="⚠️ Kaldırılacak kelime listesi boş.", visible=True)
except Exception as e:
return input_text, gr.update(value=f"❌ Dosya okuma hatası: {e}", visible=True)
bolumler = [b.strip() for b in re.split(r'[, \n]+', input_text) if b.strip()]
temiz_bolumler = []
kaldirilan_sayisi = 0
for bolum in bolumler:
bolum_kucuk_harf = bolum.lower()
gecerli_kalacak_mi = True
for kelime in kaldirilacak_kelimeler:
if kelime in bolum_kucuk_harf:
gecerli_kalacak_mi = False; break
if gecerli_kalacak_mi: temiz_bolumler.append(bolum)
else: kaldirilan_sayisi += 1
temiz_bolumler_set = sorted(list(set(temiz_bolumler)))
return ', '.join(temiz_bolumler_set), gr.update(value=f"✅ {len(temiz_bolumler_set)} etiket kaldı, {kaldirilan_sayisi} etiket kaldırıldı.", visible=True)
def append_text_to_wildcard_file(text, filename):
if not text.strip(): return gr.update(value="⚠️ Metin boş.")
folder = "data/wildcards"
os.makedirs(folder, exist_ok=True)
filepath = os.path.join(folder, f"{filename}.txt")
try:
# Mevcut içeriği oku ve duplicate kontrolü yap
existing_lines = set()
if os.path.exists(filepath):
with open(filepath, "r", encoding="utf-8") as f:
existing_lines = {line.strip() for line in f if line.strip()}
new_text = text.strip()
# Eğer bu etiket listesi zaten eklenmişse uyarı ver
if new_text in existing_lines:
return gr.update(value=f"⚠️ Bu etiket listesi '{filename}' paketine zaten eklenmiş!", visible=True)
# Eklenmemişse dosyaya ekle
with open(filepath, "a", encoding="utf-8") as f:
f.write(new_text + "\n")
return gr.update(value=f"✅ '{filename}' paketine eklendi.", visible=True)
except Exception as e: return gr.update(value=f"❌ Hata: {e}", visible=True)