Soundex, Robert Russell ve Margaret Odell tarafından geliştirilmiş, U.S. Patenti 1,261,167 ve U.S. Patenti 1,435,663 ile patentlenmiştir. Ayrıca American Soundex ismiyle 1930`lu yıllarda 1890/1920 arası analiz için yapılan bir sayımda kullanılmıştır. Soundex kodlaması ise 1960`larda `Communications of the ACM`, `Journal of the ACM of the Association for Computing Machinery` gibi bazı makalelere konu olması sebebiyle ünlenmiş ve özellikle `Donald Knuth`s magnum opus`, `The Art of Computer Programming` yazılarında nasıl bir şey olduğu anlatılmıştır.
Soundex kodu ilki bir harf, diğer üçü ise rakamlardan oluşan dört karakterli bir koddur; harf olarak kelimenin ilk harfi, sayı olarak da geri kalan harflerin belirli bir kurala göre numaralandırılmasıyla ortaya çıkan sonuç alınır. Benzer teleffuzlu sözcükler ise aynı numaralarla kodlanır; örneğin, benzer telaffuzlu B, F, P ve V harfleri 1 ile kodlanır. Sesli harfler kodlama işlemini etkiler, ancak bu sesli harf kelimenin başında bulunmuyorsa ortaya çıkan sonucu asla doğrudan etkilemez.
Tam algoritma aşağıdaki gibidir:
- Karakter katarının ilk harfini yakalayın.
- Eğer ilk harf "a, e, h, i, o, u, w, y" harflerinden herhangi biri değilse, bu harfleri metinden silin.
- Sırasıyla tüm harflere aşağıdaki numaralandırmayı yapın;
- b, f, p, v = 1
- c, g, j, k, q, s, x, z = 2
- d, t = 3
- l = 4
- m, n = 5
- r = 6
- Eğer numaralandırmada aynı numarayı almış iki ya da daha fazla harf yan yanaysa ``(ilk işlemden önce)`` ya da bu harflerin arasında h veya w harfi varsa ``(sadece Amerikan sayımında geçerli)``; aynı olanları atlayın.
- İlk dört karakteri sonuç olarak döndürün; eğer sonuç dört karakterden az çıkıyorsa, dört karakter tamamlanması için sonuna sıfırlar ekleyin. ``(örn. A22 a†’ A220)``
Ulusal Arşiv ve Kayıt Yönetiminin ``(The National Archives and Records Administration - NARA)`` US Hükümeti için koyduğu bu resmi kurallar, hazırlanan standart Soundex algoritmaları için de kullanılmalıdır.
Algoritma kullanılırken; örneğin "Rubin"in kodu R150 iken, "Robert" ve "Rupert" isimleri aynı kodu döndürür; R163.
Farklı Soundex Algoritmaları
Ters ``(reverse)`` Soundex adlı farklı bir algoritmada ise, sayıların önüne getirilen harf en baştaki yerine en sondakidir.The NYSIIS algoritması yine NYSIIS tarafından Soundex algoritmasının geliştirilmiş hali olarak tanıtıldı. NYSIIS çoklu-karakter n-gram`ları desteğiyle gelir ve bilinen Soundex algoritmalarının aksine, sesli harflerin kelimede nerede bulunduğunu dikkate alarak kodlama yapar.
Celko Güçlendirilmeli Soundex algoritması ise Joe Celko tarafından onun "SQL For Smarties: Advanced SQL Programming" adlı kitabında tanıtılmıştır.
Lawrence Philips, aynı amaçla, Soundex algoritmasının eksiklerine bir cevap gibi hazırlanmış `Metaphone` algoritmasını geliştirdi. Philips daha sonra Metaphone algoritmasını biraz daha geliştirerek `Double-Metaphone` adını verdiği bir algoritma daha geliştirdi. Double-Metaphone algoritması, selefinden daha büyük bir kodlama kuralını sistemine ekleyerek Latin alfabesinde bulunmayan karakterleri de desteklemekle birlikte; bu algoritmayı kullananlar arasında İngilizce`deki farklı teleffuzları kullanabilecekler için birincil ``(primary)`` ve ikincil ``(secondary)`` kodlama sonuçlarını döndürmektedir.
Daitch-Mokotoff Soundex (D-M Soundex) algoritması, bir soy izleme uzmanı olan Gary Mokotoff tarafından geliştirildi ve daha sonraları Alman/Slav soyadlarıyla yapılan bazı karşılaştırmalarda ortaya çıkan sorunlar nedeniyle yine bir soy izleme uzmanı olan Randy Daitch tarafından güçlendirildi. Her ne kadar bazı yazarların hevesini kırsa da D-M Soundex algoritmasına bazı kaynaklarda "Yahudi Soundex`i - Jewish Soundex" ya da "Doğu Avrupa Soundex`i - Eastern European Soundex" ile referans verilebilmektedir. D-M Soundex algoritması, tek bir kelime için birbirinden bağımsız 32 sonuç verebilir. D-M Soundex sonuçları 100000 ile 999999 arasında her türlü sayı formatında olabilir.
Örnek Algoritmalar/Kullanım Şekilleri
Aşağıda Perl programlama dili için hazırlanmış bir fonksiyonu görebilirsiniz. Fonksiyon, kendisine verilen keşlimenin Soundex kodunu döndürecektir. ``(Bunun yanında CPAN üzerindeki Text::Soundex modulünü de kullanabilirsiniz.)``sub soundex { # return soundex code
my($useword) = $_[1];
my($result) = "0000";
my($idx,$prev,$perhaps,$thechar);
$useword =~ tr/ //d; # rid spaces
$useword = lc($useword); # lower-case for consistency
if (length($useword) < 1) {
return($result);
}
$result = substr($useword,0,1); # first letter
$prev = "0";
$idx = 1;
while ($idx <= length($useword)) {
$perhaps = "0";
$thechar = substr($useword,$idx - 1,1);
if (index("bfpv", $thechar) >= 0)
if (index("cgjkqsxz",$thechar) >= 0)
if (index("dt", $thechar) >= 0)
if (index("l", $thechar) >= 0)
if (index("mn", $thechar) >= 0)
if (index("r", $thechar) >= 0)
if ($perhaps != $prev && $perhaps != "0"
&& $idx != 1) { # avoid dups and ignore first
$result .= $perhaps;
}
$prev = $perhaps;
$idx++;
} #endwhile
$result .= "0000"; # pad with zeros to ensure min length
$result = substr($result,0,4); # only return first four
return($result);
}
(yazar, Courtesy)
...ve Soundex algoritması için PHP ile gelen bir fonksiyon ``(PHP3`ten beri desteklenmektedir)``
İç bağlantılar
Linkler
- Ekşi Sözlük a†’ http://sozluk.sourtimes.org/show.asp?t=soundex
- http://www.archives.gov/publications/general-info-leaflets/55.html
- Daitch-Mokotoff a†’ http://www.avotaynu.com/soundex.html
- Daitch-Mokotoff a†’ http://www.jewishgen.org/infofiles/soundex.html#DM
- Soundex, Metaphone, ve Double Metaphone a†’ http://jakarta.apache.org/commons codec project
- Anlaşılır klasik Soundex algoritmaları ``(C, JavaScript, Perl ve VB dilleri için)`` a†’ http://www.creativyst.com/Doc/Articles/SoundEx1/SoundEx1.htm
- FireBird üzerinde RDBMS a†’ http://www.fbtalk.net/viewtopic.php?id=182
- Dedupe Projesi a†’ http://dedupe.sourceforge.net
- Genealogy/Soundex a†’ http://genealogy.suite101.com/article.cfm/Soundex
- Ruby üzerinde a†’ http://rubyforge.org/projects/text
- Açık kaynak Java üzerinde a†’ http://mfwallace.googlepages.com/soundex.html
- Python üzerinde a†’ http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/52213
Algoritmalar