PHP ile kelime saydırma

PHP ile kelime saydırma

Bir metinde bulunan kelimelerin kaç kere kullanıldığını bulmak için php ile bir fonksiyon yazacağız.

Merhaba bugün sizlere PHP ile bir metindeki kelimelerin kaç kere kullanıldığını saydırabileceğiniz bir fonksiyon yazmayı göstereceğim.

 

// Kelimelerin bulunduğu string bir değişken..
$metin = "elma elma elma armut çilek muz elma muz armut portakal";

String bir değişkende kelimeleri nasıl ayırt edebiliriz?
Bunun cevabı aslında basit her kelimeden sonra bırakalın boşluk karakteri bizim işimizi kolaylaştırıyor. Yani boşlukları baz alarak kelimeleri tek tek bir diziye aktarabiliriz. Bunun için fazla uğraşmamıza gerek yok php bize zaten bize kolaylık sunuyor.

// explode ile boşluk karakterlerine göre ayırma işlemi yapıyor.
$kelimeler = explode(' ', $metin);

Kullanılan kelimelerin sayısını nasıl elde ederiz?
Bunun için bir algoritma düşünmemiz lazım. Algoritmalar kişiden kişiye değişebilir bir iş bir kaç farklı şekilde yapılabilir. Benim algoritmam şöyle.

Önce explode ile kelimeleri aktardığımızın değişkendeki ilk kelimeyi alıp aynı değişkendeki diğer kelimelerle karşılaştırır eğer eşitlik durumu oluşursa sayac adındaki değişkenimin sayısını bir artırarak sonuca ulaşabilirim. Şimdi bunu yapalım.

// tüm kelimeleri döngüye sokalım
foreach ($kelimeler as $kelime) {
    // kelimelerin sayısını tutacağımız değişkenimiz
    $sayac = 0;
    // tüm kelimeleri bir biriyle kontrol etmek için tekrar döngüye sokuyoruz.
    foreach ($kelimeler as $kontrol) {
        // ilk döngüdeki kelime ile bu döngüdeki kelimenin eşitlik durumunu kontrol ediyoruz.
        if($kelime === $kontrol){
            // kelimeler eşit ise sayac değişkenimizi bir arttıyoruz.
            $sayac++;
        }
    }
    // işlemlerin sonucunu sonuc adlı bir diziye hangi kelime ve kaç adet kullanıldığını aktarıyoruz.
    $sonuc[] = $kelime." kelimesi ".$sayac." tane var";
}

Kelimelerimizi aktardık ama bir problem ile karşı karşıyayız. İşlerimiz sırasında döngü kullandığımız için her işlem ayrı ayrı eklendi yani 4 tane kullanılan elma kelimesi diziye 4 kere eklenmiş oldu. Şimdi bunun sorunu halledelim.

// php'nin hazır fonksiyonlarından array_unique ile bir dizideki aynı elamanların fazlasını siliyor hepsinden 1 adet bırakıyor.
//Bu bizim sorunumuzu ortan kaldırıyor
$sonuc = array_unique($sonuc);

Sonuçlarımızı diziye aktarmıştık bunları dizi halinden değilde string olarak çevirmek isteyebiliriz bunun için aşağıdaki kodları uygulayabilirsiniz.

// sonuc adlı dizimizi implode ile her elamnının sonuna <br> etiketi ekleyerek dizimizi string olarak kullanabilmemize olanak sağlıyor.
$sonuc = implode("<br>", $sonuc);

Tüm işlemlerimizi yaptık algoritmamızı uyguladık işlemler sırasındaki problemleri çözdük. Şimdi ise bu işlemleri tek bir fonksiyon haline getirelim.

// fonksiyon bir parametre alıyor. Kelimelerin bulundu değişkeni bu parametreye yazıyoruz.
function kelime_say($metin){
    // explode ile boşluk karakterlerine göre ayırma işlemi yapıyor.
    $kelimeler = explode(' ', $metin);

    // tüm kelimeleri döngüye sokalım
    foreach ($kelimeler as $kelime) {
        // kelimelerin sayısını tutacağımız değişkenimiz
        $sayac = 0;
        // tüm kelimeleri bir biriyle kontrol etmek için tekrar döngüye sokuyoruz.
        foreach ($kelimeler as $kontrol) {
            // ilk döngüdeki kelime ile bu döngüdeki kelimenin eşitlik durumunu kontrol ediyoruz.
            if($kelime === $kontrol){
                // kelimeler eşit ise sayac değişkenimizi bir arttıyoruz.
                $sayac++;
            }
        }
        // işlemlerin sonucunu sonuc adlı bir diziye hangi kelime ve kaç adet kullanıldığını aktarıyoruz.
        $sonuc[] = $kelime." kelimesi ".$sayac." tane var";
    }

    // php'nin hazır fonksiyonlarından array_unique ile bir dizideki aynı elamanların fazlasını siliyor hepsinden 1 adet bırakıyor.
    //Bu bizim sorunumuzu ortan kaldırıyor
    $sonuc = array_unique($sonuc);

    // sonuc adlı dizimizi implode ile her elamnının sonuna <br> etiketi ekleyerek dizimizi string olarak kullanabilmemize olanak sağlıyor.
    $sonuc = implode("<br>", $sonuc);

    // geriye sonuc adlı değişkeni gönderiyoruz.
    return $sonuc;
}

Fonksiyonumuz hazır şimdi nasıl kullanacağımıza bakalım.

// Kelimelerin bulunduğu string bir değişken..
$metin = "elma elma elma armut çilek muz elma muz armut portakal";

// En basitinden echo ile direk olarak sonucu ekrana yazdırabiliriz.
echo kelime_say($metin);

Ekran çıktısı:

elma kelimesi 4 tane var

armut kelimesi 2 tane var

çilek kelimesi 1 tane var

muz kelimesi 2 tane var

portakal kelimesi 1 tane var

 

Bu dersin sonuna geldik.
Tüm işlemleri adım adım yaparak dersi biraz uzattım. Bunun yerine direk fonksiyonu verebilirdim ama algoritma mantığını ve kodların ne amaçla kullanıldığını çoğu kişi anlayamayabiliyor. Bu yüzden uzun uzun ve tüm işlemleri açıklayarak yapmaya çalıştım. Yaralı olması dileğiyle.

 

Yorum Yaz

Yorum yazabilmek için üye girişi yapmanız gerekiyor!

Yukarı Git