Давайте сразу перейдем к вопросу: у вас есть бизнес-задача сопоставить похожие строковые значения. Алгоритм фонетического сопоставления может помочь вам в этом, однако с некоторыми ограничениями: они основаны на произношении и не нацелены на предоставление вам соответствующей оценки. Следовательно, что вам нужно сделать, так это применить алгоритм, а затем вычислить некоторую оценку соответствия для остатков (элементы без 100% совпадения). Это краткое изложение охватывает только обзор алгоритмов фонетического сопоставления. Стоит отметить, что фонетические алгоритмы наиболее актуальны для сопоставления имен и фамилий, потому что именно здесь возникает проблема с произношением, поэтому, если вам нужно сопоставить другие атрибуты, возможно, стоит попробовать другие методы.
Soundex
Этот алгоритм, созданный Робертом Расселом и Маргарет Кинг Оделл в 1918 году, предназначался для сопоставления имен и фамилий на основе основных правил английского произношения, поэтому похожие имена получают одинаковое значение. Это довольно просто, я представлю обобщенную схему исходного Soundex и его расширенной версии (это легко реализовать)
Фонетический код системы идентификации и разведки штата Нью-Йорк (NYSIIS)
Этот был разработан в 1970 году Центром идентификации и разведки штата Нью-Йорк (сюрприз, сюрприз). Идея та же, что и для Soundex: если есть омофоны, вы сопоставите их, назначив определенные индексы для определенных звуков. Что хорошего в его результатах: он более точен по сравнению с Soundex, так как возвращает меньше фамилий под тем же кодом.
Метафон
Метод Metaphone, разработанный Лоуренсом Филипсом в 1990 году, также более точен по сравнению с методом Soundex, поскольку он учитывает группы букв. Недостаток проявляется, когда вы применяете его для согласования строк, которые не на английском языке, поскольку он основан на правилах английского произношения. Логика следующая:
Вслед за Metaphone Philips разработала также Double Metaphone. Как следует из названия, он возвращает два кода, поэтому у вас больше шансов сопоставить элементы, однако в то же время это означает более высокую вероятность ошибки. Согласно алгоритму существует три уровня соответствия: первичный ключ к первичному ключу = самое сильное соответствие, вторичный ключ к первичному ключу = нормальное соответствие, вторичный ключ к вторичному ключу = самое слабое соответствие. Некоторое время спустя (9 лет, если быть точным) Philips представил свою жемчужину - Метафон 3 - расширенный алгоритм сопоставления, в основном предназначенный для сопоставления личной информации, такой как имена и фамилии, как и его предыдущие версии, однако со значительно более высокой степенью точности. Что замечательно, он адаптирован к различным языковым семьям (окончания жестко закодированы в коде), что позволяет ему соответствовать большинству европейских фамилий (включая, наверное, самые сложные - славянские). Вы можете ознакомиться с кодом, он очень подробный, красивый и не для бесплатного использования. Я бы даже очень рекомендовал проверить код всем, кто хоть немного интересуется сопоставлением строковых данных. Прочитав ее, вы сможете следовать логике автора, и это может привести вас к самым увлекательным открытиям, прямо к решению вашей бизнес-задачи!
Https://searchcode.com/codesearch/raw/2366000/
Каверфон
Если вы из Новой Зеландии или вам нужно соответствовать этим ребятам, вы можете следовать этому алгоритму.
Table 1: From +-------+-------+-------+--------+----+----+ | cough | rough | tough | enough | gn | mb | To +-------+-------+-------+--------+----+----+ | cou2f | rou2f | tou2f | enou2f | 2n | m2 | +-------+-------+-------+--------+----+----+ Table 2: From +----+----+----+----+-----+---+---+---+---+ | cq | ci | ce | cy | tch | c | q | x | v | To +----+----+----+----+-----+---+---+---+---+ | 2q | si | se | sy | 2ch | k | k | k | f | +----+----+----+----+-----+---+---+---+---+ From +----+-----+-----+---+----+---+----+---+ | dg | tio | tia | d | ph | b | sh | z | To +----+-----+-----+---+----+---+----+---+ | 2g | sio | sia | t | fh | p | s2 | s | +----+-----+-----+---+----+---+----+---+ Table 3: From +---+-----+----+---+------+----+ | j | ^y3 | ^y | y | 3gh3 | gh | To +---+-----+----+---+------+----+ | y | Y3 | A | 3 | 3kh3 | 22 | +---+-----+----+---+------+----+ From +---+----+----+----+----+----+----+ | g | s+ | t+ | p+ | k+ | f+ | m+ | To +---+----+----+----+----+----+----+ | k | S | T | P | K | F | M | +---+----+----+----+----+----+----+ From +----+----+-----+----+---+----+ | n+ | w3 | wh3 | w$ | w | ^h | To +----+----+-----+----+---+----+ | N | W3 | Wh3 | 3 | 2 | A | +----+----+-----+----+---+----+ From +---+----+----+---+----+----+---+ | h | r3 | r$ | r | l3 | l$ | l | To +---+----+----+---+----+----+---+ | 2 | R3 | 3 | 2 | L3 | 3 | 2 | +---+----+----+---+----+----+---+
* ^ обозначает начало строки, $ конец строки, s + соседние последующие символы
Система фонетического соответствия Бейдера-Морзе
Как заявили авторы, он предназначен для решения проблемы с большим количеством нерелевантных совпадений на основе языка, на котором написано имя, с применением правил произношения для конкретного языка. Здесь сложно объяснить даже часть правил, их 200. Однако основная идея заключается в том, что сначала вы определяете язык на основе правил. После этого слова переводятся в фонетические токены. После правил для конкретных языков должны применяться общие правила.
Смотрите полное описание здесь:
Вывод
Если вам нужно построить / использовать довольно простой алгоритм, выберите Soundex (все же, возможно, улучшенный), NYSIIS или Metaphone / Double Metaphone, однако рассмотрите более слабые результаты. То же верно и для конкретных случаев: Новая Зеландия - каверфон, славянский - Daitch-Mokotoff Soundex, немецкий - Cologne Phonetics.
Если вы ищете более сложную логику, вероятно, лучше всего будет либо фонетическое соответствие Бейдера-Морзе (бесплатно, сексуально) или Metaphone3 (не такое бесплатное, более сексуальное).