phpdeki Soundex() fonksiyonunu turkce içinde çalışabilir yaptık.  siz de sistemlerinizde   “bunu mu demek istediniz ?” diyebileceğiniz bir veritabanı hazırlayabilirsiniz bununla. hemen sınıfı veriyorum .

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
<?php
 
  /**
 * @name        D3Soundex | Turkish Soundex
 * @version     1.0.1
 * @author      Tufan Barış YILDIRIM
 * @link        htpp://www.tufyta.com
 * @since       20.10.2009
 * v1.0
 * ======
 * - İlk Soundex Denemem.
 */
 
 class D3Soundex{
 
     const  AEIO    ='AEIİOÖUÜYıü ',
            BPDT    ='BPDT',
            GKH     ='GKĞğH',
            SZ      ='SZŞş',
            CJ      ='CJÇç',
            FV      ='FV',
            LR      ='LR',
            MN      ='MN';
 
      private   $_hassasiyet=50,
                $_ilkharf,
                $_kalan,
                $_deger,
                $_mixdeger,
                $_maxdeger,
                $_metin,
                $_elemanlar,
                $_zip,
                $_sade,
                $_grep;
 
      public function D3Soundex($hassasiyet){
          if($hassasiyet<0 || $hassasiyet>100){
              $this->Hata('Hassasiyet Değeri 0 ile 100 arasında Bir Değer Alabilir.');
          }
          $this->_hassasiyet=$hassasiyet;
          $this->ElemanOlustur();
 
      } 
 
      public function Metin($metin){
            $this->_metin=$metin;
            $this->_ilkharf=$metin[0];
            $this->_kalan=substr($metin,1,strlen($metin));
 
            $this->Sadelestir();
            $this->AdamEt($this->Tart($metin));
            return $this;
      }
 
      private  function Sadelestir(){
            $this->_sade=preg_replace('/.+/i','\1',$this->_metin);
      }
 
      private function Zip($Metin){
          $Metin=preg_replace('/[^'.$this->_grep.']/i','',$Metin);
              return $this->_zip=preg_replace('/['.self::AEIO.']+/i',$this->_elemanlar[self::AEIO],$Metin);
      }
 
      private function Tart($Metin){
             foreach ($this->_elemanlar as $goruntu=>$kilo){
                   $Metin=preg_replace('/['.$goruntu.']+/i',$kilo,$Metin);
             }
             return $Metin;
      }
 
      private function AdamEt($TartilmisMetin){
          $Basamak=min(10,max(4,floor(strlen($this->Zip($Metin))*$this->_hassasiyet/100)));
          $this->_deger=substr($TartilmisMetin,0,$Basamak);
          return strtoupper($this->_ilkharf).$this->_deger;
      }
 
      public function Deger(){
          return $this->_deger;
      }
 
      public function Soundex(){
          return strtoupper($this->_ilkharf).$this->Deger();
      }
 
      private function ElemanOlustur(){
         $this->_elemanlar=array(
             self::AEIO=>'',
             self::BPDT=>5,
             self::SZ=>3,
             self::MN=>4,
             self::GKH=>8,
             self::CJ=>6,
             self::FV=>2,
             self::LR=>7,
             self::MN=>1,
         );
         $this->_grep=str_replace(' ','',implode(' ',array_keys($this->_elemanlar)));
 
      }
 
      private function Hata($hatametni){
          echo '<b>Hata</b> :  '.$hatametni;
      } 
 
 }
 /**
 * Examlpe
 *
 * @var D3Soundex
 */
 $s=new D3Soundex(100);
 $s->Metin('Bunu mu demek istediniz ?');
 echo "Bunu mu demek istediniz ? =>Soundex Degeri : ".$s->Soundex()." Ağırlık : ".$s->Deger()."<br>";
 $s->Metin('Bunu demek mi istediniz ?');
 echo "Bunu demek mi istediniz ?=>Soundex Degeri : ".$s->Soundex()." Ağırlık : ".$s->Deger()."<br>";
?>

6 Responses to “türkçe soundex”

  1. Merhaba, bu yazınızı özenle okudum fakat php bilmediğim için pek de anladığımı söyleyemeyeceğim, sql de yazmaya çalışıcam ben kendimce türkçe soundexi ve yazınızdan ilham alıyorum biraz, acaba yardımcı olabilirmisiniz ? öncelikle sizce neden soundexi türkçeleştirme ihtiyacı duydunuz ? Türkçe karakterleri İngilizce karakterlere translate ederek, soundexin orjinal fonksiyonunu kullanmak neden ihtiyacınızı karşılamadı ? ve yukarda kullandığınız hassasiyet kodlaması ne işimize yarar.. Eğer vaktinizi çalmayacaksa bana yukarda yapmaya çalıştığınızı biraz daha açarak anlatabilirmisiniz ? Teşekkürler.

  2. Merhabalar, açıklama olmadığı için muhtemelen kodları özenle okudunuz teşekkür ederim :)
    Öncelikle neden Türkçe’ye çevirme gereği duyduğumu açıklayayım. Soundex algoritması ses benzerliği üzerine kurulmuş ve kelime bazlı çalışır. Türkçe’de farklı yazılıp aynı okunan kelimeler yoktur. Yani bu algoritma Türkçe için geçersizdir. “did you men”‘den anladığımız da bu değil zaten. Şimdi yazsaydım bu sınıf çok çok farklı olurdu. Belki yanında bir de veritabanı olurdu diyebilirim. Türkçe’de genelde M-N , B-D , Ğ-H gibi karakterler yanlış duyarız, bu da kelime içinde olunca ihtimali minumuma düşüyor. Hassasiyete gelince, Kelime’den çıkarıp bunu cümle bazında da işlemek istemiştim hepsi bu. İlk 4 karakter bizim dilimizdeki “bunu mu demek istediniz” olayına denk değil. Eğer siz buna benzer bir algoritmayı Türkçe’ye uygulamak istiyorsanız şunları önerebilirim. Türkçe’deki yazım hatalarını araştırın, bir projemizde buna yakın bir mekanizmadan elde ettiğimiz sonuca göre en çok klavye hataları yapıyoruz. Enter tuşuna basarken en sona takılan “ü” gibi, yanyana ve ya alt alt basma ihtimali yüksek tuşlar gibi, Algoritmanıza bunları da ekleyerek doğruluk payını arttırabilirsiniz. Teşekkürler.

  3. Öncelikle Cevabınız için teşekkür ederim, öncelikle hassasiyet konusunda, söylemek istediğinizi anlayamadım ben,” bunu mu demek istediniz” olayına nasıl denk olmuyor , biraz açabilirmisiniz bunu ? mesela ben cümle bazında bişeyleri düzeltmek istiyorsam, yine kelime kelime bakıp eşlemektense, bu cümleyi tek bir kelime haline getirip ,işte boşlukları vs atıp mı kontrol etmekten bahsediyoruz, tabi burda 4 karakterli değilde atıyorum 10 karakterli bir kodlamamı oluşur ? bide şöyle bir durum var, bildiğim kadarıyla soundex atıyorum bir kelimeden a252 diye bir kod çıkarıyorsa, ve bir tabloda arıyorsa bu kelimenin soundexini, o tabloda yine soundex kodu a252 olan kelimeyi buluyor dimi ? şimdi eğer biz 4 karakterli değilde 10 karakterli bir kod yaratırsak, eşleştirme ihtimalini düşürmüş olabilriz sanki ?

  4. Şunu demek istedim :) Soundex algoritması kelime baslı çalıştığı için cümleye uygulayamıyorsunuz “Tufan bu blog senin” ile “Tufan Barış yıldırım” ın soundex değeri aynı olur, cünkü ilk 4 ünsüz karakter için geçerlidir. Hassasiyeti arttırınca daha fazla harfe baktığımız için bu cümlenin tamamını o algoritmaya sokmuş olabiliyoruz. İlk yorumumda yazmamışsam düzeltmiş olayım. Bu değişiklikleri yaptıktan sonra adı soundex olmuyor :)

  5. Anladım, Sizi çok rahatsız etmiş gibi oldum fakat, Türkçe karakterler içeren bir kelimedeki türkçe karakterleri İngilizce karakterlere çevirip soundex uygulayınca sanki yapılan türkçe soundexten daha iyi sonuç veriyor kanısına varıyorum, bu kanının tersini ispat edebileceğiniz bir örneğiniz varmı hiç, mesela şunu soundex bulamaz ama türkçe olan bulur tarzında bir söyleminiz. ? Çünkü soundexteki gruplama türkçedeki bir çok olaya uyuyor, hatta mesela adam şarj yazacağına şarz yazsa türkçe olanda bulamaz ama normal soundex bulur bunu.. bu yüzden türkçesini oluşturmamı gerektircek sebepler bulmakta gerçekten zorlanıyorum :/

  6. Est. Anladım sizi, fakat farklı şeylerden bahsedince dediğinize cevap gibi algıladınız. Baştan alayım Türkçe Soundex diye birşey zaten yok. O kodlar yazılırken belki de bir projedeki kullanım amacına göre yazıldı ve iyi sonuclar verdi. Çünkü Türkçe’de okunuş ile yazılışı birbirinden farklı olan hiç kelime yok, çok zorlarsak “bayağı” kelimesini “bayaa” diye okuruz ki bunu da Soundex “ğ” harfi olmadığı için bulur :) Ama sizin iyi sonuc veriyor dediğiniz örnekler birkaç karakter değiştirmekten ibaretse tabi ki gerek yok türkçesini yazmaya. SOUNDEX

Leave a Reply

(required)

(required)


six × = 12

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

© 2012 Tufan Suffusion theme by Sayontan Sinha