Soundex: различия между версиями
[непроверенная версия] | [непроверенная версия] |
Нет описания правки |
|||
(не показана 31 промежуточная версия 20 участников) | |||
Строка 1: | Строка 1: | ||
'''Soundex''' |
'''Soundex''' — один из [[алгоритм]]ов сравнения [[Строковый тип|строк]] по их звучанию; устанавливает одинаковый индекс для строк, имеющих схожее звучание в [[Английский язык|английском языке]]. |
||
Разработан Робертом Расселом ({{lang-en2|Robert C. Russel}}) и Маргарет Кинг Оделл ({{lang-en2|Margaret King Odell}}) и запатентован в 1918 и 1922 годах<ref>{{US patent|1261167}}</ref><ref>{{US patent|1435663}}</ref>, является исторически первым {{iw|фонетический алгоритм|фонетическим алгоритмом|en|Phonetic algorithm}}. Стал популярным в 1960-х годах после того как ему были посвящены несколько статей в журналах «[[Communications of the ACM|Communications of the ACM»]] и «[[Journal of the ACM|Journal of the ACM»]]; ещё большую известность он обрёл после появления в «[[Искусство программирования|Искусстве программирования]]» [[Кнут, Дональд Эрвин|Кнута]]<ref>{{книга |
|||
Этот алгоритм имеет сильную зависимость от языка, слова которого сравниваются. |
|||
⚫ | |||
⚫ | |||
Soundex был разработан Робертом Расселлом (Robert Russel) и Маргарет Обелл (Margaret Obell) и запатентован в 1918 и 1922 годах ({{US patent|1,261,167}} и {{US patent|1,435,663}}). Этот алгоритм стал популярным в 1960-х годах, после того как стал темой нескольких статей в журналах «Communications of the Association for Computing» и «Journal of the Association for Computing Machinery» (CACM и JACM). Еще большую популярность этот алгоритм получил после того, как был опубликован в книге {{книга |
|||
⚫ | |||
⚫ | |||
|ссылка = |
|ссылка = |
||
|часть = Часть 6. Поиск|том = 3. Сортировка и поиск|страницы = 249|оригинал = The Art of Computer Programming|год = 2012}}</ref>. С 1980-х годов используется как стандартная функция во многих [[СУБД]]. |
|||
}} |
|||
Изначально ориентирован на [[Фонетика|фонетику]] [[Американский вариант английского языка|американского варианта]] английского языка, посредством модификаций может быть применён и для других вариантов и языков, но в ряде случаев требуются существенные изменения (как, например, в {{iw|алгоритм Дейча — Мокотоффа|алгоритме Дейча — Мокотоффа|en|Daitch–Mokotoff Soundex}}, поддерживающем имена собственные на [[идиш]]е и [[Славянские языки|славянских языках]]). Впоследствии также появились альтернативы, ориентированные в большей степени на обычные слова английского языка, нежели на имена собственные (такие как [[Metaphone]], {{iw|Caverphone}}) |
|||
==Описание== |
|||
== Шаги алгоритма == |
|||
* Первая буква сохраняется |
|||
# Запоминается первая буква слова. |
|||
# Удаляются все вхождения <tt>[[H (латиница)|h]]</tt> и <tt>[[w]]</tt> (за исключением первой буквы слова). |
|||
** Гласные (aehiouwy) выбрасываем |
|||
# Согласные заменяются на цифры от 1 до 6, причём похожим по звучанию буквам соответствуют одинаковые цифры: |
|||
#* <tt>b, f, p, v → 1</tt> |
|||
#* <tt>c, g, j, k, q, s, x, z → 2</tt> |
|||
#* <tt>d, t → 3</tt> |
|||
#* <tt>l → 4</tt> |
|||
#* <tt>m, n → 5</tt> |
|||
#* <tt>r → 6</tt> |
|||
# Любая последовательность одинаковых цифр сокращается до одной такой цифры. |
|||
# Удаляются все <tt>a</tt>, <tt>e</tt>, <tt>i</tt>, <tt>o</tt>, <tt>u</tt>, <tt>y</tt> (за исключением первой буквы слова). |
|||
* Обрезаем до первых четырёх символов |
|||
# Заменяется первый символ буквой, запомненной на шаге 1, делая её заглавной. |
|||
# Итоговая строка обрезается до первых четырёх символов. Если длина строки меньше требуемой, недостающие символы заменяются знаком 0. |
|||
Примеры: |
Примеры: |
||
* аmmonium |
* <tt>аmmonium → а55o5iu5 → а5o5iu5 → a555 → A555</tt> |
||
* implementation |
* <tt>implementation → i514e5e53a3io5 → i51455335 → i514 → I514</tt> |
||
* <tt>Robert = Rupert → R163</tt>, <tt>Rubin → R150</tt> |
|||
* <tt>Ashcraft = Ashcroft → A261</tt> (но не <tt>A226</tt>: буквы <tt>s</tt> и <tt>c</tt> в словах дадут одну цифру <tt>2</tt>, а не <tt>22</tt>, так как разделены <tt>h</tt>). |
|||
* <tt>Tymczak → T522</tt>, а не <tt>T520</tt> (буквы <tt>z</tt> и <tt>k</tt> заменяются на <tt>22</tt>, так как разделены гласной). |
|||
== Примечания == |
|||
==Пример исполнения== |
|||
{{примечания}} |
|||
Ниже приведен пример реализации алгоритма на языке программирования [[Perl]]. |
|||
<source lang="perl"> |
|||
sub soundex |
|||
{ |
|||
my $word = lc (shift // $_); |
|||
$word =~ tr/\t //d; |
|||
my $fl = substr $word, 0, 1; |
|||
$word = substr $word, 1; |
|||
$word =~ tr/bfpvcgjkqsxzdtlmnraehiouwy/111122222222334556/ds; |
|||
return substr "$fl$word", 0, 4; |
|||
} |
|||
</source> |
|||
{{нет источников|дата=2015-01-11}} |
|||
== См. также == |
|||
* [[Metaphone]] |
|||
== Ссылки на попытки создания soundex для русского языка == |
|||
* http://community.livejournal.com/ru_php/1062493.html |
|||
<s>* http://kankowski.narod.ru/dev/metaphoneru.htm</s> <small>HTTP 404</small>{{Проверено|29|05|2010|User=212.92.186.77}} ([http://web.archive.org/web/20071107145942/http://kankowski.narod.ru/dev/metaphoneru.htm архивная версия]) |
|||
[[Категория:Строковые алгоритмы]] |
[[Категория:Строковые алгоритмы]] |
||
[[de:Soundex]] |
|||
[[en:Soundex]] |
|||
[[es:Soundex]] |
|||
[[fr:Soundex]] |
|||
[[he:סאונדקס]] |
|||
[[pl:Soundex]] |
|||
[[tr:Soundex]] |
|||
[[vi:Soundex]] |
|||
[[zh:Soundex]] |
Текущая версия от 13:16, 25 декабря 2022
Soundex — один из алгоритмов сравнения строк по их звучанию; устанавливает одинаковый индекс для строк, имеющих схожее звучание в английском языке.
Разработан Робертом Расселом (Robert C. Russel) и Маргарет Кинг Оделл (Margaret King Odell) и запатентован в 1918 и 1922 годах[1][2], является исторически первым фонетическим алгоритмом[англ.]. Стал популярным в 1960-х годах после того как ему были посвящены несколько статей в журналах «Communications of the ACM» и «Journal of the ACM»; ещё большую известность он обрёл после появления в «Искусстве программирования» Кнута[3]. С 1980-х годов используется как стандартная функция во многих СУБД.
Изначально ориентирован на фонетику американского варианта английского языка, посредством модификаций может быть применён и для других вариантов и языков, но в ряде случаев требуются существенные изменения (как, например, в алгоритме Дейча — Мокотоффа[англ.], поддерживающем имена собственные на идише и славянских языках). Впоследствии также появились альтернативы, ориентированные в большей степени на обычные слова английского языка, нежели на имена собственные (такие как Metaphone, Caverphone[англ.])
Шаги алгоритма
[править | править код]- Запоминается первая буква слова.
- Удаляются все вхождения h и w (за исключением первой буквы слова).
- Согласные заменяются на цифры от 1 до 6, причём похожим по звучанию буквам соответствуют одинаковые цифры:
- b, f, p, v → 1
- c, g, j, k, q, s, x, z → 2
- d, t → 3
- l → 4
- m, n → 5
- r → 6
- Любая последовательность одинаковых цифр сокращается до одной такой цифры.
- Удаляются все a, e, i, o, u, y (за исключением первой буквы слова).
- Заменяется первый символ буквой, запомненной на шаге 1, делая её заглавной.
- Итоговая строка обрезается до первых четырёх символов. Если длина строки меньше требуемой, недостающие символы заменяются знаком 0.
Примеры:
- аmmonium → а55o5iu5 → а5o5iu5 → a555 → A555
- implementation → i514e5e53a3io5 → i51455335 → i514 → I514
- Robert = Rupert → R163, Rubin → R150
- Ashcraft = Ashcroft → A261 (но не A226: буквы s и c в словах дадут одну цифру 2, а не 22, так как разделены h).
- Tymczak → T522, а не T520 (буквы z и k заменяются на 22, так как разделены гласной).
Примечания
[править | править код]- ↑ U.S. Patent 1 261 167
- ↑ U.S. Patent 1 435 663
- ↑ Дональд Кнут. Часть 6. Поиск // Искусство программирования = The Art of Computer Programming. — 2012. — Т. 3. Сортировка и поиск. — С. 249.
В статье не хватает ссылок на источники (см. рекомендации по поиску). |