İsim sansürleme

Elimizde bir txt (veya excel farketmez) dosya var ve her satırda bir isim var. (Ad Soyad veya Ad Ad Soyad vs gibi)

Örnek veriyorum dosya şu şekilde:

Barlas Kaftancı
Ufuk Ersoy
Ada Su Tetik
Abdullah Samet Baki

şeklinde uzun bir dosya. Ben şimdi dosyadaki veriyi şu hale getirmek istiyorum.

Ba** Ka**
Uf** Er**
Ad* Su Te**
Ab** Sa** Ba**

Bunu yaptım. Fakat yazdığım kod beni pek tatmin etmedi. Kodum şu şekilde.

with open("dosya/bilisimoyg1.txt","r",encoding="utf8") as d:
    ekle = d.readlines()

kisiler = []
bos = []
for san in ekle:
    bos.clear()
    bol = san.split()
    for ke in bol:
        bos.append(ke[0:2]+"**")
    kisiler.append(" ".join(bos)+'\n')

with open("dosya/oyg1.txt","w",encoding="utf8") as d:
    d.writelines(kisiler)

Soru 1: Bunun daha kısa bir yolu var mı? (excel veya python kullanarak)
Soru 2: Daha temiz bir kod ve algoritmayla yapılabilir mi?
Soru 3: Kişilerin isim uzunluklarına göre * koymak işleri zorlaştırır mı? Veya nasıl yapılır?

Konuyu açtıktan sonra aklıma bu geldi. Denedim oldu. (Soru 3 için)

#!/usr/bin/env python3

sansurle = lambda kelime: kelime[:2] + "**" if len(kelime) > 2 else kelime

with open("dosya.txt", "r") as f:
    isimlistesi = f.readlines()


result = list(
    map(
        lambda isimsoyisim: " ".join(list(map(sansurle, isimsoyisim.split()))) + "\n",
        isimlistesi
    )
)

with open("sonuc.txt", "w") as f:
    f.writelines(result)

Sonuc:

Ba** Ka**
Uf** Er**
Ad** Su Te**
Ab** Sa** Ba**

Tek satir hali:

(resultfile:=open("sonuc.txt", "w")).writelines(list(map(lambda isimsoyisim: " ".join(list(map(lambda kelime: kelime[:2] + "**" if len(kelime) > 2 else kelime, isimsoyisim.split()))) + "\n", (namesfile:=open("dosya.txt")).readlines())))
resultfile.close()
namesfile.close()
1 Beğeni
iout = [" ".join([word[:2] + ("*" * (len(word) - 2)) for word in isim.split()]) for isim in iin]

ama isimleri sansurlemesen de olur. Iki harf zaten tek basina baya bilgi veriyor, uzunluk da eklediginde cok az kisinin ismi belirsiz kalacaktir.

Daha temiz bir kod icin kelime sansurleyen fonksiyona bir isim verebilirsin. Iki tane for loop’tan daha “temiz” bir algoritma olamaz.

Neden?

Excel dosyasini excel’de islemek daha kisa olacaktir. Bunda Python kurup calistirmak lazim, iki ekstra adim.

Bonus: Isimleri “ME∗∗∗∗” seklinde (2+n) sansurleyince yuzde kaci essiz bir ciktiya dusuyor? Kullanim agirliklarini eklersek insanlarin yuzde kaci essiz bir ciktiya dusuyor? Sansuru en yuksek ihtimale gore geri dondurursek insanlarin yuzde kacinin ismini dogru bir sekilde geri cevirmis oluyoruz?

Bonus^2: “ME…” seklinde (2+0) sansurleyince? “M∗∗∗∗∗” (1+n)? “M…” (1+0)?

2 Beğeni