KlavyeMonitor.com    


MENÜ

. ANASAYFA

. KABLOSUZ & TELSİZ

. AVUÇİÇİ & CEP

. LINUX

. WINDOWS

. WEB

. INTERNET

. BİLGİSAYAR

. ANTİK BİLGİ

. ARAMA

. BAĞLANTILAR
. Spam Gönderenler

POPÜLERLER

htmlders

linux kitapları

proxy adresleri kablo

sayisal loto sans topu

elmekyonlen

TDGTW-WarXing

eposta yazim kurallari

BearShare Morpheus ve iMeshi Hizlandirma Yolu

proxy-hiz

komutlar

web hosting hizmetleri

inet-hiz

linux ile windowslari uyutmak

squidle2kat

yedekleme

internet hizi

database oracle mysql sql komutlari

windows mydoom virus

PDA ve cep telefonu icin www sayfasi yapimi


= = =

Favorilere ekle
Google




Okunup Telaffuz Edilebilir Rastgele Sözcük Üreteci PHP Betiği


Bazen programlarımızda rastgele sözcükler üretmemiz gerekir. Bu sözcüklerin kullanılacağı kimi durumlarda ise bu sözcüklerin hiç değilse dil döndürülüp okunabilir olması hiç de fena olmaz. Bu, rastgele bir geçici şifre üretip kullanıcıya ilk ve son kez kullanımı için vermekten tutun da, geçici bir eposta için kullanıcı adı oluşturmaya kadar uzanan bir yelpazede olabilir. İşte, ben de bu sonuncu amaçla yani bir geçici eposta adresi sağlayan bir web email hizmeti kurarken, adreslerde kullanıcı adı olarak kullanmak üzere böyle bir koda ihtiyaç duydum.

Telaffuz-edilebilir derken sözcüğü okurken dilimizin kilitlenmemesini kastediyoruz. Örneğin atcnikytoeugvidztacz gibi bir sözcüğü okumaya çalışın. Amacımız kullanıcıya rastgele kullanıcı adını sunarken insani vazifemizi yapmak ve kullanıcı adını hatırda tutmaya çalışırken akli dengesini kaybetmesine sebep olmamak.

Peki bunu nasıl başarabiliriz. Öncelikle fazla karmaşık olmayan basit bir çözüm arayalım. Daha yazacak çok kodumuz var. Tek bir noktada takılmaya gerek yok. Örneğin Türkçe'nin tüm kurallarını uygulamaya gerek yok. Sonra sadece kullanıcı adı ürettiğimiz için Türkçe'ye özgü "ç ğ ı ö ş ü" harflerine de gerek yok. Bunlara gerek olmayınca, ünlü uyumu için de zaman kaybetmeye gerek yok. Olsa daha güzel olur tabi. Ama gerek yok. Karmaşayı gereksiz yere arttırmayalım. Sonra milyonlarca heceyi veritabanında tutup uygun olanlarını seçen bir algoritma da saçma. İşlemci gücü sınırsız değil. Aynı anda binlerce bağlantı yapan, iş karıştıran sunuculara da iyi davranmalıyız. Benzer mantıkla bir sürü rastgele sözcük üretip aralarından belli sorunlara sahip olanları ayıklamak da kolay ama işlemci harcayan bir yöntem. Bu da olmaz.

 

Basit ve işlemci yormayan bir yöntem olarak bir sesli bir sessiz, ama bazen de biri sert sessiz olmayan iki sessiz harf şeklinde bir dizilimle idare eder bir okunurlukta sözcük harfi dizilimleri elde edebiliriz.

Sözcüğü üretirken rastgele bir uzunluk belirtelim önce. Ben kullanıcı adı olarak kullanacağımdan 8 ile 16 harf arasında olsun istedim. Siz şifre olarak kullanacaksanız 6-8 harf arası yapabilirsiniz mesela. Ve ardından ilk harf sesli mi olsun sessiz mi olsun diye rastgele bir karar verip sözcük uzunluğu boyunca döngüye girdik:

$sozcuk="";  
$uzunluk=rand(8,16);
$ilkharf=rand(0,1);
for ($i=0;$i<$uzunluk;$i++) {
...

Tabii döngü içinde kullanacağımız harfleri gruplarına göre dizilere (array) almayı da unutmamalı. Bunu aşağıdaki örnekte görebilirsiniz. Örnekte yumuşak sessizler için de bir dizi oluşturmama rağmen kullanımını örnekten çıkardım. Bunu, hatta sesli uyumunu ekleyerek kulağa daha hoş gelen sözcükler üretebilirsiniz. Bunlarsız da okunaklı sözcükler çıkıyor fakat daha çok Rusçaya benziyorlar. Sanırım farketmeden Rusçayı icat ettik.

Sözcük üretme döngümüzse basit. Sessiz bir harf üretmeye karar verdiysek üretip sözcüğe ekliyor, ve sonraki sözcüğün sesli mi sessiz mi olacağına karar veriyoruz. Diyoruz ki, eğer son sözcük bir sert sessiz değilse (p ç t k), sözcük uzunluğu 4'ü geçmişse ve son iki harf de sessiz değilse bir sonraki harf sessiz de olabilir. Basit. Bu noktada, bir sonraki harf sessiz olacaksa eğer, yumuşak olsun bari diye bir çentik atabilir deneyecekler... Sesli üretiminde ise yaptığımız, sesli bir rastgele harf seçip sözcüğe eklemek. Ardarda iki sesli harf gelsin istemediğimizden basit tuttuk. Ama gene buraya, üretilen seslinin türüne göre sesli uyumu için sonraki harflere kısıtlama getirebilir isteyenler. Ama zaten "ı ö ü" harflerini kullanmadığımızdan bu örnekte pek de gerekli değil.

Evet, bu okunabilir rastgelelikte sözcük üretici kodumuz şu şekilde. Bunu bir fonksiyon haline getirip canımız çektikçe kullanabiliriz artık:

$sesli=array("a","e","i","o","u");
$sessiz=array("b","c","d","f","g","h","j","k","l","m","n","p","r","s","t","v","y","z");
$sertsessiz=array("p","c","t","k");
$yumusaksessiz=array("f","h","j","l","m","n","r","s","v","y","z");

// sözcük uzunluğu

$sozcuk="";
$uzunluk=rand(8,16);

// ilk harf sesli mi sessiz mi olsun? 0=sessiz, 1=sesli

$ilkharf=rand(0,1);

for ($i=0;$i<$uzunluk;$i++) {

if ( $ilkharf == 0 ) {

// sessiz seçelim. toplam 18 tane var

$sec=rand(0,17);
$harf=$sessiz[$sec];
$sozcuk=$sozcuk.$harf;
$ilkharf=1;

// Eğer sözcük uzunluğu 4'ü geçmişse ve son harf yumuşak sessizse, yeni
// bir sessiz harf alabiliriz. Ama ardarda 3 sessiz gelmemeli.

if ( strlen($sozcuk) > 4 ) {
 if ( strstr($harf,"p") == "" || strstr($harf,"c") || strstr($harf,"t") || strstr($harf,"k") ) {

// sonraki harf sessiz de olabilir
  $ilkharf=1;
   if ( $i < $uzunluk-2 ) {
    $ikionceki=$sozcuk[strlen($sozcuk)-2];
    if ( strstr($ikionceki,"a") ||  strstr($ikionceki,"e") ||  strstr($ikionceki,"i") ||  strstr($ikionceki,"o") ||  strstr($ikionceki,"u") ) {
    $ilkharf=rand(0,1);
    }
   }
  }
  else {

// sert sessiz kullanılmış. sonraki harf sesli olsun.
  $ilkharf=1;
 }
}


} else {

// sesli bir harf alalım. 5 tane var.
$sec=rand(0,4);
$harf=$sesli[$sec];
$sozcuk=$sozcuk.$harf;
$ilkharf=0;

}

}

echo $sozcuk;

Bu sözcüklerden oluşma bir cümle nasıl görünürdü acaba diyenler, örneği okunabilirrast.php adıyla kaydettikten sonra şöyle bir bash script satırını Linux'larında (insanın zamanını ve ömrünü tüketen windows'tan gına getirip Pardus'a, Debian'a vs. geçtiğinizi varsayıyorum) işleterek görebilirler:

i=1;while [ "$i" -lt "10" ]; do php okunabilirrast.php; let i=$i+1;done| tr "\012" " "

 

Sözcük uzunluğunu 3-10 sözcüğe ayarlarsak mesela (cümle gibi görünsün diye), çıkan sonuç şunlara benzeyecek:

vamekze uzonafmi ubizenilay gamiyazo zecak mumadiyuy ehu huhege venofoj inako ulad lore fis gozojnil uropumhoco dubotlili

ejenimsido enajagmi osulonsi alojom vemomrero itoze esopebuy uzuyedomej ezi vijit muhotore zubichopi ilivopezu oruma lodonja luvumi

zumolo rifiruvi egof tadarufez alapemuz lofofzu jololu ebocara utepa umana enufa nuyegazi akoburuy vehaka vovig ivigafjit

 

Nasıl! Yeni bir dil icat etmek hiç de zor değilmiş öyle değil mi? Türkilizcede ısrar edenlere bu yeni dili hararetle tavsiye edebilirsiniz. Ne de olsa Türkiye'de Türkçe'yi düzgün konuşana dudak bükülüyor. Belki bu daha moda olur kim bilir!...

 

İlker Fıçıcılar
22 Eylül 2007


İlgili Benzer Yazılar:


Arama önerileri: php betiği, rastgele kelime üretimi, otomatik şifre oluşturma, dilbilim, linguistics, Türkçe, Turkish, linux ve php, php kod örnekleri,


Kaynak gösterecekler için referans: "Okunup Teleffuz Edilebilir Rastgele Sözcük Üreteci PHP Betiği", İlker Fıçıcılar, http://www.KlavyeMonitor.com/telaffuz_edilebilir_okunabilir_rastgele_sozcuk_ureteci.html , Eylül 2007


 
 
 
   
Bu sayfaları Linux'ta oluşturan programı yazan: İlker Fıçıcılar