Soundex - Soundex

Soundex bir fonetik algoritma için indeksleme sese göre isimler telaffuz edildi İngilizce. Amaç için sesteş sözcükler olmak kodlanmış aynı temsile, böylece küçük farklılıklara rağmen eşleştirilebilirler. yazım.[1] Algoritma esas olarak ünsüzleri kodlar; bir sesli harf ilk harf olmadığı sürece kodlanmayacaktır. Soundex en çok bilinenidir fonetik algoritmalar (kısmen, çünkü bu, popüler veritabanı yazılımının standart bir özelliğidir. DB2, PostgreSQL,[2] MySQL,[3] SQLite,[4] Ingres, MS SQL Sunucusu[5] ve Oracle.[6]) Soundex'teki iyileştirmeler, birçok modern fonetik algoritmanın temelini oluşturur.[7]

Tarih

Soundex, Robert C. Russell ve Margaret King Odell tarafından geliştirilmiştir.[8] ve patentli 1918'de[9] ve 1922.[10] 1930'larda American Soundex adlı varyasyon, geriye dönük bir analiz için kullanıldı. ABD nüfus sayımları 1890'dan 1920'ye kadar. Soundex kodu, 1960'larda, dergide birkaç makaleye konu olduğunda öne çıktı. İletişim ve Bilgisayar Makineleri Derneği Dergisi ve özellikle de anlatıldığında Donald Knuth's Bilgisayar Programlama Sanatı.[11]

Ulusal Arşivler ve Kayıtlar İdaresi (NARA), ABD hükümeti tarafından kullanılan Soundex'in resmi uygulaması için belirlenen mevcut kuralı korumaktadır.[1] Bu kodlama kuralları, talep üzerine, Genel Bilgi Broşürü 55 "Census Soundex Kullanımı" şeklinde NARA'dan temin edilebilir.

Amerikan Soundex

Bir adın Soundex kodu aşağıdakilerden oluşur: mektup ardından üç sayısal rakamlar: harf ismin ilk harfidir ve rakamlar kalanını kodlar ünsüzler. Benzer bir ünsüzler eklem yeri aynı rakamı paylaşın, örneğin, dudak ünsüzleri B, F, P ve V'nin her biri 1 numara olarak kodlanmıştır.

Doğru değer şu şekilde bulunabilir:

  1. Adın ilk harfini koruyun ve a, e, i, o, u, y, h, w'nin diğer tüm geçtiği yerleri bırakın.
  2. Ünsüzleri aşağıdaki gibi rakamlarla değiştirin (ilk harften sonra):
    • b, f, p, v → 1
    • c, g, j, k, q, s, x, z → 2
    • g, t → 3
    • l → 4
    • m, n → 5
    • r → 6
  3. Orijinal adda aynı numaraya sahip iki veya daha fazla harf bitişikse (1. adımdan önce), yalnızca ilk harfi koruyun; aynı sayıya sahip 'h' veya 'w' ile ayrılmış iki harf tek bir sayı olarak kodlanırken, sesli harfle ayrılan bu tür harfler iki kez kodlanır. Bu kural aynı zamanda ilk harf için de geçerlidir.
  4. Sözcüğünüzde üç rakam atayamayacağınız kadar az harf varsa, üç rakam olana kadar sonuna sıfır ekleyin. Dört veya daha fazla numaranız varsa, yalnızca ilk üçünü saklayın.

Bu algoritmayı kullanarak, hem "Robert" hem de "Rupert" aynı "R163" dizesini döndürürken "Rubin", "R150" sonucunu verir. "Ashcraft" ve "Ashcroft", "A261" sonucunu verir. "Tymczak", "T520" değil "T522" sonucunu verir (isimdeki 'z' ve 'k' karakterleri, aralarında bir sesli harf bulunduğu için iki kez 2 olarak kodlanmıştır). "Pfister", "P123" değil "P236" sonucunu verir (ilk iki harf aynı numaraya sahiptir ve bir kez "P" olarak kodlanır) ve "Honeyman", "H555" verir.

Aşağıdaki algoritmayı çoğu SQL dili izlemektedir (PostgreSQL hariç)[örnek gerekli ]):

  1. İlk harfi kaydedin. A, e, i, o, u, y, h, w'nin tüm oluşumlarını eşleyin. sıfıra (0)
  2. Tüm ünsüzleri (ilk harfi dahil) yukarıdaki [2.] 'de olduğu gibi rakamlarla değiştirin.
  3. Tüm bitişik aynı rakamları bir rakamla değiştirin ve ardından tüm sıfır (0) rakamları kaldırın
  4. Kaydedilen harfin rakamı ortaya çıkan ilk rakamla aynıysa, rakamı kaldırın (harfi saklayın).
  5. Sonuç 3 rakamdan azsa 3 sıfır ekleyin. İlk harf ve ondan sonraki 3 rakam hariç tümünü kaldırın (Bu adım, yukarıdaki açıklamadaki [4.] ile aynıdır).

Yukarıdaki iki algoritma, öncelikle sesli harflerin kaldırıldığı zaman arasındaki fark nedeniyle her durumda aynı sonuçları döndürmez. İlk algoritma çoğu programlama dili tarafından kullanılır ve ikincisi SQL tarafından kullanılır. Örnek olarak, hem "Robert" hem de "Rupert", "R163" verirken "Tymczak", "T520" ve "Honeyman", "H555" verir. SQL ve bir programlama dilini birleştiren bir uygulama tasarlarken mimar, tüm Soundex kodlamasını SQL sunucusunda mı yoksa tümünü programlama dilinde mi yapacağına karar vermelidir. MySQL uygulaması 4 karakterden fazlasını döndürebilir.[12][13]

Varyantlar

"Reverse Soundex" adı verilen benzer bir algoritma, adın ilk harfi yerine son harfinin önüne ekleniyor.

New York Eyaleti Kimlik ve İstihbarat Sistemi (NYSIIS) algoritması, 1970 yılında Soundex algoritmasına bir iyileştirme olarak tanıtıldı. NYSIIS, bazı çok karakterli n-gram ve göreli sesli harf konumlandırmasını sürdürürken, Soundex yapmaz.

Daitch – Mokotoff Soundex (D – M Soundex) 1985'te şecere uzmanı Gary Mokotoff tarafından geliştirildi ve daha sonra Russell Soundex'i Germen veya Slav soyadlarına sahip Yahudilere (Moskowitz vs. Moskovitz veya Levine vs) uygularken karşılaştıkları sorunlar nedeniyle şecere uzmanı Randy Daitch tarafından geliştirildi. Lewin). D – M Soundex bazen "Jewish Soundex" veya "Eastern European Soundex" olarak anılır,[14] yazarlar bu isimlerin kullanılmasını caydırsa da. D – M Soundex algoritması, tek bir ad için 32 adede kadar ayrı fonetik kodlama döndürebilir. D-M Soundex'in sonuçları, 100000 ile 999999 arasında tümüyle sayısal bir formatta döndürülür. Bu algoritma Russell Soundex'ten çok daha karmaşıktır.

Soundex algoritmasındaki eksikliklere yanıt olarak Lawrence Philips, Metafon Philips, 2000 yılında Double Metaphone adını verdiği Metaphone için bir iyileştirme geliştirdi. Double Metaphone, selefinden çok daha büyük bir kodlama kuralı kümesi içerir, Latin olmayan karakterlerin bir alt kümesini işler ve İngilizce'deki tek bir kelimenin farklı telaffuzlarını hesaba katmak için birincil ve ikincil bir kodlama döndürür. Philips, İngilizce sözcükler, Amerikalılar tarafından bilinen İngilizce olmayan sözcükler ve Amerika Birleşik Devletleri'nde bulunan adlar ve soyadlar için doğru kodlamaların çok daha yüksek bir yüzdesini sağlayan profesyonel bir sürüm sağlamak için 2009'da yeni bir revizyon olarak Metaphone 3'ü oluşturdu. Ayrıca, programcının eşleşmelerin hassasiyetini daha yakından odaklamasına izin vermek için daha kesin ünsüz ve dahili sesli harf eşleştirmesine izin veren ayarlar sağlar.

Ayrıca bakınız

Referanslar

  1. ^ a b "Soundex Endeksleme Sistemi". Ulusal Arşivler ve Kayıtlar İdaresi. 2007-05-30. Alındı 2010-12-24.
  2. ^ "PostgreSQL: Belgeler: 9.1: fuzzystrmatch". postgresql.com. Alındı 2012-11-03.
  3. ^ "MySQL :: MySQL 5.5 Referans Kılavuzu :: 12.5 Dize İşlevleri - SOUNDEX". dev.mysql.com.
  4. ^ "SQLite Tarafından Anlaşıldığı Gibi SQL - Temel İşlevler". sqlite.org. Alındı 2017-01-27.
  5. ^ "SOUNDEX (Transact-SQL)". msdn.microsoft.com. Alındı 2012-11-03.
  6. ^ "SOUNDEX". docs.oracle.com. Alındı 2017-10-20.
  7. ^ "Fonetik Eşleştirme: Daha İyi Bir Soundex". Alındı 2012-11-03.
  8. ^ Odell Margaret King (1956). "Kayıt yönetiminde kâr". Sistemler. New York. 20: 20.
  9. ^ ABD patenti 1261167, R. C. Russell, "(başlıksız)", 1918-04-02'de yayınlandı  (Arşivlendi )
  10. ^ ABD patenti 1435663, R. C. Russell, "(başlıksız)", 1922-11-14  (Arşivlendi )
  11. ^ Knuth, Donald E. (1973). Bilgisayar Programlama Sanatı: Cilt 3, Sıralama ve Arama. Addison-Wesley. sayfa 391–92. ISBN  978-0-201-03803-3. OCLC  39472999.
  12. ^ CodingForums.com ([1] )
  13. ^ "MySQL :: MySQL 5.5 Referans Kılavuzu :: 12.5 Dize İşlevleri - SOUNDEX". dev.mysql.com.
  14. ^ Mokotoff, Gary (2007-09-08). "Seslendirme ve Şecere". Alındı 2008-01-27.