İçeriğe atla

Soundex

Soundex, İngilizcedeki keliemelerin teleffuz biçimlerine göre hazırlanmış bir fonetik algoritmadır. Bu algoritmanın hazırlanmasındaki temel amaç; teleffuzları benzeşen kelimelerin bu yolla aynı karakter katarına (string) dönüştürülmeleri ve bu yolla benzer kelimelerin -yazımlarında fark olsa bile- tespit edilmesidir. Bunun yanında Soundex algoritması, fonetik algoritmalardan en bilineni ve en sık kullanılanı olup, bazı çevreler tarafından -yanlış bir şekilde- fonetik algoritma terimiyle aynı anlamda kullanılamaktadır.

Soundex, Robert Russell ve Margaret Odell tarafından geliştirilmiş, U.S. Patenti 1,261,167 11 Şubat 2021 tarihinde Wayback Machine sitesinde arşivlendi. ve U.S. Patenti 1,435,663 11 Şubat 2021 tarihinde Wayback Machine sitesinde arşivlendi. 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:

  1. Karakter katarının ilk harfini yakalayın.
  2. Eğer ilk harf "a, e, h, i, o, u, w, y" harflerinden herhangi biri değilse, bu harfleri metinden silin.
  3. 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
  4. 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.
  5. İ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 → 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ş hâli 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 İngilizcedeki 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 kelimenin Soundex kodunu döndürecektir. (Bunun yanında CPAN üzerindeki Text::Soundex modulünü de kullanabilirsiniz.)

 sub soundex {    # return soundex code
  my($useword) = $_[0];
  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) { $perhaps = "1"; }
    if (index("cgjkqsxz",$thechar) >= 0) { $perhaps = "2"; }
    if (index("dt",      $thechar) >= 0) { $perhaps = "3"; }
    if (index("l",       $thechar) >= 0) { $perhaps = "4"; }
    if (index("mn",      $thechar) >= 0) { $perhaps = "5"; }
    if (index("r",       $thechar) >= 0) { $perhaps = "6"; }
    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);
 }

...ve Soundex algoritması için PHP ile gelen bir fonksiyon 18 Kasım 2008 tarihinde Wayback Machine sitesinde arşivlendi. (PHP3'ten beri desteklenmektedir)

Ayrıca bakınız

  • Metaphone
  • Miracode

Dış bağlantılar

İlgili Araştırma Makaleleri

<span class="mw-page-title-main">BASIC</span> programlamaya yeni başlayanlar için kullanımı kolay anlaşılır bir programlama dili

BASIC 1964'te John George Kemeny ve Thomas Eugene Kurtz tarafından New Hampshire, ABD'de icat edilmiş, günümüzde de çeşitli türevleri kullanılmakta olan yüksek düzey bir programlama dili. Farklı türevleri birçok işletim sisteminin parçası olarak sunulmuştur.

<span class="mw-page-title-main">Unicode</span> endüstri standartı

Unicode Unicode Consortium organizasyonu tarafından geliştirilen ve her karaktere bir sayı değeri karşılığı atayan bir endüstri standardıdır. Sistemin amacı farklı karakter kodlama sistemlerinin birbiriyle tutarlı çalışmasını ve dünyadaki tüm yazım sistemlerinden metinlerin bilgisayar ortamında tek bir standart altında temsil edilebilmesini sağlamaktır. Evrensel Karakter Kümesi (UCS) olarak bilinen ISO/IEC 10646 standardı ise, her iki organizasyonun işbirliği ile aynı sayısal karşılıkları taşımaktadır. Unicode, son sürümü itibarıyla 129 farklı modern ve tarihî yazım sistemine ait 120.000'den fazla karakteri ve emoji gibi çeşitli sembol kümelerini kapsamaktadır.

<span class="mw-page-title-main">Bzip2</span> Sıkıştırma protokolü

bzip2 veya BZ2, Julian Seward tarafından geliştirilmiş özgür yazılım/açık kaynak kodlu yazılım veri sıkıştırma algoritmasıdır. Seward'ın geliştirdiği program 1996 yılında 0.15 sürümü ile kullanıma sunuldu. Veri sıkıştırıcısının istikrarı ve yaygın kullanımı zamanla arttı ve 1.0 sürümü 2000 yılının sonlarında çıktı.

<span class="mw-page-title-main">Birleştirmeli sıralama</span>

Birleşmeli Sıralama, bilgisayar bilimlerinde derecesinde karmaşıklığa sahip bir sıralama algoritmasıdır. Girdi olarak aldığı diziyi en küçük hale gelene kadar ikili gruplara böler ve karşılaştırma yöntemi kullanarak diziyi sıralar.

<span class="mw-page-title-main">Seçmeli sıralama</span>

Seçmeli Sıralama, bilgisayar bilimlerinde kullanılan bir sıralama algoritmasıdır. Karmaşıklığı olduğu için büyük listeler üzerinde kullanıldığında verim sağlamaz ve genel olarak benzeri olan eklemeli sıralamadan daha başarısızdır. Seçmeli sıralama yalın olduğu ve bazı durumlarda daha karmaşık olan algoritmalardan daha iyi sonuç verdiği için tercih edilebilir.

<span class="mw-page-title-main">Hızlı sıralama</span>

Hızlı sıralama, günümüzde yaygın olarak kullanılan bir sıralama algoritmasıdır. Hızlı sıralama algoritması n adet sayıyı, ortalama bir durumda, karmaşıklığıyla, en kötü durumda ise karmaşıklığıyla sıralar. Algoritmanın karmaşıklığı aynı zamanda yapılan karşılaştırma sayısına eşittir.

<span class="mw-page-title-main">Yığın sıralaması</span>

Yığın Sıralaması, bilgisayar bilimlerinde kullanılan karşılaştırmaya dayalı bir sıralama algoritmasıdır. Uygulamada pek çok bilgisayarda hızlı sıralama algoritmasından daha yavaş çalışsa da en kötü durumda O(n log n) çalışma süresi vardır. Yığın sıralaması diziyi yerinde sıralar ancak kararlı bir sıralama algoritması değildir.

Cüce sıralaması, bilgisayar bilimlerinde kullanılan araya sokmalı sıralamaya benzer bir sıralama algoritmasıdır. Ara sokmalı sıralamadan farkı kabarcık sıralaması yönteminde olduğu gibi, bir elemanın sıralanan dizideki yerine birçok yer değiştirme yoluyla gelmesidir. Cüce Sıralaması adı algoritmanın yönteminin mitolojideki Hollanda cücelerinin (gnome) bir dizi çiçek saksısını sıraya diziş biçimine benzemesinden kaynaklanmaktadır.

<span class="mw-page-title-main">Kabarcık sıralaması</span>

Kabarcık Sıralaması, bilgisayar bilimlerinde kullanılan yalın bir sıralama algoritmasıdır. Sıralanacak dizinin üzerinde sürekli ilerlerken her defasında iki öğenin birbiriyle karşılaştırılıp, karşılaştırılan öğelerin yanlış sırada olmaları durumunda yerlerinin değiştirilmesi mantığına dayanır. Algoritma, herhangi bir değişiklik yapılmayıncaya kadar dizinin başına dönerek kendisini yineler. Adına "Kabarcık" sıralaması denmesinin nedeni büyük olan sayıların aynı suyun altındaki bir kabarcık gibi dizinin üstüne doğru ilerlemesidir.

<span class="mw-page-title-main">Kova sıralaması</span>

Kova Sıralaması, sıralanacak bir diziyi parçalara ayırarak sınırlı sayıdaki kovalara atan bir sıralama algoritmasıdır. Ayrışma işleminin ardından her kova kendi içinde ya farklı bir algoritma kullanılarak ya da kova sıralamasını özyinelemeli olarak çağırarak sıralanır.

İplik sıralaması bilgisayar bilimlerinde kullanılan bir sıralama algoritmasıdır. Sıralanacak olan dizinin, sıralanmış alt dizilerinin oluşturularak bu alt dizilerin birleştirilmesi yoluyla sonucun oluşturulması mantığına dayanır. Algoritmanın her bir aşamasında ana dizinin üzerinden geçilir ve bu diziden zaten sıralanmış olan bir dizi eleman çıkarılır. Çıkarılan bu eleman dizileri daha sonra birleştirilir.

Saçma sıralama veya rastgele sıralama, bilgisayar bilimlerinde yalnızca eğitim amaçlı olarak kullanılan verimsiz bir sıralama algoritması. Bir deste oyun kağıdı saçma sıralama algoritmasıyla sıralanmak istendiğinde, destenin sıralı olup olmadığına bakılır, eğer deste sıralı değilse havaya atılarak yere düşen kartlar toplanarak deste yeniden oluşturulur. Bu işlem deste sıralanana kadar sürer.

Dizi eşleme algoritmaları olarak da adlandırılan dizi arama algoritmaları, bir ya da birkaç dizinin (örüntü) daha büyük bir dizi ya da metin içindeki yerinin bulunmasını konu edinen önemli bir dizi algoritması sınıfıdır.

Yunancanın romanizasyonu, genelde Yunan alfabesi ile yazılan Yunanca metinlerin, Latin alfabesi ile temsili veya bunu yapmayı sağlayan bir sistemdir. Yunancanın romanizasyonu için çeşitli yöntemler kullanılmaktadır. Bu yöntemler, kaynak metnin Eski Yunanca mı Modern Yunanca mı olduğuna ve arzu edilen dönüştürmenin transkripsiyon mu transliterasyon mu olduğuna bağlı olarak değişiklik göstermektedir.

Bilgisayar programlamada dinamik iletim, altyordam çağrılarının ilişkin altyordam başlangıç adresine dinamik olarak bağlanmasıdır. Bir diğer deyişle, dinamik iletim program metnindeki bir çağrı ile işletilen altyordamın programın çalışması sırasında birbirine bağlanması durumudur. Geri çağrı ve çokbiçimliliğin realize edilmesinde kullanılan bu bağlama yöntemi, yordamsal programlama dillerinde altyordam göstericileriyle gerçekleştirilirken, nesne yönelimli dillerde kalıtlama ve gerçekleştirme ilişkilerinin kullanılmasıyla otomatikman sağlanır. Altyordamların birinci sınıf dil öğesi olarak ele alındığı fonksiyonel programlama dillerinde ise, aynı işlevsellik altyordamların argüman olarak geçirilmesi ile sağlanabilir.

Alfanümerik, Latin alfabesindeki harfleri ve Arap rakamlarını (0-9) kullanan karakter dizisini tanımlamakta kullanılan bir sıfat. Benzer şekilde bu dizinin üyelerinden her biri de alfanümerik olarak tanımlanır. Geniş tanımıyla noktalama işaretlerini ve bazı diğer özel karakterleri de kapsar.

Ukrayna alfabesi Ukrayna'nın resmî dili olan Ukraynacayı yazmak için kullanılan alfabedir. Kiril alfabesi'nin ulusal varyasyonlarından biridir.

Kriptografide, scrypt, Colin Percival tarafından Tarsnap çevrimiçi yedekleme hizmeti için oluşturulan bir parola tabanlı anahtar türetme fonksiyonudur. Bu algoritma, büyük miktarda bellek gerektirerek büyük ölçekli özel donanım saldırılarını gerçekleştirmeyi pahalı hale getirmek için özel olarak tasarlanmıştır. 2016 yılında, scrypt algoritması IETF tarafından RFC 7914 olarak yayınlandı. Scrypt algoritmasının, ArtForz kullanıcı adına sahip ve gerçek adı bilinmeyen bir programcı tarafından implemente edilmiş, basitleştirilmiş bir sürümü, önce Tenebrix'te ve ardından Fairbrix ve Litecoin olmak üzere bir dizi kripto para birimi tarafından iş kanıtı şeması olarak kullanıldı.

Kriptografide, bir zamanlama saldırısı, saldırganın kriptografik algoritmaları yürütmek için geçen zamanı analiz ederek bir kriptosistemi tehlikeye atmaya çalıştığı yan kanal saldırısıdır. Bir bilgisayardaki her mantıksal işlemin yürütülmesi zaman alır ve zaman girdiye göre değişebilir; her işlem için tam zaman ölçümleriyle, bir saldırgan girdiye geriye doğru çalışabilir.

Uluslararası Menkul Kıymet Kimlik Numarası (ISIN) bir güvenliği benzersiz olarak tanımlamaktadır. Yapısı ISO 6166'da tanımlanmıştır. ISIN kodu, ticaret ve yerleşim sırasında var olan atanmış Ulusal numaranın normalleştirilmesi yoluyla bir güvenliğin tek düze tanımlanmasına hizmet eden 12 karakterli bir alfanümerik koddur.