• 05-04-2009, 22:41:20
    #1
    Bir metinde kaç kelime ve her kelimeden kaçar tane olduğunu bulmaya çalışıcaz.

    function ToplamKelime($Metin)
    {
       $Kelimeler = explode(' ', $Metin); // Kelimeleri alıyoruz
       $Toplam = array(); // kelimelerin kaçar adet olduğunu bu dizide tutucaz
       foreach ($Kelimeler as $Kelime)
       {
          if (array_key_exists($Kelime, $Toplam)) // daha önce diziye eklenip eklenmediğini kontrol ediyoruz
          {
             $Toplam[$Kelime] += 1; //eğer eklenmişse 1 arttırıyoruz
          }
          else
             $Toplam[$Kelime] = 1;//eğer eklenmemişse bu o kelimenin ilkidir o yüzden 1 değerini veriyoruz
       }
       foreach ($Toplam as $Kelime => $Adet)
       {
          echo $Kelime,': ',$Adet, '<br />'; // verilerimizi ekrana yazdırıyoruz
       }
       echo '<br />Toplam: ', count($Kelimeler), ' kelime'; //toplam kelime sayısını yazdırıyoruz
    }
    Örnek:
    ToplamKelime('bu bir denemedir ve bu da başka bir denemedir');
    Çıktısı:
    bu: 2
    bir: 2
    denemedir: 2
    ve: 1
    da: 1
    başka: 1
    Toplam: 9 kelime


    Bazı kelimelerin sayılmamasını isteyebiliriz. (ve, bu, gibi). O zaman fonsiyonumuzda bunu gerçekleştirmeye çalışalım.
    Öncelikle sayılmayacak kelimeleri bir argümanla almalıyız;
    function ToplamKelime($Metin, $Sayma)
    $Sayma adlı değişkenle bu işide hallettik sıra asıl işlemlere geldi.


    if (array_key_exists($Kelime, $Toplam))
    {
      $Toplam[$Kelime] += 1;
    }
    else
      $Toplam[$Kelime] = 1;

    Bu kısımda kelime sayma işlemini yapıyorduk.O zaman buraya saymayacağımız kelimeler için bir kontrol eklememiz gerekiyor.

    if (!in_array($Kelime, $Sayma))//kelime, saymamamız gereken kelimeler içinde bulunmuyorsa kelime sayma işlemine devam et
    {
     if (array_key_exists($Kelime, $Toplam))
     {
      $Toplam[$Kelime] += 1;
     }
     else
      $Toplam[$Kelime] = 1;
    }
    fonksiyonumuzun son hali;
    function ToplamKelime($Metin, $Sayma)
    {
       $Kelimeler = explode(' ', $Metin); // Kelimeleri alıyoruz
       $Toplam = array(); // kelimelerin kaçar adet olduğunu bu dizide tutucaz
       foreach ($Kelimeler as $Kelime)
       {
            if (!in_array($Kelime, $Sayma))//kelime, saymamamız gereken kelimeler içinde bulunmuyorsa kelime sayma işlemine devam et
            {
             if (array_key_exists($Kelime, $Toplam)) // daha önce diziye eklenip eklenmediğini kontrol ediyoruz
             {
                $Toplam[$Kelime] += 1; //eğer eklenmişse 1 arttırıyoruz
             }
             else
                $Toplam[$Kelime] = 1;//eğer eklenmemişse bu o kelimenin ilkidir o yüzden 1 değerini veriyoruz
          }
       }
       foreach ($Toplam as $Kelime => $Adet)
       {
          echo $Kelime,': ',$Adet, '<br />'; // verilerimizi ekrana yazdırıyoruz
       }
       echo '<br />Toplam: ', count($Kelimeler), ' kelime'; //toplam kelime sayısını yazdırıyoruz
    }

    hemen fonksiyonumuzu test edelim;
      $Sayilmayacak_Kelimeler = array('bu' ,'bir', 've', 'da');
      ToplamKelime('bu bir denemedir ve bu da başka bir denemedir',
    $Sayilmayacak_Kelimeler);
    [/PHP]

    Çıktısı:
    denemedir: 2
    başka: 1
    Toplam: 9 kelime

    Evet başardık.

    Kullanılan fonksiyonlar:
    explode
    array_key_exists
    count
    in_array
    Ayrıca:
    foreach Döngüsü
    Böyle küçük bir çalışmayı sizlerle paylaşmak istedim.Daha fazlasıyla buluşmak üzere... Herkese iyi çalışmalar.
  • 05-04-2009, 22:56:31
    #2
    Eposta Aktivasyonu Gerekmekte
    Basit, anlaşılır harika çalışma olmuş. Eline sağlık...
  • 06-04-2009, 00:14:35
    #3
    Üyeliği durduruldu
    cümlenin içine noktalama işaretleri olursa kod parçası ne yapar? bunlara yönelikte eklemeler yapilmasi lazim bence

    str_replace( "\n" , " " , $convertStr );
    ereg_replace( "[^A-Za-z0-9[:space:]çÇğĞıİöÖşŞüÜ]" , "" , $convertStr );
    preg_replace( '/\s\s+/' , ' ' , $convertStr );

    gibi gibi

    örnek

    ToplamKelime('bu bir denemedir ve bu da _ anlamadığım ?? birşeyler vardır ^ başka bir denemedir');
  • 06-04-2009, 00:31:08
    #4
    sdemirkeser adlı üyeden alıntı: mesajı görüntüle
    cümlenin içine noktalama işaretleri olursa kod parçası ne yapar?
    örnek
    ToplamKelime('bu bir denemedir ve bu da _ anlamadığım ?? birşeyler vardır ^ başka bir denemedir');
    gibi gibi
    preg replace ile alfabe harfleri disindakiler temizlenir
  • 06-04-2009, 10:24:42
    #5
    Üyeliği durduruldu
    @sdemirkeser :
    bence çok bilmişlik taslama ustad. sen herşeyi görüyorsun da diğerleri mi göremiyor.

    enter'lar, birden cok boşluklar temizlenir ne var onda, burdaki amaç bir yaklaşım tarzı görmek, biraz kod kurcalamak değil mi?

    varsa daha guzel bir fonksiyonun yaz, paylaş...
  • 06-04-2009, 10:47:37
    #6
    Üyeliği durduruldu
    KaleSoft adlı üyeden alıntı: mesajı görüntüle
    @sdemirkeser :
    bence çok bilmişlik taslama ustad. sen herşeyi görüyorsun da diğerleri mi göremiyor.
    enter'lar, birden cok boşluklar temizlenir ne var onda, burdaki amaç bir yaklaşım tarzı görmek, biraz kod kurcalamak değil mi?
    varsa daha guzel bir fonksiyonun yaz, paylaş...
    bilmişlik taslama yada bi art niyetim yok. daha önce ayni uygulamayı yapıp sorunları aşmıştım.
    sonuçta kendi paylaşımımlardaki hatalarıda başkaları görüp düzeltebilir.
    benim kendi yazdigim fonskiyon şöyle birşey
    function wordCount($convertStr){
        $convertStr = str_replace( "\n" , " " , $convertStr );
        $convertStr = ereg_replace( "[^A-Za-z0-9[:space:]çÇğĞıİöÖşŞüÜ]" , "" , $convertStr );
        $convertStr = preg_replace( '/\s\s+/' , ' ' , $convertStr );
        $convertStr = explode (" ",$convertStr);
        for($i=0; $i< count($convertStr); $i++){
            $keyword[ $convertStr[$i] ] = $keyword[ $convertStr[$i] ] + 1;
        }
        arsort($keyword);
        foreach ($keyword as $key => $value){
            $newArray[] = $key;
        }
        return $newArray;
    }
    bunun için yazdigim smarty pluginide şöyle birşey
    modifier.wordcount.php
    <?php
    function smarty_modifier_wordcount( $string , $keyIndex ){
        $data = wordCount( $string );
        return $data[ $keyIndex ];
    }
    ?>
    {$metin|wordcount:0}
    {$metin|wordcount:1}
    {$metin|wordcount:2}
    gibi geçiş sıklıklarına göre cagirilabilir.
    amaç yaklaşım tarzı görmek ise hataları görüp geliştirmek bir yaklaşım tarzı degil mi
  • 06-04-2009, 12:13:14
    #7
    sdemirkeser adlı üyeden alıntı: mesajı görüntüle
    du LaCReMeL atlama hemen amca daha başına gelebilecekleri farketmemiş

    daha kelimelerin arasinda birden fazla boşluk olursa ne yapar bile demedim. Sonra kelime içinde enter, tab gibi karakterlerde olabilir onuda söylemedik daha )
    arkadaşım senin yazdığın mesajlara gözüm çarpıyor da arada bir, hep böyle artistlik havalanma bilge havasındasın. milletin paylaşım isteğini baltalama.

    ha ben artistlik yapmıyorum yanlış kodlamış diyorsan düzgün bir üslupla gelir söylersin hatasını ve ne yapması gerektiğini.

    php yi çok iyi biliyorsan git büyük bi bilişim firmasında falan çalış, forumda ki insanların heveslerini kırma. anlatabildim mi ?
  • 06-04-2009, 12:19:21
    #8
    Üyeliği durduruldu
    ok özür olsun