Из Википедии, свободной энциклопедии
Перейти к навигации Перейти к поиску

Саундэкс является фонетическим алгоритмом для индексации имен по звуку, так как произносятся на английском языке. Цель состоит в том, чтобы омофоны были закодированы в одно и то же представление, чтобы их можно было сопоставить, несмотря на незначительные различия в написании . [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 обрабатывает некоторые многосимвольные n-граммы и поддерживает относительное расположение гласных, тогда как Soundex этого не делает.

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

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

См. Также [ править ]

  • Подход к рейтинговому матчу
  • Расстояние Левенштейна

Ссылки [ править ]

  1. ^ а б «Система индексации Soundex» . Национальное управление архивов и документации . 2007-05-30 . Проверено 24 декабря 2010 .
  2. ^ "PostgreSQL: Документация: 9.1: fuzzystrmatch" . postgresql.com . Проверено 3 ноября 2012 .
  3. ^ "MySQL :: MySQL 5.5: Справочное руководство :: Строковые функции 12.5 - SOUNDEX" . dev.mysql.com .
  4. ^ «SQL в понимании SQLite - основные функции» . sqlite.org . Проверено 27 января 2017 .
  5. ^ «SOUNDEX (Transact-SQL)» . msdn.microsoft.com . Проверено 3 ноября 2012 .
  6. ^ "SOUNDEX" . docs.oracle.com . Проверено 20 октября 2017 .
  7. ^ «Фонетическое соответствие: лучший Soundex» . Проверено 3 ноября 2012 .
  8. ^ Оделл, Маргарет Кинг (1956). «Прибыль в делопроизводстве» . Системы . Нью-Йорк. 20 : 20.
  9. ^ Патент США 1261167 , RC Рассел "(без названия)", выпущенный 1918-04-02  ( архивации )
  10. ^ Патент США 1435663 , RC Рассел "(без названия)", выпущенный 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. ^ Mokotoff, Гэри (2007-09-08). «Зондирование и генеалогия» . Проверено 27 января 2008 .