Довольно трудно научить компьютер "понимать" строки так же, как это делает человек. Типичный пример этой проблемы — ошибки правописания, в частности, когда вы имеете дело с именами.
Несмотря на то что не существует решений, которые хотя бы в начальной степени приближались к возможностям человеческого мозга, все же некоторые алгоритмы в течении многих лет были разработаны для определения "сходства" между строками в виде полутонов, вместо "черно-белого" подхода.
Одним из примеров этого является алгоритм soundex, изначально разработанный
для применения в процессе переписи населения США в конце XIX века. Этот алгоритм работает за счет присвоения значения каждому гласному звуку алфавита и последующего вычисления общего значения слова на основе его начала и составляющих его слогов. Результирующее soundex-значение представляется начальной буквой слова и комбинацией значений его слогов.
Этот алгоритм, который был реализован в РНР в функции soundex (), может оказаться чрезвычайно полезным при поиске имен на основе их фонетических представлений. Например, слова "Tabini" и "Tabani" имеют одинаковые soundex-значения:
echo soundex ('Tabini'); echo "\n"; echo soundex ('Tabani'); echo "\n"; ?>
Приведенный выше сценарий вернет следующее:
Т150
Т150
В результате поиск имен становится намного легче, даже если их точное написание неизвестно.
Более совершенный алгоритм для сравнения двух слов базируется на их фонетическом представлении — метафоиический (metaphone), который был представлен в 1990 году Лоуренсом Филипсом (Lawrence Philips). Метафонический алгоритм работает методом присвоения фонетического значения комбинациям символов, на базе их типичного применения в английском языке.
В РНР доступна реализация этого алгоритма в виде функции metaphone ():
echo metaphone ('Tabini'); echo "\n"; echo metaphone ('Tabani') ; echo "\n"; ?>
Этот сценарий вернет метафоническое значение "TBN" для обеих строк.
|