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
|