Soundex

Soundex to algorytm fonetyczny służący do indeksowania nazw według dźwięku wymawianego w języku angielskim. Celem jest zakodowanie homofonów do tej samej reprezentacji , aby można je było dopasować pomimo niewielkich różnic w pisowni . Algorytm koduje głównie spółgłoski; samogłoska nie zostanie zakodowana, chyba że jest to pierwsza litera. Soundex jest najbardziej znanym ze wszystkich algorytmów fonetycznych (po części dlatego, że jest standardową funkcją popularnego oprogramowania bazodanowego, takiego jak IBM Db2 , PostgreSQL , MySQL , SQLite , Ingres , MS SQL Server , Oracle ., Snowflake i SAP ASE .) Ulepszenia Soundex są podstawą wielu nowoczesnych algorytmów fonetycznych.

Historia

Soundex został opracowany przez Roberta C. Russella i Margaret King Odell i opatentowany w 1918 i 1922 roku. Odmiana, American Soundex, została użyta w latach trzydziestych XX wieku do retrospektywnej analizy spisów powszechnych w USA od 1890 do 1920 roku. 1960, kiedy był tematem kilku artykułów w Communications i Journal of the Association for Computing Machinery , a zwłaszcza gdy został opisany w The Art of Computer Programming Donalda Knutha .

National Archives and Records Administration (NARA) utrzymuje obecne zasady oficjalnej implementacji Soundex używane przez rząd USA. Te zasady kodowania są dostępne na życzenie w NARA w formie Ogólnej ulotki informacyjnej nr 55, „Korzystanie z Census Soundex”.

Amerykański Soundex

Kod Soundex dla nazwiska składa się z litery, po której następują trzy cyfry : litera jest pierwszą literą imienia, a cyfry kodują pozostałe spółgłoski . Spółgłoski w podobnym miejscu artykulacji mają tę samą cyfrę, więc na przykład spółgłoski wargowe B, F, P i V są kodowane jako liczba 1.

Prawidłową wartość można znaleźć w następujący sposób:

  1. Zachowaj pierwszą literę imienia i pomiń wszystkie inne wystąpienia a, e, i, o, u, y, h, w.
  2. Zastąp spółgłoski cyframi w następujący sposób (po pierwszej literze):
    • b, fa, p, v → 1
    • do, g, j, k, q, s, x, z → 2
    • re, t → 3
    • l → 4
    • m, n → 5
    • r → 6
  3. Jeżeli w oryginalnej nazwie sąsiadują ze sobą dwie lub więcej liter z tym samym numerem (przed krokiem 1), zachowaj tylko pierwszą literę; również dwie litery o tej samej liczbie oddzielone „h”, „w” lub „y” są kodowane jako pojedyncza liczba, podczas gdy takie litery oddzielone samogłoską są kodowane dwukrotnie. Ta zasada dotyczy również pierwszej litery.
  4. Jeśli w słowie jest zbyt mało liter, aby przypisać trzy cyfry, dodawaj zera, aż będą trzy cyfry. Jeśli są cztery lub więcej liczb, zachowaj tylko pierwsze trzy.

Korzystając z tego algorytmu, zarówno „Robert”, jak i „Rupert” zwracają ten sam ciąg „R163”, podczas gdy „Rubin” daje „R150”. „Ashcraft” i „Ashcroft” dają „A261”. „Tymczak” daje „T522”, a nie „T520” (znaki „z” i „k” w nazwie są dwukrotnie zakodowane jako 2, ponieważ między nimi znajduje się samogłoska). „Pfister” daje „P236”, a nie „P123” (dwie pierwsze litery mają ten sam numer i są kodowane raz jako „P”), a „Honeyman” daje „H555”.

Poniższy algorytm jest stosowany w większości języków SQL (z wyjątkiem PostgreSQL [ potrzebny przykład ] ):

  1. Zapisz pierwszą literę. Odwzoruj wszystkie wystąpienia a, e, i, o, u, y, h, w. do zera (0)
  2. Zamień wszystkie spółgłoski (włącznie z pierwszą literą) na cyfry jak w [2.] powyżej.
  3. Zastąp wszystkie sąsiednie takie same cyfry jedną cyfrą, a następnie usuń wszystkie cyfry zerowe (0).
  4. Jeśli cyfra zapisanej litery jest taka sama jak wynikowa pierwsza cyfra, usuń cyfrę (zachowaj literę).
  5. Dołącz 3 zera, jeśli wynik zawiera mniej niż 3 cyfry. Usuń wszystkie z wyjątkiem pierwszej litery i 3 cyfr po niej (Ten krok jest taki sam jak [4.] w powyższym wyjaśnieniu).

Dwa powyższe algorytmy nie zwracają takich samych wyników we wszystkich przypadkach, głównie z powodu różnicy między momentami usunięcia samogłosek. Pierwszy algorytm jest używany przez większość języków programowania, a drugi jest używany przez SQL. Jako przykłady, zarówno „Robert”, jak i „Rupert” dają „R163”, podczas gdy „Tymczak” daje „T520”, a „Honeyman” daje „H555”. Projektując aplikację, która łączy język SQL i język programowania, architekt musi zdecydować, czy wykonać całe kodowanie Soundex w serwerze SQL, czy też całość w języku programowania. Implementacja MySQL może zwrócić więcej niż 4 znaki.

Warianty

Podobny algorytm o nazwie „Reverse Soundex” poprzedza ostatnią literę nazwy zamiast pierwszej.

Algorytm New York State Identification and Intelligence System (NYSIIS) został wprowadzony w 1970 roku jako ulepszenie algorytmu Soundex. NYSIIS obsługuje niektóre wieloznakowe n-gramy i utrzymuje względne położenie samogłosek, podczas gdy Soundex tego nie robi.

Daitch-Mokotoff Soundex (D-M Soundex) został opracowany w 1985 roku przez genealoga Gary'ego Mokotoffa, a później ulepszony przez genealoga Randy'ego Daitcha z powodu problemów, jakie napotkali podczas próby zastosowania Russell Soundex do Żydów o nazwiskach germańskich lub słowiańskich (takich jak Moskowitz vs. Moskovitz czy Levine vs. Lewin). D – M Soundex jest czasami określany jako „Jewish Soundex” lub „Eastern European Soundex”, chociaż autorzy odradzają używanie tych nazw. Algorytm D – M Soundex może zwrócić nawet 32 ​​indywidualne kodowania fonetyczne dla pojedynczego nazwiska. Wyniki DM Soundex są zwracane w formacie liczbowym z przedziału od 100000 do 999999. Algorytm ten jest znacznie bardziej złożony niż algorytm Russell Soundex.

W odpowiedzi na braki w algorytmie Soundex, Lawrence Philips opracował Metaphone algorytm w 1990 roku. Philips opracował ulepszenie Metaphone w 2000 roku, które nazwał Double Metaphone. Double Metaphone zawiera znacznie większy zestaw reguł kodowania niż jego poprzednik, obsługuje podzbiór znaków innych niż łacińskie i zwraca podstawowe i dodatkowe kodowanie, aby uwzględnić różne wymowy pojedynczego słowa w języku angielskim. Philips stworzył Metaphone 3 jako kolejną wersję w 2009 roku, aby zapewnić profesjonalną wersję, która zapewnia znacznie wyższy odsetek poprawnych kodowań słów angielskich, słów innych niż angielski znanych Amerykanom oraz imion i nazwisk występujących w Stanach Zjednoczonych. Zapewnia również ustawienia, które umożliwiają dokładniejsze dopasowywanie spółgłosek i wewnętrznych samogłosek, aby umożliwić programiście dokładniejsze dopasowanie precyzji.

Zobacz też