Soundex - Soundex

Soundex это фонетический алгоритм за индексация имена по звучанию, как выраженный по-английски. Цель для омофоны быть закодированный к одному и тому же представлению, чтобы их можно было сопоставить, несмотря на незначительные различия в написание.[1] Алгоритм в основном кодирует согласные; гласная не будет закодирована, если это не первая буква. Soundex - самый известный из всех фонетические алгоритмы (отчасти потому, что это стандартная функция популярных программ баз данных, таких как DB2, PostgreSQL,[2] MySQL,[3] SQLite,[4] Ingres, MS SQL Server[5] и Oracle.[6]) Улучшения Soundex лежат в основе многих современных фонетических алгоритмов.[7]

История

Soundex был разработан Робертом Расселом и Маргарет Кинг Оделл.[8] и запатентованный в 1918 г.[9] и 1922 г.[10] Вариант, американский Soundex, использовался в 1930-х годах для ретроспективного анализа Переписи населения США с 1890 по 1920 год. Кодекс Soundex стал известен в 1960-х годах, когда он был предметом нескольких статей в Связь и Журнал Ассоциации вычислительной техники, и особенно когда описано в Дональда Кнута Искусство программирования.[11]

В Национальное управление архивов и документации (NARA) поддерживает текущий набор правил для официальной реализации Soundex, используемый правительством США.[1] Эти правила кодирования доступны в NARA по запросу в форме брошюры с общей информацией 55 «Использование Soundex переписи».

Американский Soundex

Код Soundex для имени состоит из письмо за которыми следуют три числовые цифры: буква - это первая буква имени, а цифры кодируют оставшиеся согласные. Согласные на подобном место сочленения имеют одну и ту же цифру, поэтому, например, губные согласные B, F, P и V кодируются как число 1.

Правильное значение можно найти следующим образом:

  1. Сохраните первую букву имени и отбросьте все остальные вхождения a, e, i, o, u, y, h, w.
  2. Замени согласные на цифры следующим образом (после первой буквы):
    • б, е, р, v → 1
    • c, g, j, k, q, s, x, z → 2
    • d, t → 3
    • л → 4
    • т, п → 5
    • г → 6
  3. Если в исходном имени (до шага 1) соседствуют две или более букв с одинаковым числом, сохраните только первую букву; также две буквы с одинаковым числом, разделенные «h» или «w», кодируются как одно число, тогда как такие буквы, разделенные гласной, кодируются дважды. Это правило также относится к первой букве.
  4. Если в вашем слове слишком мало букв, и вы не можете назначить три числа, добавляйте нули, пока не будет три числа. Если у вас четыре или более чисел, оставьте только первые три.

Используя этот алгоритм, и «Роберт», и «Руперт» возвращают одну и ту же строку «R163», а «Рубин» возвращает «R150». «Эшкрафт» и «Эшкрофт» уступают «А261». «Tymczak» дает «T522», а не «T520» (символы «z» и «k» в имени дважды кодируются как 2, поскольку между ними находится гласная). «Pfister» дает «P236», а не «P123» (первые две буквы имеют одинаковый номер и кодируются один раз как «P»), а «Honeyman» дает «H555».

Следующий алгоритм используется в большинстве языков SQL (за исключением PostgreSQL[пример необходим ]):

  1. Сохраните первую букву. Сопоставьте все вхождения a, e, i, o, u, y, h, w. до нуля (0)
  2. Замените все согласные (включая первую букву) цифрами, как в [2.] выше.
  3. Замените все соседние одинаковые цифры одной цифрой, а затем удалите все нулевые (0) цифры
  4. Если цифра сохраненной буквы совпадает с полученной первой цифрой, удалите цифру (оставьте букву).
  5. Добавьте 3 нуля, если результат содержит менее 3 цифр. Удалите все, кроме первой буквы и трех цифр после нее (этот шаг аналогичен [4.] в объяснении выше).

Два приведенных выше алгоритма не возвращают одинаковые результаты во всех случаях, главным образом из-за разницы между удалением гласных. Первый алгоритм используется большинством языков программирования, а второй - SQL. Например, как «Роберт», так и «Руперт» дают «R163», тогда как «Tymczak» дает «T520», а «Honeyman» дает «H555». При разработке приложения, сочетающего SQL и язык программирования, архитектор должен решить, выполнять ли все кодирование Soundex на сервере SQL или все на языке программирования. Реализация MySQL может возвращать более 4 символов.[12][13]

Варианты

Похожий алгоритм под названием «Reverse Soundex» ставит префикс последней буквы имени вместо первой.

В Система идентификации и разведки штата Нью-Йорк (NYSIIS) был представлен в 1970 году как усовершенствование алгоритма Soundex. NYSIIS обрабатывает некоторые многосимвольные н-граммы и поддерживает относительное расположение гласных, тогда как Soundex этого не делает.

Daitch – Mokotoff Soundex (D – M Soundex) был разработан в 1985 году специалистом по генеалогии Гэри Мокотовым и позже улучшен специалистом по генеалогии Рэнди Дэйч из-за проблем, с которыми они столкнулись при попытке применить Рассел Саундекс к евреям с германскими или славянскими фамилиями (такими как Московиц против Московица или Левин против Левин). D – M Soundex иногда называют «еврейским Soundex» или «восточноевропейским Soundex»,[14] хотя авторы не рекомендуют использовать эти имена. Алгоритм D – M Soundex может возвращать до 32 отдельных фонетических кодировок для одного имени. Результаты D-M Soundex возвращаются в полностью числовом формате от 100000 до 999999. Этот алгоритм намного сложнее, чем Russell Soundex.

В ответ на недостатки алгоритма Soundex Лоуренс Филипс разработал Метафон Алгоритм в 1990 году. В 2000 году Philips разработал усовершенствование Metaphone, которое он назвал Double Metaphone. Double Metaphone включает гораздо больший набор правил кодирования, чем его предшественник, обрабатывает подмножество нелатинских символов и возвращает первичную и вторичную кодировку для учета различного произношения одного слова на английском языке. Philips создала Metaphone 3 в качестве новой версии в 2009 году, чтобы предоставить профессиональную версию, которая обеспечивает гораздо более высокий процент правильных кодировок английских слов, неанглийских слов, знакомых американцам, а также имен и фамилий, встречающихся в Соединенных Штатах. Он также предоставляет настройки, которые позволяют более точно согласовывать согласные и внутренние гласные, что позволяет программисту более точно определять точность совпадений.

Смотрите также

Рекомендации

  1. ^ а б «Система индексации Soundex». Национальное управление архивов и документации. 2007-05-30. Получено 2010-12-24.
  2. ^ "PostgreSQL: Документация: 9.1: fuzzystrmatch". postgresql.com. Получено 2012-11-03.
  3. ^ "Справочное руководство MySQL :: MySQL 5.5 :: Строковые функции 12.5 - SOUNDEX". dev.mysql.com.
  4. ^ «SQL в понимании SQLite - основные функции». sqlite.org. Получено 2017-01-27.
  5. ^ «SOUNDEX (Transact-SQL)». msdn.microsoft.com. Получено 2012-11-03.
  6. ^ "SOUNDEX". docs.oracle.com. Получено 2017-10-20.
  7. ^ "Фонетическое соответствие: лучший Soundex". Получено 2012-11-03.
  8. ^ Оделл, Маргарет Кинг (1956). «Прибыль в делопроизводстве». Системы. Нью-Йорк. 20: 20.
  9. ^ Патент США 1261167, R. C. Russell, "(без названия)", выпущенный 1918-04-02  (В архиве )
  10. ^ Патент США 1435663, R. C. Russell, "(без названия)", выпущенный 1922-11-14  (В архиве )
  11. ^ Кнут, Дональд Э. (1973). Искусство программирования: Том 3, Сортировка и поиск. Эддисон-Уэсли. С. 391–92. ISBN  978-0-201-03803-3. OCLC  39472999.
  12. ^ CodingForums.com ([1] )
  13. ^ "Справочное руководство MySQL :: MySQL 5.5 :: Строковые функции 12.5 - SOUNDEX". dev.mysql.com.
  14. ^ Мокотофф, Гэри (2007-09-08). «Зондирование и генеалогия». Получено 2008-01-27.