Soundex — фонетический алгоритм для индексации имен по звуку, как они произносятся на английском языке. Цель состоит в том, чтобы кодировать омофоны в одно и то же представление, чтобы их можно было сопоставить, несмотря на незначительные различия в написании . [1] Алгоритм в основном кодирует согласные; гласная не будет кодироваться, если она не является первой буквой. Soundex — наиболее широко известный из всех фонетических алгоритмов (отчасти потому, что это стандартная функция популярного программного обеспечения для баз данных, такого как IBM Db2 , PostgreSQL , [2] MySQL , [3] SQLite , [4] Ingres , MS SQL Server , [5] Oracle , [6] ClickHouse , [7] Snowflake [8] и SAP ASE . [9] ) Улучшения Soundex являются основой для многих современных фонетических алгоритмов. [10]
Soundex был разработан Робертом С. Расселом и Маргарет Кинг Оделл [11] и запатентован в 1918 [12] и 1922 годах. [13] Вариант, American Soundex, использовался в 1930-х годах для ретроспективного анализа переписей населения США с 1890 по 1920 год. Код Soundex приобрел известность в 1960-х годах, когда он стал предметом нескольких статей в Communications and Journal of the Association for Computing Machinery , и особенно после описания в книге Дональда Кнута «Искусство компьютерного программирования» . [14]
Национальное управление архивов и документации (NARA) поддерживает текущий набор правил для официальной реализации Soundex, используемого правительством США. [1] Эти правила кодирования доступны в NARA по запросу в форме Информационного буклета общего назначения 55 «Использование переписного Soundex».
Код Soundex для имени состоит из буквы, за которой следуют три числовые цифры : буква является первой буквой имени, а цифры кодируют остальные согласные . Согласные в схожем месте артикуляции имеют одну и ту же цифру, так, например, губные согласные B, F, P и V кодируются как число 1.
Правильное значение можно найти следующим образом:
Используя этот алгоритм, и "Robert", и "Rupert" возвращают одну и ту же строку "R163", в то время как "Rubin" возвращает "R150". "Ashcraft" и "Ashcroft" возвращают "A261". "Tymczak" возвращает "T522", а не "T520" (символы "z" и "k" в имени кодируются как 2 дважды, так как между ними находится гласная). "Pfister" возвращает "P236", а не "P123" (первые две буквы имеют одинаковый номер и кодируются один раз как "P"), а "Honeyman" возвращает "H555".
Следующий алгоритм используется в большинстве языков SQL (за исключением PostgreSQL [ необходим пример ] ):
Два алгоритма выше не возвращают одинаковые результаты во всех случаях, в первую очередь из-за разницы между тем, когда удаляются гласные. Первый алгоритм используется большинством языков программирования, а второй — SQL. Например, «Tymczak» возвращает «T522» в первом алгоритме, но «T520» в алгоритме, используемом SQL. Часто оба алгоритма генерируют один и тот же код. Например, и «Robert», и «Rupert» возвращают «R163», а «Honeyman» возвращает «H555». При проектировании приложения, которое объединяет SQL и язык программирования, архитектор должен решить, выполнять ли всю кодировку Soundex на сервере SQL или все на языке программирования. Реализация MySQL может возвращать более 4 символов. [15] [16]
Похожий алгоритм, называемый «Reverse Soundex», добавляет в качестве префикса последнюю букву имени вместо первой.
Алгоритм системы идентификации и разведки штата Нью-Йорк (NYSIIS) был представлен в 1970 году как усовершенствование алгоритма Soundex. NYSIIS обрабатывает некоторые многосимвольные n-граммы и сохраняет относительное расположение гласных, тогда как Soundex этого не делает.
Daitch–Mokotoff Soundex (D–M Soundex) был разработан в 1985 году генеалогом Гэри Мокотоффом и позже улучшен генеалогом Рэнди Дейчем из-за проблем, с которыми они столкнулись при попытке применить Russell Soundex к евреям с германскими или славянскими фамилиями (такими как Moskowitz vs. Moskovitz или Levine vs. Lewin). D–M Soundex иногда называют «еврейским Soundex» или «восточноевропейским Soundex» [17] , хотя авторы не рекомендуют использовать эти имена. Алгоритм D–M Soundex может возвращать до 32 отдельных фонетических кодировок для одного имени. Результаты DM Soundex возвращаются в полностью числовом формате от 100000 до 999999. Этот алгоритм намного сложнее, чем Russell Soundex.
В ответ на недостатки алгоритма Soundex Лоуренс Филипс разработал алгоритм Metaphone в 1990 году. В 2000 году Philips разработал усовершенствование Metaphone, которое он назвал Double Metaphone. Double Metaphone включает в себя гораздо больший набор правил кодирования, чем его предшественник, обрабатывает подмножество нелатинских символов и возвращает первичную и вторичную кодировку для учета различных произношений одного слова на английском языке. Philips создал Metaphone 3 в качестве дальнейшей доработки в 2009 году, чтобы предоставить профессиональную версию, которая обеспечивает гораздо более высокий процент правильных кодировок для английских слов, неанглийских слов, знакомых американцам, а также имен и фамилий, встречающихся в Соединенных Штатах. Он также предоставляет настройки, которые позволяют более точно сопоставлять согласные и внутренние гласные, позволяя программисту более точно фокусироваться на точности совпадений.