""" 🔒 Turkish PII Detector - Inference Script Türkçe PII Tespit Modeli Kullanım Örneği Bu script, turkish-pii-detector modelinin nasıl kullanılacağını gösterir. """ from transformers import AutoTokenizer, AutoModelForTokenClassification from transformers import pipeline import torch def load_pii_detector(model_name: str = "username/turkish-pii-detector"): """ PII tespit modelini yükler Args: model_name: Hugging Face model adı veya yerel yol Returns: NER pipeline """ tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForTokenClassification.from_pretrained(model_name) pii_detector = pipeline( "ner", model=model, tokenizer=tokenizer, aggregation_strategy="simple", device=0 if torch.cuda.is_available() else -1 ) return pii_detector def detect_pii(text: str, detector) -> list: """ Metinde PII tespiti yapar Args: text: Analiz edilecek metin detector: NER pipeline Returns: Tespit edilen PII listesi """ results = detector(text) # Sonuçları düzenle pii_list = [] for entity in results: pii_list.append({ "type": entity["entity_group"], "text": entity["word"], "score": round(entity["score"], 4), "start": entity["start"], "end": entity["end"] }) return pii_list def mask_pii(text: str, pii_list: list) -> str: """ Tespit edilen PII'leri maskeler Args: text: Orijinal metin pii_list: PII listesi Returns: Maskelenmiş metin """ masked_text = text # Sondan başa doğru maskele for pii in sorted(pii_list, key=lambda x: x["start"], reverse=True): mask = f"[{pii['type']}]" masked_text = masked_text[:pii["start"]] + mask + masked_text[pii["end"]:] return masked_text def analyze_document(text: str, detector, confidence_threshold: float = 0.7) -> dict: """ Belge analizi yapar Args: text: Analiz edilecek belge detector: NER pipeline confidence_threshold: Minimum güven eşiği Returns: Analiz sonuçları """ all_pii = detect_pii(text, detector) # Güven eşiğine göre filtrele filtered_pii = [p for p in all_pii if p["score"] >= confidence_threshold] # İstatistikler pii_by_type = {} for pii in filtered_pii: pii_type = pii["type"] if pii_type not in pii_by_type: pii_by_type[pii_type] = [] pii_by_type[pii_type].append(pii["text"]) return { "original_text": text, "masked_text": mask_pii(text, filtered_pii), "pii_found": filtered_pii, "pii_count": len(filtered_pii), "pii_by_type": pii_by_type, "has_pii": len(filtered_pii) > 0, "confidence_threshold": confidence_threshold } # Örnek kullanım if __name__ == "__main__": # Örnek metinler test_texts = [ "Merhaba, ben Ahmet Yılmaz. Bana ahmet.yilmaz@email.com adresinden ulaşabilirsiniz.", "Müşteri TC: 12345678901, telefon: 0532 123 45 67", "IBAN: TR33 0006 1005 1978 6457 8413 26 hesabına havale yapılmıştır.", "Bugün hava çok güzel, parkta yürüyüş yapmak istiyorum.", "Dr. Fatma Demir, İstanbul Üniversitesi'nde görev yapmaktadır." ] print("=" * 60) print("🔒 Türkçe PII Tespit Modeli Demo") print("=" * 60) # NOT: Gerçek kullanımda model adını güncelleyin # detector = load_pii_detector("username/turkish-pii-detector") # Demo için simülasyon print("\n⚠️ Demo modu: Gerçek model yüklenmedi") print(" Gerçek kullanım için model adını güncelleyin\n") for i, text in enumerate(test_texts, 1): print(f"\n📝 Metin {i}:") print(f" {text}") print("-" * 40) # Simüle edilmiş sonuçlar if "Ahmet" in text or "TC:" in text or "IBAN" in text or "Fatma" in text: print(" 🔴 PII tespit edildi!") else: print(" ✅ PII bulunamadı") print("\n" + "=" * 60) print("Demo tamamlandı!") print("=" * 60)